feat(transport) : onglet adresses transporteur (ERP-167)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m7s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m24s

This commit is contained in:
2026-06-17 09:15:56 +02:00
parent 40fdded7e2
commit 6a69d7cd23
8 changed files with 902 additions and 9 deletions
@@ -0,0 +1,35 @@
/**
* Helpers purs de l'onglet Adresse transporteur (M4 Transport, ERP-167) — miroir
* SIMPLIFIÉ de `providerAddress` (M3) / `SupplierAddressBlock` (M2), sans sites /
* catégories / contacts (les sites du M4 vivent dans l'onglet Prix). Testables
* sans Vue.
*/
import type { CarrierAddressFormDraft } from '~/modules/transport/types/carrierForm'
/**
* RG-4.05 : gate du bouton « + Nouvelle adresse ». Une adresse est « complète »
* (donc on autorise l'ajout d'un nouveau bloc) dès qu'elle porte un code postal,
* une ville ET une rue. Les RG conditionnelles (obligatoire si affrété) restent
* validées par le back (422 inline) — ce gate empêche seulement d'empiler des
* blocs vides.
*/
export function isCarrierAddressValid(address: CarrierAddressFormDraft): boolean {
return Boolean(address.postalCode?.trim() && address.city?.trim() && address.street?.trim())
}
/**
* Payload de la sous-ressource addresses (groupe `carrier:write:addresses`). Les
* scalaires sont nullable côté entité : on envoie `null` quand le champ est vide
* (le `CarrierAddressProcessor` re-valide la présence si affrété — RG-4.05 — et
* renvoie une 422 par champ).
*/
export function buildCarrierAddressPayload(address: CarrierAddressFormDraft): Record<string, unknown> {
return {
country: address.country,
postalCode: address.postalCode || null,
city: address.city || null,
street: address.street || null,
streetComplement: address.streetComplement || null,
}
}