feat: Aggiungi supporto per prezzi personalizzati nel listino e modifica la logica di importazione
This commit is contained in:
+8
-1
@@ -82,13 +82,20 @@ class ListinoRelationManager extends RelationManager
|
||||
->step('0.01')
|
||||
->rules(['required', 'numeric', 'min:0'])
|
||||
->sortable(),
|
||||
Tables\Columns\IconColumn::make('personalizzato')
|
||||
->label('Personalizzato')
|
||||
->icon(fn (bool $state) => $state ? 'heroicon-o-pencil-square' : null)
|
||||
->color('warning')
|
||||
->tooltip(fn (ListinoPrezzo $record) => $record->personalizzato ? 'Aggiunto a mano: può essere preservato alla prossima importazione' : null),
|
||||
])
|
||||
->filters([
|
||||
Tables\Filters\SelectFilter::make('altezza')->label('Altezza')->options($misure('altezza')),
|
||||
Tables\Filters\SelectFilter::make('larghezza')->label('Larghezza')->options($misure('larghezza')),
|
||||
Tables\Filters\TernaryFilter::make('personalizzato')->label('Personalizzato'),
|
||||
])
|
||||
->headerActions([
|
||||
Tables\Actions\CreateAction::make(),
|
||||
Tables\Actions\CreateAction::make()
|
||||
->mutateFormDataUsing(fn (array $data) => $data + ['personalizzato' => true]),
|
||||
Tables\Actions\Action::make('svuota')
|
||||
->label('Svuota listino')
|
||||
->icon('heroicon-o-trash')
|
||||
|
||||
@@ -57,7 +57,7 @@ class ImportaListiniAction
|
||||
->schema([
|
||||
Forms\Components\Placeholder::make('istruzioni')
|
||||
->hiddenLabel()
|
||||
->content('Per ogni tabella trovata nel file scegli il modello a cui assegnare il listino. Le tabelle senza modello non vengono importate; il listino dei modelli associati viene sostituito.'),
|
||||
->content('Per ogni tabella trovata nel file scegli il modello a cui assegnare il listino. Le tabelle senza modello non vengono importate; i modelli non associati mantengono il listino attuale.'),
|
||||
// Intestazione unica: le righe sotto sono senza etichette, in forma di tabella.
|
||||
Forms\Components\Grid::make(5)
|
||||
->extraAttributes(['class' => 'px-4 text-sm font-medium text-gray-950 dark:text-white'])
|
||||
@@ -92,6 +92,13 @@ class ImportaListiniAction
|
||||
->distinct()
|
||||
->columnSpan(2),
|
||||
]),
|
||||
Forms\Components\Toggle::make('sovrascrivi_tutto')
|
||||
->label('Sovrascrivi tutti i prezzi')
|
||||
->helperText(fn (Get $get) => $get('sovrascrivi_tutto')
|
||||
? 'L\'Excel è la fonte primaria: il listino dei modelli associati viene sostituito per intero, compresi i prezzi aggiunti a mano.'
|
||||
: 'I prezzi aggiunti a mano (pulsante "Nuovo" nel listino del modello) vengono mantenuti e prevalgono sull\'Excel per la stessa misura.')
|
||||
->default(true)
|
||||
->live(),
|
||||
]),
|
||||
])
|
||||
->action(function (array $data, Sistema $record) {
|
||||
@@ -100,7 +107,7 @@ class ImportaListiniAction
|
||||
->mapWithKeys(fn (array $a) => [$a['codice'] => $a['modello_id'] ?? null])
|
||||
->all();
|
||||
|
||||
$aggiornati = ListinoImporter::importa($record, $blocchi, $associazioni);
|
||||
$aggiornati = ListinoImporter::importa($record, $blocchi, $associazioni, preservaPersonalizzati: ! ($data['sovrascrivi_tutto'] ?? true));
|
||||
|
||||
Notification::make()
|
||||
->title('Listini importati')
|
||||
|
||||
Reference in New Issue
Block a user