feat: remove obsolete glass configurations, add title import functionality

- 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.
This commit is contained in:
2026-10-23 11:15:28 +02:00
parent 139b1690ff
commit 0f0764367f
163 changed files with 284 additions and 19716 deletions
@@ -0,0 +1,72 @@
<?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();
});
}
}