- Deleted the `vetro.json` file containing glass configurations. - Introduced `ImportaTitoliAction` to facilitate importing model titles from Excel. - Created `TitoliModelliImporter` for handling title import logic and updating existing models. - Updated `SistemaResource` to include the new title import action. - Modified `ConfigurazioneModello` to adjust the model name retrieval logic. - Changed `ListinoImporter` to make the alias constant public. - Added tests for title import functionality, ensuring correct updates and creation of new models.
73 lines
2.7 KiB
PHP
73 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Filament\Resources\SistemaResource\Actions;
|
|
|
|
use App\Models\Sistema;
|
|
use App\Support\Listini\TitoliModelliImporter;
|
|
use Filament\Forms;
|
|
use Filament\Notifications\Notification;
|
|
use Filament\Tables\Actions\Action;
|
|
use Livewire\Features\SupportFileUploads\TemporaryUploadedFile;
|
|
use Throwable;
|
|
|
|
/**
|
|
* Importa da Excel i titoli dei modelli di un sistema (colonne ORDINE = codice e TITOLO):
|
|
* aggiorna solo il titolo dei modelli esistenti e crea disattivi quelli nuovi.
|
|
*/
|
|
class ImportaTitoliAction
|
|
{
|
|
public static function make(): Action
|
|
{
|
|
return Action::make('importaTitoli')
|
|
->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();
|
|
});
|
|
}
|
|
}
|