* @version 1.0.0 */ class InventorySerial extends Model { protected $fillable = [ 'inventory_id', 'serial_number', 'status', 'sale_detail_id', 'notes', ]; protected $casts = [ 'status' => 'string', ]; public function inventory() { return $this->belongsTo(Inventory::class); } public function saleDetail() { return $this->belongsTo(SaleDetail::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, ]); } }