pdv.backend/app/Models/InventorySerial.php

101 lines
2.0 KiB
PHP

<?php namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* Modelo para números de serie de inventario
*
* @author Moisés Cortés C. <moises.cortes@notsoweb.com>
* @version 1.0.0
*/
class InventorySerial extends Model
{
protected $fillable = [
'inventory_id',
'serial_number',
'status',
'sale_detail_id',
'return_detail_id',
'notes',
];
protected $casts = [
'status' => 'string',
];
public function inventory()
{
return $this->belongsTo(Inventory::class);
}
public function saleDetail()
{
return $this->belongsTo(SaleDetail::class);
}
public function returnDetail()
{
return $this->belongsTo(ReturnDetail::class);
}
/**
* Verificar si el serial está disponible
*/
public function isAvailable(): bool
{
return $this->status === 'disponible';
}
/**
* Marcar como vendido
*/
public function markAsSold(int $saleDetailId): void
{
$this->update([
'status' => 'vendido',
'sale_detail_id' => $saleDetailId,
]);
}
/**
* Marcar como disponible (ej: cancelación de venta)
*/
public function markAsAvailable(): void
{
$this->update([
'status' => 'disponible',
'sale_detail_id' => null,
]);
}
/**
* Marcar como devuelto
*/
public function markAsReturned(int $returnDetailId): void
{
$this->update([
'status' => 'devuelto',
'return_detail_id' => $returnDetailId,
]);
}
/**
* Restaurar a disponible desde devuelto
*/
public function restoreFromReturn(): void
{
$this->update([
'status' => 'disponible',
'sale_detail_id' => null,
]);
}
/**
* Verificar si el serial está devuelto
*/
public function isReturned(): bool
{
return $this->status === 'devuelto';
}
}