Ga naar inhoud

Voertuigdata & fitment

De webshop koppelt banden en velgen aan specifieke voertuigen. De voertuigdata komt van de externe dienst DriveRight (SOAP-webservice). Intern beheert de shop een eigen voertuigstructuur in de vehicle_*-databases, die synchroon gehouden wordt met DriveRight-data.

Voertuigstructuur

De interne voertuighiërarchie ziet er als volgt uit:

Merk (VehicleBrand / Tf_Manufacturer)
  └── Model (VehicleModel / Tf_Model)
        └── Motor/uitvoering (VehicleMotor / Tf_Vehicle  — heeft KType)
              └── Chassis (VehicleChassis / Tf_Chassis  — heeft bandenmaat + velmaat)
                    └── Upsteps (VehicleChassisUpstep  — grotere maat aanbevelingen)
Klasse Bestand Rol
VehicleBrand _core/model/classes/atx/vehicles/VehicleBrand.php Autofabrikant
VehicleModel _core/model/classes/atx/vehicles/VehicleModel.php Modelreeks
VehicleMotor _core/model/classes/atx/vehicles/VehicleMotor.php Uitvoering/generatie, bevat KType-referentie
VehicleChassis _core/model/classes/atx/vehicles/VehicleChassis.php Chassisversie met exacte band- en velgmaten
VehicleChassisUpstep _core/model/classes/atx/vehicles/VehicleChassisUpstep.php Groter maat-alternatief (upstep)

De DriveRight-tegenhangers (Tf_*) staan in _core/model/classes/atx/vehicles/driveright/.

DriveRight-integratie

DriveRight levert voertuigdata via een SOAP-webservice (SOAP 1.2). De client zit in src/Atraxion/DriveRight/Client.php:

// src/Atraxion/DriveRight/Client.php:15
final class Client
{
    private \SoapClient $soapClient;

    public function __construct(...) { ... }

    // Alle SOAP-aanroepen verlopen via __call() magic (Client.php:33).
    // De namen GetManufacturers, GetModels, GetVehicles,
    // GetVehicleDataFromKType, GetUpstepWheelsByChassisID en GetGlobalVRM
    // zijn SOAP-operatienamen, geen gedefinieerde PHP-methoden.
}

Authenticatie verloopt via gebruikersnaam/wachtwoord die per aanroep als parameter meegaan. Voor VRM-lookups (GetGlobalVRM) worden aparte inloggegevens gebruikt, opgehaald via de config()-functie (src/Atraxion/DriveRight/Client.php:39–40).

Synchronisatie-commands

Drie Symfony Console-commands in src/Atraxion/DriveRight/Command/ voeren de synchronisatie uit:

Command Naam Wat het doet
ManufacturersSynchroniseCommand driveright:manufacturers:synchronise Merken synchroniseren
ModelsSynchroniseCommand driveright:models:synchronise Modellen synchroniseren
VehiclesSynchroniseCommand driveright:vehicles:synchronise Uitvoeringen + chassis synchroniseren

De volledige import-orchestratie draait ook via de backoffice-controller UpdatingDriveRightController (_admin/controller/classes/atx/vehicles/driveright/UpdatingDriveRightController.php). Dit synchroniseert in 14 stappen (UpdatingDriveRightController.php:60–75): getManufacturersgetModelsgetVehiclesgetUpstepWheelsByChassisIDgetAllWheelsUpstepemailChangesupdateBrandsupdateModelsupdateChassisupdateChassisUpstepsupdateMotorsupdateMotorOptionsupdateCombiWheelVehicleupdateThreedModelLinks.

KType

Elk Tf_Vehicle-object heeft een KType (TecDoc-voertuignummer, uniek per uitvoering). Het KType is de sleutel waarmee detailgegevens (GetVehicleDataFromKtype) worden opgehaald (_core/model/classes/atx/vehicles/driveright/Tf_Vehicle.php:9 en :126). De mapping van DriveRight-velden naar het interne model gebeurt via fromDriveRight() (Tf_Vehicle.php:565–570).

Fitment-criteria op chassis

De VehicleChassis-entiteit bevat alle maatgegevens die bepalen welke banden en velgen passen:

Veld Betekenis
getFrontTyreSize() / getRearTyreSize() Berekende getter-methoden die een TyreSize value-object samenstellen uit de opgeslagen velden TyreWidth, TyreSeries en TyreInch. Er zijn geen DB-kolommen met deze namen (VehicleChassis.php:725, :903).
RimHoles / RimHolesR Boutpatroon voor- en achteras (PCD)
RimCtr / RimCtrR Centergat voor- en achteras
MaxETFront / MinETFront Min./max. ET (insteek) vooras
MaxETRear / MinETRear Min./max. ET achteras
MaxRimWidthFront Maximale velgbreedte vooras
MaxWheelLoad Maximale wielbelasting

Zie _core/model/classes/atx/vehicles/VehicleChassis.php:177–262.

Een chassis is gelinkt aan DriveRight-data via de velden Linked en LinkID (VehicleChassis.php:377–382).

Velgkoppeling en recalculateWheels

Wanneer relevante maatgegevens op een chassis wijzigen (boutpatroon, centergat, velgmaat, ET, wielbelasting), zet de MySQL-trigger recalculate_wheels het veld recalculateWheels = 1 op het chassisrecord. De trigger is aangemaakt in migratie _core/config/doctrine/migrations/2026/06/Version20260622095313.php.

De service AutoLinkCalculatedWheels (src/Atraxion/Model/Vehicle/Linker/AutoLinkCalculatedWheels.php) herberekent de velgkoppelingen voor chassis met recalculateWheels = 1. De herberekening start via recalculate() (regel 141), dat doorverwijst naar recalculateWithIds() (regel 146). Regel 59 is de updateObjects()-aanroep die recalculateWheels terugzet op false ná verwerking. Dit is de automatische matching van velgen aan een chassis.

flowchart TD
    DR[DriveRight SOAP API] -->|GetManufacturers / GetModels\nGetVehicles / GetVehicleDataFromKType| SYNC[Sync-commands\ndriveright:manufacturers/models/vehicles:synchronise]
    SYNC --> VB[VehicleBrand]
    SYNC --> VM[VehicleModel]
    SYNC --> VMO[VehicleMotor\nKType]
    SYNC --> VC[VehicleChassis\nbandenmaat + velmaat + PCD + ET + centergat]
    VC -->|wijziging boutpatroon/ET/centergat| TRG[MySQL trigger\nrecalculate_wheels]
    TRG -->|recalculateWheels=1| ALW[AutoLinkCalculatedWheels]
    ALW --> WV[WheelVehicle koppelingen]
    VC --> TV[Tyre-fitment via VehicleChassisUpstepTyre]

Oldtimer op type-niveau

Het oldtimer-kenmerk wordt bijgehouden op het bandentype (TyreType), niet op het individuele artikel. Het veld Oldtimer zit op de basisklasse Type (_core/model/classes/atx/articles/Type.php:65), waarvan TyreType afleidt.

// _core/model/classes/atx/articles/Type.php:65
protected $Oldtimer;

Het veld in de database is article_tyre_type.Oldtimer. Het legacy-veld article.OldTimer (op het individuele artikel) is een verouderd overblijfsel en wordt niet gebruikt voor oldtimer-logica.

In TyreSearch is Oldtimer een zoekfilterparameter (_core/model/classes/atx/articles/tyres/TyreSearch.php:25). De TyreFilterService leest het oldtimer-kenmerk via $tyre->getType()->getOldtimer() (_core/model/classes/atx/articles/TyreFilterService.php:136) — dus altijd van het type.

Voertuigselectie door de klant

Op de bandenzoekcategorie kan een klant optioneel een voertuig selecteren. De flow verloopt als volgt:

  1. Klant kiest een autocat (voertuigcategorie: personenwagen, bestelwagen, motor, …) via de autocat-parameter.
  2. Optioneel: klant kiest merk → model → uitvoering (motor). De uitvoering-ID (motor-ID) wordt als motor-parameter meegegeven.
  3. De TyreController laadt het corresponderende VehicleMotor-object via VehicleMotorDAO (_core/controller/classes/atx/articles/tyres/TyreController.php:57).
  4. De bandenmaten die horen bij het geselecteerde chassis worden gebruikt als vooringevulde filterwaarden in de zoekresultaten.

SimulatorV2View (_core/view/classes/atx/vehicles/simulator/SimulatorV2View.php) is een backoffice-beheercomponent voor het koppelen en beheren van voertuigafbeeldingen (upload, link, unlink, API-sleutelbeheer). Het biedt geen klantgerichte functionaliteit en geen 3D-visualisatie voor velgen.

Voertuigcategorieën (Autocat)

De klasse Autocat (_core/model/classes/atx/vehicles/Autocat.php) groepeert voertuigen per type (personenwagen, bestelwagen, motor, …). Autocats worden gebruikt als primaire filterdimensie bij het zoeken op banden en velgen.

PCD-wijzigingsmelding

SendPCDChangesMail (src/Atraxion/DriveRight/SendPCDChangesMail.php) stuurt een notificatiemail intern aan het Atraxion-team wanneer er bestaande afwijkingen worden gedetecteerd tussen de live DriveRight-data en de ATX-database voor boutpatroon (PCD), centergat of wielbelasting.

De mail wordt verstuurd vóór de import (importDriveRightChassis()), niet erna (UpdatingDriveRightController.php:562). Het gaat dus om aanstaande verschillen die nog geïmporteerd zullen worden, niet om post-import wijzigingen. De e-mail bevat een Excel-bijlage (chassis-report.xlsx) met de gedetecteerde afwijkingen.

Zie ook