feat(transport) : onglet adresses transporteur (ERP-167) #126

Open
tristan wants to merge 20 commits from feat/erp-167-carrier-addresses into develop
Owner

BAN + RG-4.05→4.07. Ticket ERP-167.

⚠️ Stack sur #123 (ERP-166) → #122 (ERP-165) → #121 (ERP-164), non encore mergées : à merger APRÈS elles.

Périmètre : onglet Adresses de /carriers/new — bloc CarrierAddressBlock (Pays/CP/Ville/Adresse/Adresse complémentaire) avec autocomplétion BAN réutilisée (useAddressAutocomplete). POST /carriers/{id}/addresses, PATCH/DELETE /carrier_addresses/{id}. RG-4.05 préremplissage si QUALIMAT + obligatoires si affrété (validé back, 422 inline). RG-4.07 pas de bouton Valider si QUALIMAT (adresse copiée persistée automatiquement après le POST principal).

BAN + RG-4.05→4.07. Ticket ERP-167. ⚠️ Stack sur #123 (ERP-166) → #122 (ERP-165) → #121 (ERP-164), non encore mergées : à merger APRÈS elles. Périmètre : onglet Adresses de /carriers/new — bloc CarrierAddressBlock (Pays/CP/Ville/Adresse/Adresse complémentaire) avec autocomplétion BAN réutilisée (useAddressAutocomplete). POST /carriers/{id}/addresses, PATCH/DELETE /carrier_addresses/{id}. RG-4.05 préremplissage si QUALIMAT + obligatoires si affrété (validé back, 422 inline). RG-4.07 pas de bouton Valider si QUALIMAT (adresse copiée persistée automatiquement après le POST principal).
tristan added 18 commits 2026-06-17 07:16:11 +00:00
feat(transport) : page répertoire transporteurs (ERP-164)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m54s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m33s
1ef4215ebf
feat(transport) : filtres checkbox, toggle « Voir les archivés », transporteurs dans Administration (ERP-164)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m9s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m36s
8046de76c6
chore(frontend) : bump @malio/layer-ui ^1.7.12 + commentaire useSuppliersRepository
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m14s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m31s
597c63bb2e
feat(transport) : écran ajout transporteur — layout + formulaire principal (ERP-165)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m11s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Has been cancelled
5734aaef54
fix(transport) : centre verticalement la case « Affréter » sur la ligne de champ (ERP-165)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m2s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m24s
f1b18cfbbe
feat(transport) : saisie assistée QUALIMAT + champs conditionnels (ERP-166)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m8s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m36s
f70e701854
fix(transport) : décharge après volume (nouvelle ligne) + contenant Benne/FM en select (ERP-166)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m1s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Has been cancelled
8cc2cea444
fix(transport) : ordre des champs Nom/Certif/Décharge/Affréter/Indexation/Benne/Volume (ERP-166)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Has been cancelled
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Has been cancelled
be03f4e51a
fix(transport) : colonne 3 réservée à la décharge, « Affréter » toujours en colonne 4 (ERP-166)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m9s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Has been cancelled
9864dbc00f
fix(transport) : certification obligatoire en pré-validation front, sauf cas LIOT (ERP-166)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m7s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Has been cancelled
3804362546
fix(transport) : pré-validation front des champs conditionnels obligatoires (décharge AUTRE, affrètement) (ERP-166)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Has been cancelled
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Has been cancelled
6a519874ed
feat(transport) : croix de suppression sur le champ Décharge (clearable) (ERP-166)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m9s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m33s
d6d2144cc1
refactor(transport) : onglet Qualimat en MalioDataTable paginé, recherche branchée sur le nom (ERP-166)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m1s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m44s
388d39a379
feat(transport) : onglet Qualimat accessible dès le départ, recherche réactive au nom, sélection remplit le formulaire (ERP-166)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Failing after 49s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m34s
cf645493c1
feat(transport) : datatable Qualimat vide par défaut, n'affiche que les résultats de recherche (ERP-166)
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m30s
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Failing after 42s
0733a239a8
Merge remote-tracking branch 'origin/develop' into feat/erp-164-carriers-list
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m1s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m20s
45158af920
Merge branch 'feat/erp-164-carriers-list' into feat/erp-165-carrier-new
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m54s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m22s
4202977950
Merge branch 'feat/erp-165-carrier-new' into feat/erp-166-qualimat-search
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m57s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m26s
40fdded7e2
tristan added the frontM4-Transporteurtype/feat labels 2026-06-17 07:16:12 +00:00
Author
Owner

Review front — ERP-167 (onglet adresses)

Verdict : mergeable en l'état.

Clone simplifié justifié de ClientAddressBlock : pattern erreurs-422-par-ligne respecté (addressErrors = ref<Record<string,string>[]>, mapViolationsToRecord, prop :errors indexée), suppression inline via util mutualisé removeCollectionRow (DELETE serveur d'abord). Bonne couverture Vitest.

Findings

  • MAJOR — notifyRemovalError lirait error.data (toujours undefined) au lieu de error.response._datainfirmé après vérification. Dans ofetch, FetchError.data est un getter qui renvoie response._data : error.data et error.response._data sont identiques. Le message back d'un DELETE en échec (409) remonte donc correctement. Pas de correction nécessaire.
  • MINORapplyQualimatSelection reconstruit l'objet adresse littéralement ({ id:null, country:'France', … }) au lieu de partir de emptyCarrierAddress() → risque de drift si la forme de CarrierAddressFormDraft évolue. Reco : { ...emptyCarrierAddress(), postalCode, city, street }.
  • NIT:key="index" sur le v-for des blocs : aligné sur la référence M1 et sans état interne au bloc (tout passe par model-value), suppression qui splice addresses + addressErrors ensemble → pas de désalignement. Acceptable.

Incrément reviewé : erp-166..erp-167 (front).

## Review front — ERP-167 (onglet adresses) **Verdict : mergeable en l'état.** Clone simplifié justifié de `ClientAddressBlock` : pattern erreurs-422-par-ligne respecté (`addressErrors = ref<Record<string,string>[]>`, `mapViolationsToRecord`, prop `:errors` indexée), suppression inline via util mutualisé `removeCollectionRow` (DELETE serveur d'abord). Bonne couverture Vitest. **Findings** - ~~MAJOR — `notifyRemovalError` lirait `error.data` (toujours `undefined`) au lieu de `error.response._data`~~ → **infirmé après vérification**. Dans ofetch, `FetchError.data` est un getter qui renvoie `response._data` : `error.data` et `error.response._data` sont **identiques**. Le message back d'un DELETE en échec (409) remonte donc correctement. Pas de correction nécessaire. - **MINOR** — `applyQualimatSelection` reconstruit l'objet adresse littéralement (`{ id:null, country:'France', … }`) au lieu de partir de `emptyCarrierAddress()` → risque de drift si la forme de `CarrierAddressFormDraft` évolue. Reco : `{ ...emptyCarrierAddress(), postalCode, city, street }`. - **NIT** — `:key="index"` sur le `v-for` des blocs : aligné sur la référence M1 et sans état interne au bloc (tout passe par `model-value`), suppression qui splice `addresses` + `addressErrors` ensemble → pas de désalignement. Acceptable. > Incrément reviewé : `erp-166..erp-167` (front).
tristan added 2 commits 2026-06-17 14:09:12 +00:00
fix(transport) : intégration QUALIMAT — copie locale seulement après PATCH réussi (évite un état non persisté) (ERP-166)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m4s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m43s
c6259a96cd
feat(transport) : onglet adresses transporteur (ERP-167)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m18s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m34s
ef996c3672
tristan force-pushed feat/erp-167-carrier-addresses from 6a69d7cd23 to ef996c3672 2026-06-17 14:09:12 +00:00 Compare
Some checks are pending
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m18s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m34s
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/erp-167-carrier-addresses:feat/erp-167-carrier-addresses
git checkout feat/erp-167-carrier-addresses
Sign in to join this conversation.