Three features: labor group headers, status picker, catalog import

- LaborResource: add titlePrefixedWithLabel(false) so group headers show
  just the localized category name (not "Categorie: Шины"); remove static
  cache from closure to avoid Octane cross-request locale bleed
- WorkOrderDashboard: add changeStatus() Livewire method + Alpine.js
  dropdown on the status badge so status can be changed directly from
  the dashboard without going to the full edit form
- New artisan command catalog:import-labors {company} that reads
  database/data/labor-catalog.json (386 operations, 45 leaf categories)
  and upserts labor_categories + labors for the given tenant; supports
  --force to update existing records by code
- Add "Status actualizat" translation to ru/en JSON

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-09-08 04:38:35 +00:00
parent 06fac16026
commit 5e923459f7
7 changed files with 5512 additions and 6 deletions
@@ -248,6 +248,21 @@ class WorkOrderDashboard extends Page
->first(['id', 'number']);
}
public function changeStatus(string $status): void
{
if (! array_key_exists($status, WorkOrder::STATUSES)) return;
$wo = $this->record;
$wo->status = $status;
if ($status === 'done' && ! $wo->closed_at) {
$wo->closed_at = now();
}
$wo->save();
$this->record->refresh();
\Filament\Notifications\Notification::make()
->title(__('Status actualizat'))
->success()->send();
}
public function closeWorkOrder(): void
{
$wo = $this->record;