up
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
|
||||
class DetalleCompra extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'compra_id',
|
||||
'producto_id',
|
||||
'variante_id',
|
||||
'bodega_id',
|
||||
'cantidad',
|
||||
'precio_unitario',
|
||||
'subtotal',
|
||||
'producto_nombre_snapshot',
|
||||
'variante_info_snapshot',
|
||||
'DetalleCompra',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast to native types.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts = [
|
||||
'id' => 'integer',
|
||||
'compra_id' => 'integer',
|
||||
'producto_id' => 'integer',
|
||||
'variante_id' => 'integer',
|
||||
'bodega_id' => 'integer',
|
||||
'cantidad'=> 'integer',
|
||||
'precio_unitario' => 'decimal:2',
|
||||
'subtotal' => 'decimal:2',
|
||||
];
|
||||
|
||||
public function compra(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Compra::class);
|
||||
}
|
||||
|
||||
public function producto(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Producto::class)->withDefault();
|
||||
}
|
||||
|
||||
public function variante():BelongsTo
|
||||
{
|
||||
return $this->belongsTo(ProductVariant::class)->withDefault();
|
||||
}
|
||||
|
||||
public function bodega(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Bodega::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtiene el nombre del producto, usando snapshot si el producto fue eliminado
|
||||
*/
|
||||
public function getProductoNombreAttribute(): string
|
||||
{
|
||||
if ($this->producto) {
|
||||
return $this->producto->nombre;
|
||||
}
|
||||
|
||||
return $this->producto_nombre_snapshot ?? 'Producto eliminado';
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtiene la información de la variante, usando snapshot si la variante fue eliminada
|
||||
*/
|
||||
public function getVarianteInfoAttribute(): ?string
|
||||
{
|
||||
if ($this->variante) {
|
||||
// Validación defensiva para evitar error "name" on null
|
||||
$colorName = $this->variante->color ? $this->variante->color->name : 'Sin color';
|
||||
$sizeName = $this->variante->size ? $this->variante->size->name : 'Sin talla';
|
||||
|
||||
return $colorName . ' / ' . $sizeName;
|
||||
}
|
||||
|
||||
return $this->variante_info_snapshot;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user