feat(work-order-dashboard): friendly redirect for missing/foreign WO

Instead of a bare 404 when a work-order id doesn't resolve, redirect to
the list with a persistent notification explaining why: either the WO
doesn't exist, or it belongs to a different tenant.

This is the most common 404 cause: user types /app/work-orders/2/dashboard
but WO id 2 is in another tenant's slice — the tenant scope filters it
out and find() returns null.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-05 19:37:00 +00:00
parent 114ae31b15
commit 33d1675182
@@ -34,16 +34,32 @@ class WorkOrderDashboard extends Page
public function mount(int|string $record): void
{
$id = (int) $record;
$wo = WorkOrder::with([
'client', 'vehicle', 'master',
'works.labor', 'works.master',
'parts.part',
'payments.user',
'subcontractJobs.subcontractor',
])->find((int) $record);
])->find($id);
if (! $wo) {
abort(404);
// Diagnose: does it exist in another tenant?
$existsGlobally = WorkOrder::withoutGlobalScopes()
->where('id', $id)->exists();
$tenant = app(\App\Tenancy\TenantManager::class)->current();
$tenantSlug = $tenant?->slug ?? '—';
$msg = $existsGlobally
? sprintf(__('Fișa #%d există, dar nu aparține tenantului „%s".'), $id, $tenantSlug)
: sprintf(__('Fișa #%d nu există. Verifică lista de fișe active.'), $id);
\Filament\Notifications\Notification::make()
->title(__('Fișă indisponibilă'))
->body($msg)
->danger()
->persistent()
->send();
redirect('/app/work-orders')->send();
exit;
}
$this->record = $wo;
}