PHPackages                             ilbronza/vehicles - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. ilbronza/vehicles

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

ilbronza/vehicles
=================

:vehicles management

0104PHP

Since Jun 10Pushed 3w ago1 watchersCompare

[ Source](https://github.com/ilBronza/Vehicles)[ Packagist](https://packagist.org/packages/ilbronza/vehicles)[ RSS](/packages/ilbronza-vehicles/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

Vehicles
========

[](#vehicles)

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
---------

[](#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
----------------------------

[](#panoramica-dellintegrazione)

L’integrazione non è un singolo trait: è un insieme coordinato di:

AreaRuolo**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
-----------------------------------

[](#componenti-principali-nel-pacchetto)

### Trait e modelli sellable

[](#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 del `VehicleType` associato.
- **`IsVehicleSellableSupplierTrait`**: merge dei cast prezzo sui campi derivati da `getPriceFieldsForSellable()` (per sellable supplier).

### Righe ordine e preventivo

[](#righe-ordine-e-preventivo)

- **`VehicleOrderrow`** estende `IlBronza\Products\Models\Orders\CustomOrderrow`.
- **`VehicleQuotationrow`** estende `IlBronza\Products\Models\Quotations\CustomQuotationrow`.

Entrambi impostano:

- `$typeName = 'VehicleType'` — usato da `TypedOrderrowTrait` sulla riga base (scope e valorizzazione del `type`).
- `$designedTargetConfigPackagePrefix = 'vehicles'` — risolve fieldset e pulsanti da `config('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)

[](#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` → classe `VehicleOrderrow` o `VehicleQuotationrow`.
- Relazione **`vehicleRows()`** — il nome della relazione deve comparire in **`config('products.models.order.possibleRowTypes')`** come `'vehicleRows'` (e analogamente per quotation se configurato).
- **`initializeUsesVehicleRowTrait()`** registra i campi costo da aggiornare in modifica tabella tramite `addFieldsToUpdateByRowTypes('vehicleRows')` (vedi `CommonOrderQuotationPricesTrait` in Products).

### Altro

[](#altro)

- **`InteractsWithVehicle`** (`src/Models/Traits/InteractsWithVehicle.php`): dominio (es. volume / sovraccarico), non è il glue orderrow/sellable.

### Service provider

[](#service-provider)

`VehiclesServiceProvider` registra il **`morphMap`** per `Vehicle`, `VehicleType`, `VehicleModel` e carica config, rotte, migration, traduzioni.

### Config pacchetto

[](#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.
- `sellableSupplierPricesHelper` per coppie tipo-fornitore.

Pubblicazione: `php artisan vendor:publish --tag=vehicles.config`.

### Migration extra field

[](#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)
----------------------------------

[](#configurazione-nellapp-products)

Nel **`config/products.php`** dell’applicazione, per il modello **order** (e coerentemente per **quotation**):

1. **`possibleRowTypes`**: includere `'vehicleRows'` affinché il container esponga la relazione omonima.
2. **`orderrow.fieldsGroupsFiles`**: voci come `vehicleOrderrow` e `relatedByType.vehicle` devono 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
----------------------------------------------

[](#come-replicare-il-pattern-per-un-altro-package)

Per un nuovo dominio (es. attrezzature, noleggi) che deve convivere con Products allo stesso modo:

1. **Config dedicato** `config/{pacchetto}.php` con la stessa struttura di `vehicles.php` per `orderrow`, `quotationrow` e i modelli di catalogo.
2. **Modello catalogo** con `InteractsWithSellableTrait` + `getPriceFieldsForSellable(): array` (chiavi = nomi logici dei campi prezzo).
3. **Classi riga** che estendono `CustomOrderrow` e `CustomQuotationrow` con `$typeName` coerente col tipo sellable e `$designedTargetConfigPackagePrefix` uguale al nome del config.
4. **Trait sul container** con relazione dedicata (es. `equipmentRows()`), stesso identificatore in `possibleRowTypes`, e `addFieldsToUpdateByRowTypes('equipmentRows')` nell’`initialize*`.
5. **Field group e fieldset** registrati sia nel config del pacchetto sia in `products` (order/quotation e orderrow/quotationrow).
6. **Traduzioni** Products (`products::models.{relationName}`) se usi PDF/HTML preview che elencano le righe per tipo.
7. **Migration** per `stored_*` sugli extra field delle righe, iterando su `getPriceFieldsForSellable()`.
8. **`Relation::morphMap`** per tutti i modelli usati come `target` dei sellable.

---

Riferimenti rapidi (Products)
-----------------------------

[](#riferimenti-rapidi-products)

- `IlBronza\Products\Models\Traits\Customrow\CustomrowTrait` — cast `stored_` / `calculated_`, pulsanti riga, risoluzione classe da config `products.models.customOrderrows` / `customQuotationrows`.
- `IlBronza\Products\Models\Traits\Order\CommonOrderQuotationPricesTrait` — `addFieldsToUpdateByRowTypes`, totali per tipo riga.
- `IlBronza\Products\Models\ProductPackageBaseRowModel` + `TypedOrderrowTrait` — colonna `type` sulle righe.

---

Licenza
-------

[](#licenza)

MIT (vedi repository).

###  Health Score

23

—

LowBetter than 26% of packages

Maintenance62

Regular maintenance activity

Popularity11

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 89.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/33c65523e8a1cdfe8ed5f5fb8d90101b28eceb8c2ef7acb50a24cf6c42b8e639?d=identicon)[ilBronza](/maintainers/ilBronza)

---

Top Contributors

[![bronza](https://avatars.githubusercontent.com/u/3426331?v=4)](https://github.com/bronza "bronza (35 commits)")[![ilBronza](https://avatars.githubusercontent.com/u/68387610?v=4)](https://github.com/ilBronza "ilBronza (4 commits)")

### Embed Badge

![Health badge](/badges/ilbronza-vehicles/health.svg)

```
[![Health](https://phpackages.com/badges/ilbronza-vehicles/health.svg)](https://phpackages.com/packages/ilbronza-vehicles)
```

###  Alternatives

[xj/yii2-bootbox-widget

yii2-bootbox-widget

11109.0k1](/packages/xj-yii2-bootbox-widget)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
