feat(transport) : consultation + modification transporteur (ERP-170) #129

Merged
tristan merged 17 commits from feat/erp-170-carrier-view-edit into develop 2026-06-18 08:50:09 +00:00
Owner

Readonly + archive + édition par onglet. Ticket ERP-170. Stack sur #128→#127→#126→#123→#122→#121.

Readonly + archive + édition par onglet. Ticket ERP-170. Stack sur #128→#127→#126→#123→#122→#121.
tristan added 18 commits 2026-06-17 09:35:27 +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 09:35:27 +00:00
Author
Owner

Review front — ERP-170 (consultation + modification)

Verdict : à corriger avant merge.

La plus grosse de la stack ([id]/index.vue + [id]/edit.vue + mappers). Points solides : useCarrierForm() n'est pas un singleton → aucune fuite d'état entre new et edit ; états loading/error/404 gérés ; mappers aller-retour fidèles (iriOf, ?? null/?? '', formatAmount qui évite « NaN € »). Fix réel au passage : name du radio prix rendu unique via useId() (corrige une désélection mutuelle entre blocs).

Findings

  • MAJORindex.vue : le 409 d'homonyme à la restauration est avalé par un catch qui toast un message générique, alors que useCarrier.setArchived propage l'erreur exprès pour que l'appelant l'affiche (documenté dans useCarrier.ts). L'utilisateur ne comprend pas pourquoi la restauration échoue.
    → Extraire extractApiErrorMessage(err?.response?._data) (déjà fait en edit.vue) et le passer en message: du toast, avec fallback i18n.
  • MINORsanitizeDecimal('30,5')'305' : la virgule est supprimée au lieu d'être convertie en point (le test fige ce comportement). Un utilisateur FR tapant « 30,5 » obtient 305 m³. clampPercent juste à côté gère pourtant la virgule.
    value.replace(',', '.') avant le nettoyage.
  • MINORedit.vue : upload de la décharge non câblé (déféré à ERP-171, légitime) mais sans le TODO ERP-171 que porte new.vue → asymétrie trompeuse. Ajouter le même commentaire.
  • MINORprefillFrom initialise les prix sans bloc vide de repli, alors qu'adresses/contacts retombent sur un bloc vide → incohérence à assumer ou documenter.
  • NIT — Cast as unknown as pour l'export blob (trou TS-strict, identique à l'existant).

Incrément reviewé : erp-169..erp-170 (front).

## Review front — ERP-170 (consultation + modification) **Verdict : à corriger avant merge.** La plus grosse de la stack (`[id]/index.vue` + `[id]/edit.vue` + mappers). Points solides : `useCarrierForm()` n'est **pas un singleton** → aucune fuite d'état entre `new` et `edit` ; états `loading`/`error`/404 gérés ; mappers aller-retour fidèles (`iriOf`, `?? null`/`?? ''`, `formatAmount` qui évite « NaN € »). Fix réel au passage : `name` du radio prix rendu unique via `useId()` (corrige une désélection mutuelle entre blocs). **Findings** - **MAJOR** — `index.vue` : le **409 d'homonyme à la restauration** est avalé par un `catch` qui toast un message **générique**, alors que `useCarrier.setArchived` propage l'erreur *exprès* pour que l'appelant l'affiche (documenté dans `useCarrier.ts`). L'utilisateur ne comprend pas pourquoi la restauration échoue. → Extraire `extractApiErrorMessage(err?.response?._data)` (déjà fait en `edit.vue`) et le passer en `message:` du toast, avec fallback i18n. - **MINOR** — `sanitizeDecimal('30,5')` → `'305'` : la virgule est **supprimée** au lieu d'être convertie en point (le test fige ce comportement). Un utilisateur FR tapant « 30,5 » obtient 305 m³. `clampPercent` juste à côté gère pourtant la virgule. → `value.replace(',', '.')` avant le nettoyage. - **MINOR** — `edit.vue` : upload de la décharge non câblé (déféré à ERP-171, légitime) mais **sans** le `TODO ERP-171` que porte `new.vue` → asymétrie trompeuse. Ajouter le même commentaire. - **MINOR** — `prefillFrom` initialise les prix sans bloc vide de repli, alors qu'adresses/contacts retombent sur un bloc vide → incohérence à assumer ou documenter. - **NIT** — Cast `as unknown as` pour l'export blob (trou TS-strict, identique à l'existant). > Incrément reviewé : `erp-169..erp-170` (front).
tristan added 27 commits 2026-06-17 14:09:20 +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
fix(transport) : contact transporteur valide si prénom OU nom (alignement M1/M2/M3) (ERP-168)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m24s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m35s
f29266e5e8
fix(transport) : pré-validation front du bloc prix — erreurs inline sous tous les champs requis (selects branche) (ERP-169)
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 1m34s
fb9c15c52a
fix(transport) : affiche le message 409 (homonyme) à la restauration + virgule décimale dans sanitizeDecimal (ERP-170)
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 1m41s
b6b5bb06e8
tristan force-pushed feat/erp-170-carrier-view-edit from ca7aef08be to b6b5bb06e8 2026-06-17 14:09:20 +00:00 Compare
tristan merged commit fd89160c4b into develop 2026-06-18 08:50:09 +00:00
tristan deleted branch feat/erp-170-carrier-view-edit 2026-06-18 08:50:10 +00:00
Sign in to join this conversation.