feat(transport) : saisie assistée QUALIMAT + champs conditionnels (ERP-166) #123

Open
tristan wants to merge 19 commits from feat/erp-166-qualimat-search into develop
Owner

RG-4.01→4.03 + LIOT. Ticket ERP-166.

⚠️ Stack sur #122 (ERP-165) → #121 (ERP-164), non encore mergées : à merger APRÈS #122 et #121. Tant qu'elles ne sont pas mergées, ce diff inclut leurs commits.

Périmètre :

  • useQualimatSearch() : GET /api/qualimat_carriers?search= (debounce 300 ms).
  • Onglet Qualimat : table de sélection (radio / Nom / Adresse / Date de validité — fond rouge si périmée, RG-4.04) + modal « Êtes-vous sûr de vouloir intégrer ce transporteur ? » → copie name + certificationType=QUALIMAT (lecture seule) + adresse + FK qualimatCarrier (IRI), PATCH partiel.
  • Champs conditionnels du formulaire principal : LIOT (nom == LIOT → liotPlates seul), AUTRE → Décharge (visible/obligatoire ; upload réel via useUpload = ERP-171), Affréter → indexation / contenant (Benne/Fond mouvant) / volume.

Note : le champ Décharge est rendu visible+obligatoire mais la résolution File → IRI (useUpload) est laissée à ERP-171 (TODO balisé dans le code).

RG-4.01→4.03 + LIOT. Ticket ERP-166. ⚠️ Stack sur #122 (ERP-165) → #121 (ERP-164), non encore mergées : à merger APRÈS #122 et #121. Tant qu'elles ne sont pas mergées, ce diff inclut leurs commits. Périmètre : - useQualimatSearch() : GET /api/qualimat_carriers?search= (debounce 300 ms). - Onglet Qualimat : table de sélection (radio / Nom / Adresse / Date de validité — fond rouge si périmée, RG-4.04) + modal « Êtes-vous sûr de vouloir intégrer ce transporteur ? » → copie name + certificationType=QUALIMAT (lecture seule) + adresse + FK qualimatCarrier (IRI), PATCH partiel. - Champs conditionnels du formulaire principal : LIOT (nom == LIOT → liotPlates seul), AUTRE → Décharge (visible/obligatoire ; upload réel via useUpload = ERP-171), Affréter → indexation / contenant (Benne/Fond mouvant) / volume. Note : le champ Décharge est rendu visible+obligatoire mais la résolution File → IRI (useUpload) est laissée à ERP-171 (TODO balisé dans le code).
tristan added 6 commits 2026-06-16 15:22:49 +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
tristan added the frontM4-Transporteurtype/feat labels 2026-06-16 15:22:57 +00:00
tristan added 1 commit 2026-06-16 15:35:30 +00:00
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
tristan added 1 commit 2026-06-16 15:38:44 +00:00
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
tristan added 1 commit 2026-06-16 15:41:41 +00:00
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
tristan added 1 commit 2026-06-16 15:45:15 +00:00
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
tristan added 1 commit 2026-06-16 15:49:13 +00:00
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
tristan added 1 commit 2026-06-16 15:50:52 +00:00
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
tristan added 1 commit 2026-06-16 16:02:18 +00:00
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
tristan added 1 commit 2026-06-17 06:10:20 +00:00
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
tristan added 1 commit 2026-06-17 06:15:00 +00:00
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
tristan added 3 commits 2026-06-17 06:40:07 +00:00
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
Author
Owner

Review front — ERP-166 (saisie assistée QUALIMAT + champs conditionnels)

Verdict : à corriger avant merge.

Base technique saine : recherche debouncée (300 ms), race-condition couverte par le fetchToken de usePaginatedList, pagination Hydra sans itemsPerPage=999, 422 inline, composants Malio*, i18n complet.

Findings

  • MAJORapplyQualimatSelection mute le state local (name, certificationType='QUALIMAT' figé en lecture seule, qualimatCarrierIri, qualimatAddress) avant le try/catch du PATCH. Si le PATCH échoue (cas transporteur déjà créé, carrierId !== null), l'UI affiche une intégration QUALIMAT non persistée côté serveur, sans retour arrière possible — l'utilisateur reste coincé avec une certif readonly non sauvegardée. Déclencheur limité (rare sur l'écran de création), mais réel.
    → Déplacer les mutations après le await patchCarrier(...) réussi, ou restaurer l'état précédent dans le catch. Ajouter un test du chemin d'échec PATCH.
  • MINOR — Les champs conditionnels (Affréter → indexation/contenant/volume ; certif AUTRE → décharge ; nom « LIOT ») ne sont pas réinitialisés dans le state quand leur condition disparaît. buildMainPayload les omet bien à l'envoi (pas de valeur orpheline côté back 👍), mais d'anciennes valeurs resurgissent si la condition réapparaît (re-cocher Affréter).
    watch de reset sur isChartered / certificationType / isLiot (nettoie aussi les erreurs inline résiduelles).
  • NIT — Le MalioRadioButton de sélection QUALIMAT est readonly mais reste interactif (zone morte de clic possible) ; le rendre explicitement disabled/décoratif. Helpers date (isExpired/formatDateFr) réimplémentés inline.

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

## Review front — ERP-166 (saisie assistée QUALIMAT + champs conditionnels) **Verdict : à corriger avant merge.** Base technique saine : recherche debouncée (300 ms), race-condition couverte par le `fetchToken` de `usePaginatedList`, pagination Hydra sans `itemsPerPage=999`, 422 inline, composants `Malio*`, i18n complet. **Findings** - **MAJOR** — `applyQualimatSelection` **mute le state local** (`name`, `certificationType='QUALIMAT'` figé en lecture seule, `qualimatCarrierIri`, `qualimatAddress`) **avant** le `try/catch` du PATCH. Si le PATCH échoue (cas transporteur déjà créé, `carrierId !== null`), l'UI affiche une intégration QUALIMAT **non persistée** côté serveur, sans retour arrière possible — l'utilisateur reste coincé avec une certif readonly non sauvegardée. *Déclencheur limité (rare sur l'écran de création), mais réel.* → Déplacer les mutations **après** le `await patchCarrier(...)` réussi, ou restaurer l'état précédent dans le `catch`. Ajouter un test du chemin d'échec PATCH. - **MINOR** — Les **champs conditionnels** (Affréter → indexation/contenant/volume ; certif AUTRE → décharge ; nom « LIOT ») ne sont pas réinitialisés dans le state quand leur condition disparaît. `buildMainPayload` les omet bien à l'envoi (pas de valeur orpheline côté back 👍), mais d'anciennes valeurs **resurgissent** si la condition réapparaît (re-cocher Affréter). → `watch` de reset sur `isChartered` / `certificationType` / `isLiot` (nettoie aussi les erreurs inline résiduelles). - **NIT** — Le `MalioRadioButton` de sélection QUALIMAT est readonly mais reste interactif (zone morte de clic possible) ; le rendre explicitement `disabled`/décoratif. Helpers date (`isExpired`/`formatDateFr`) réimplémentés inline. > Incrément reviewé : `erp-165..erp-166` (front).
tristan added 1 commit 2026-06-17 14:09:11 +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
Some checks are pending
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
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-166-qualimat-search:feat/erp-166-qualimat-search
git checkout feat/erp-166-qualimat-search
Sign in to join this conversation.