label('Aplică șablon') ->icon('heroicon-m-clipboard-document-list') ->color('gray') ->schema([ \Filament\Forms\Components\Select::make('template_id') ->label('Șablon serviciu') ->options(fn () => \App\Models\Tenant\ServiceTemplate::where('is_active', true)->pluck('name', 'id')) ->searchable() ->required(), ]) ->action(function (array $data) { $template = \App\Models\Tenant\ServiceTemplate::with('items')->find($data['template_id']); if (! $template) return; $r = app(\App\Services\ServiceComposer::class)->applyTemplate($this->record, $template); $this->fillForm(); \Filament\Notifications\Notification::make() ->title("Șablon aplicat: {$r['labor']} manopere, {$r['parts']} piese") ->success()->send(); }), Actions\Action::make('ai_diagnose') ->label('AI: sugerează diagnostic') ->icon('heroicon-m-sparkles') ->color('primary') ->visible(fn () => ! empty($this->record->complaint)) ->modalHeading('Diagnostic AI bazat pe plângerea clientului') ->modalSubmitAction(false) ->modalCancelActionLabel('Închide') ->modalContent(function () { [$reply, $meta] = app(\App\Services\Ai\AiAssistantService::class) ->suggestDiagnosis($this->record); return view('filament.tenant.ai-reply', ['reply' => $reply, 'meta' => $meta]); }), Actions\Action::make('tracking') ->label('Link client (QR)') ->icon('heroicon-m-qr-code') ->color('primary') ->modalHeading(fn () => 'Tracking client — WO #' . $this->record->number) ->modalSubmitAction(false) ->modalCancelActionLabel('Închide') ->modalContent(fn () => view('filament.tenant.tracking-qr', [ 'wo' => $this->record, ])), Actions\Action::make('pdf') ->label('Descarcă PDF') ->icon('heroicon-m-document-arrow-down') ->color('gray') ->action(function () { /** @var WorkOrder $wo */ $wo = $this->record; $svc = app(WorkOrderPdfService::class); $pdf = $svc->generate($wo); return response()->streamDownload( fn () => print($pdf->output()), $svc->filename($wo) ); }), Actions\DeleteAction::make(), ]; } }