record = WorkOrder::with([ 'client', 'vehicle', 'master', 'works.labor', 'works.master', 'parts.part', 'parts.batch', 'payments.user', 'subcontractJobs.subcontractor', ])->findOrFail($record); } public function setTab(string $tab): void { $this->activeTab = $tab; } public function getTitle(): string|\Illuminate\Contracts\Support\Htmlable { return __('Fișă') . ' ' . ($this->record->number ?? ''); } public function getHeading(): string|\Illuminate\Contracts\Support\Htmlable { return ''; } /** Latest 5 WOs for the vehicle (repair history sidebar). */ public function getRepairHistory(): \Illuminate\Support\Collection { if (! $this->record->vehicle_id) return collect(); return WorkOrder::where('vehicle_id', $this->record->vehicle_id) ->where('id', '!=', $this->record->id) ->orderByDesc('opened_at') ->limit(5) ->get(['id', 'number', 'opened_at', 'total', 'status']); } /** Aggregated finance data — used by right panel in future phases. */ public function getFinance(): array { $r = $this->record; $worksSum = (float) $r->works->sum('total'); $partsSum = (float) $r->parts->sum('total'); $subtotal = $worksSum + $partsSum; $discount = (float) $r->discount; $total = max(0, $subtotal - $discount); $paid = $r->paidAmount(); return [ 'works_sum' => $worksSum, 'parts_sum' => $partsSum, 'subtotal' => $subtotal, 'discount' => $discount, 'total' => $total, 'paid' => $paid, 'balance' => max(0, $total - $paid), ]; } }