label('Importa titoli') ->icon('heroicon-o-document-text') ->color('gray') ->modalHeading(fn (Sistema $record) => "Importa titoli dei modelli {$record->nome}") ->modalSubmitActionLabel('Importa titoli') ->form([ Forms\Components\FileUpload::make('file') ->label('File Excel') ->helperText('File .xls o .xlsx con le colonne ORDINE (codice del modello) e TITOLO. Dei modelli esistenti si aggiorna solo il titolo; i codici nuovi creano un modello disattivo.') ->required() ->storeFiles(false) ->maxSize(10240), ]) ->action(function (array $data, Sistema $record) { $file = is_array($data['file']) ? reset($data['file']) : $data['file']; try { $titoli = $file instanceof TemporaryUploadedFile ? TitoliModelliImporter::leggi($file->getRealPath()) : []; } catch (Throwable $e) { report($e); $titoli = []; } if (! $titoli) { Notification::make() ->title('Nessun titolo trovato') ->body('Il file non è un Excel valido o non ha le colonne ORDINE e TITOLO.') ->danger() ->send(); return; } $esito = TitoliModelliImporter::importa($record, $titoli); $righe = [ count($esito['aggiornati']).' titoli aggiornati, '.$esito['invariati'].' già corretti.', ]; if ($esito['creati']) { $righe[] = 'Nuovi modelli (disattivi): '.implode(', ', $esito['creati']).'.'; } Notification::make() ->title('Titoli importati') ->body(implode(' ', $righe)) ->success() ->persistent() ->send(); }); } }