ilbronza / vehicles
:vehicles management
This package is auto-updated.
Last update: 2026-04-25 19:03:24 UTC
README
Gestione mezzi (tipologie, modelli, veicoli, letture km) e integrazione con il pacchetto Products: righe ordine/preventivo tipizzate, sellable e fornitori collegati al dominio veicoli.
Requisiti
- Laravel e pacchetto Products (
ilbronza/products) installato e funzionante. - Le migration che aggiungono colonne sugli extra field delle righe controllano
app('products'): senza Products non creano le colonne (vedi messaggio in migration).
Panoramica dell’integrazione
L’integrazione non è un singolo trait: è un insieme coordinato di:
| Area | Ruolo |
|---|---|
Catalogo sellable (VehicleType) |
Target dei Sellable; definisce i campi prezzo esposti al sistema (getPriceFieldsForSellable()). |
Veicolo come supplier (Vehicle) |
Implementa l’interfaccia supplier di Products e collega i sellable possibili al tipo mezzo. |
Righe custom (VehicleOrderrow, VehicleQuotationrow) |
Estendono CustomOrderrow / CustomQuotationrow; tipo riga e prefisso config per fieldset e pulsanti. |
| Container Order/Quotation (nell’app) | Trait UsesVehicleRowTrait: relazione vehicleRows, totali/margini, campi da aggiornare in bulk edit. |
| Config | config/vehicles.php (UI righe e CRUD veicoli); nell’app, config/products.php (possibleRowTypes, field groups per orderrow / quotationrow). |
| DB | Colonne stored_* sulla tabella degli extra field delle righe ordine (allineate ai price fields del sellable). |
Componenti principali nel pacchetto
Trait e modelli sellable
VehicleType(src/Models/Sellables/VehicleType.php):SellableItemInterface,InteractsWithSellableTrait,getPriceFieldsForSellable()(es. costo per km/giorno/movimentazione). Crea/aggiorna sellable su save.Vehicle(src/Models/Sellables/Vehicle.php):SupplierInterface,InteractsWithSupplierTrait,SingleSellableSupplierTrait;getPossibleSellables()usa il sellable delVehicleTypeassociato.IsVehicleSellableSupplierTrait: merge dei cast prezzo sui campi derivati dagetPriceFieldsForSellable()(per sellable supplier).
Righe ordine e preventivo
VehicleOrderrowestendeIlBronza\Products\Models\Orders\CustomOrderrow.VehicleQuotationrowestendeIlBronza\Products\Models\Quotations\CustomQuotationrow.
Entrambi impostano:
$typeName = 'VehicleType'— usato daTypedOrderrowTraitsulla riga base (scope e valorizzazione deltype).$designedTargetConfigPackagePrefix = 'vehicles'— risolve fieldset e pulsanti daconfig('vehicles.models.orderrow|quotationrow...').
VehicleRowQuotationOrderCommonTrait: in initialize*, chiama setCustomrowCasts() con i campi prezzo del VehicleType; definisce getter di costo/ricavo riga e comportamento della quantità (es. default da km del container).
Trait sul container Order / Quotation (applicazione host)
Il trait UsesVehicleRowTrait (src/Models/Sellables/UsesVehicleRowTrait.php) va usato sui modelli Order e Quotation del progetto (non è nel pacchetto Products):
- Metodo astratto
getVehicleRowRelatedModel(): string→ classeVehicleOrderrowoVehicleQuotationrow. - Relazione
vehicleRows()— il nome della relazione deve comparire inconfig('products.models.order.possibleRowTypes')come'vehicleRows'(e analogamente per quotation se configurato). initializeUsesVehicleRowTrait()registra i campi costo da aggiornare in modifica tabella tramiteaddFieldsToUpdateByRowTypes('vehicleRows')(vediCommonOrderQuotationPricesTraitin Products).
Altro
InteractsWithVehicle(src/Models/Traits/InteractsWithVehicle.php): dominio (es. volume / sovraccarico), non è il glue orderrow/sellable.
Service provider
VehiclesServiceProvider registra il morphMap per Vehicle, VehicleType, VehicleModel e carica config, rotte, migration, traduzioni.
Config pacchetto
config/vehicles.php definisce tra l’altro:
models.orderrow/models.quotationrow: field groups, fieldset edit,relatedButtonsMethods(aggiungi riga, tabella, sellable supplier).models.vehicleType,vehicle,vehicleModel,kmreading: CRUD, fieldset, relationship manager.sellableSupplierPricesHelperper coppie tipo-fornitore.
Pubblicazione: php artisan vendor:publish --tag=vehicles.config.
Migration extra field
database/migrations/2025_07_31_170238_add_vehicles_extrafields_to_rows_table.php aggiunge colonne stored_{campo} sulla tabella del modello collegato a Orderrow::extraFields(), per ogni campo restituito da getPriceFieldsForSellable(). Mantieni allineate migration e metodo getPriceFieldsForSellable().
Configurazione nell’app (Products)
Nel config/products.php dell’applicazione, per il modello order (e coerentemente per quotation):
possibleRowTypes: includere'vehicleRows'affinché il container esponga la relazione omonima.orderrow.fieldsGroupsFiles: voci comevehicleOrderrowerelatedByType.vehicledevono puntare ai field group corretti (spesso classi nel pacchetto Products che wrappano i parametri Vehicles).
Esempio di struttura già prevista in Products (nomi indicativi): VehicleRowsByContainerFieldsGroupParametersFile, VehicleOrderrowRelatedFieldsGroupParametersFile.
Come replicare il pattern per un altro package
Per un nuovo dominio (es. attrezzature, noleggi) che deve convivere con Products allo stesso modo:
- Config dedicato
config/{pacchetto}.phpcon la stessa struttura divehicles.phpperorderrow,quotationrowe i modelli di catalogo. - Modello catalogo con
InteractsWithSellableTrait+getPriceFieldsForSellable(): array(chiavi = nomi logici dei campi prezzo). - Classi riga che estendono
CustomOrderroweCustomQuotationrowcon$typeNamecoerente col tipo sellable e$designedTargetConfigPackagePrefixuguale al nome del config. - Trait sul container con relazione dedicata (es.
equipmentRows()), stesso identificatore inpossibleRowTypes, eaddFieldsToUpdateByRowTypes('equipmentRows')nell’initialize*. - Field group e fieldset registrati sia nel config del pacchetto sia in
products(order/quotation e orderrow/quotationrow). - Traduzioni Products (
products::models.{relationName}) se usi PDF/HTML preview che elencano le righe per tipo. - Migration per
stored_*sugli extra field delle righe, iterando sugetPriceFieldsForSellable(). Relation::morphMapper tutti i modelli usati cometargetdei sellable.
Riferimenti rapidi (Products)
IlBronza\Products\Models\Traits\Customrow\CustomrowTrait— caststored_/calculated_, pulsanti riga, risoluzione classe da configproducts.models.customOrderrows/customQuotationrows.IlBronza\Products\Models\Traits\Order\CommonOrderQuotationPricesTrait—addFieldsToUpdateByRowTypes, totali per tipo riga.IlBronza\Products\Models\ProductPackageBaseRowModel+TypedOrderrowTrait— colonnatypesulle righe.
Licenza
MIT (vedi repository).