label('Visualizza PDF') ->icon('heroicon-o-eye') ->color('gray') ->visible(fn () => $this->record->stato !== 'bozza') ->url(fn () => route('preventivi.pdf.show', $this->record)) ->openUrlInNewTab(), Actions\Action::make('scaricaPdf') ->label('Scarica PDF') ->icon('heroicon-o-arrow-down-tray') ->color('gray') ->visible(fn () => $this->record->stato !== 'bozza') ->action(function () { if (! $this->record->pdf_path || ! Storage::disk('local')->exists($this->record->pdf_path)) { $this->record->pdf_path = PreventivoPdf::genera($this->record); $this->record->save(); } return Storage::disk('local')->download( $this->record->pdf_path, 'preventivo-'.$this->record->numero.'.pdf' ); }), // Il PDF è salvato alla conferma e poi riservito così com'è: dopo modifiche al // template o ai dati va rigenerato. Actions\Action::make('rigeneraPdf') ->label('Rigenera PDF') ->icon('heroicon-o-arrow-path') ->color('gray') ->visible(fn () => $this->record->stato !== 'bozza') ->requiresConfirmation() ->modalDescription('Il PDF verrà ricreato con il modello e i dati attuali, sostituendo quello salvato.') ->action(function () { $this->record->pdf_path = PreventivoPdf::genera($this->record); $this->record->save(); Notification::make()->title('PDF rigenerato')->success()->send(); }), Actions\EditAction::make(), ]; } }