'Necesară', 'ordered' => 'Comandată', 'delivered' => 'Sosită', 'installed' => 'Montată', ]; protected $fillable = [ 'company_id', 'work_order_id', 'part_id', 'name', 'article', 'brand', 'qty', 'unit', 'buy_price', 'sell_price', 'discount_pct', 'total', 'status', 'notes', ]; protected $casts = [ 'qty' => 'decimal:2', 'buy_price' => 'decimal:2', 'sell_price' => 'decimal:2', 'discount_pct' => 'decimal:2', 'total' => 'decimal:2', ]; public function workOrder(): BelongsTo { return $this->belongsTo(WorkOrder::class); } public function part(): BelongsTo { return $this->belongsTo(Part::class); } protected static function booted(): void { static::saving(function (self $row) { $sub = (float) $row->qty * (float) $row->sell_price; $disc = (float) $row->discount_pct; $row->total = round($sub * (1 - $disc / 100), 2); }); // When a part is marked installed, decrement catalog stock once. static::updating(function (self $row) { $wasInstalled = $row->getOriginal('status') === 'installed'; $isInstalled = $row->status === 'installed'; if (! $wasInstalled && $isInstalled && $row->part_id) { $part = Part::find($row->part_id); $part?->adjustStock(-(float) $row->qty); } // If reverting from installed → restore stock if ($wasInstalled && ! $isInstalled && $row->part_id) { $part = Part::find($row->part_id); $part?->adjustStock((float) $row->qty); } }); static::saved(fn (self $row) => $row->workOrder?->recalcTotal()); static::deleted(fn (self $row) => $row->workOrder?->recalcTotal()); } }