feat: Implement price list management and import functionality

- Added ListinoRelationManager for managing price lists associated with models.
- Introduced ImportaListiniAction for importing price lists from Excel files.
- Created ListinoPrezzo model to represent price entries in the database.
- Developed ListinoExcelParser for parsing Excel files containing price lists.
- Implemented ListinoImporter to handle the import logic and associations.
- Added migration for creating listino_prezzi table and converting measures to mm.
- Updated frontend logic to handle new price list features and validations.
- Enhanced tests for price list import and conversion functionalities.
This commit is contained in:
2026-10-19 16:51:24 +02:00
parent a8aa6d9927
commit 1e352eb2ef
46 changed files with 1575 additions and 327 deletions
@@ -3,6 +3,7 @@
namespace App\Filament\Resources;
use App\Filament\Resources\ModelloResource\Pages;
use App\Filament\Resources\ModelloResource\RelationManagers\ListinoRelationManager;
use App\Models\Modello;
use Filament\Forms;
use Filament\Forms\Form;
@@ -126,6 +127,13 @@ class ModelloResource extends Resource
->badge()
->formatStateUsing(fn (?string $state) => Modello::CATEGORIE[$state] ?? $state)
->placeholder('—'),
Tables\Columns\TextColumn::make('listino_count')
->label('Listino')
->counts('listino')
->formatStateUsing(fn (int $state) => $state ? "{$state} prezzi" : 'Nessuno')
->color(fn (int $state) => $state ? null : 'gray')
->description(fn (Modello $record) => $record->listino_aggiornato_at?->format('d/m/Y'))
->sortable(),
Tables\Columns\ToggleColumn::make('attivo')
->label('Attivo')
->disabled(fn (Modello $record) => ! $record->attivo && (! $record->cartella || ! $record->file_modello)),
@@ -146,6 +154,13 @@ class ModelloResource extends Resource
]);
}
public static function getRelations(): array
{
return [
ListinoRelationManager::class,
];
}
public static function getPages(): array
{
return [