feat(front) : page ajout prestataire + formulaire principal (ERP-141) #103

Merged
tristan merged 1 commits from feature/ERP-141-page-ajouter-prestataire into develop 2026-06-15 08:59:40 +00:00
Owner

Empilée sur ERP-140 (#102).

Périmètre ERP-141

Écran /providers/new — création par onglets + formulaire principal (POST).

  • Page modules/technique/pages/providers/new.vue : en-tête + retour, formulaire principal (Nom, Catégorie, Site), barre d'onglets Contact · Adresse · Comptabilité (pas d'onglet Information ; Rapports/Échanges absents en création). Contenu des onglets = placeholders « À venir » (ERP-142→144).
  • useProviderForm() : POST principal (groupe provider:write:main, IRIs catégories/sites), pré-check front RG-3.03 (≥1 site) / RG-3.09 (≥1 catégorie), 409 doublon (RG-3.10) inline, 422 mapping par champ via useFormErrors, orchestration des onglets (verrouillage + bascule auto sur Contact au succès), patchProvider (PATCH partiel mode strict pour les onglets à venir).
  • useProviderReferentials() : catégories type PRESTATAIRE + sites (?pagination=false, Hydra).
  • i18n technique.providers.form/tab/toast.

Conformité

  • useApi() uniquement, composants Malio*, aucun texte FR en dur, bouton « Valider » toujours actif + erreurs sous les champs (ERP-101).

Vérifications

  • Vitest : 402/402 (dont 9 nouveaux tests useProviderForm).
  • ESLint : OK.
  • nuxi typecheck : 0 erreur sur les fichiers source du ticket.
  • Golden path navigateur : page rendue, catégories filtrées PRESTATAIRE, sélecteur site, onglets désactivés avant validation, erreurs inline RG-3.03/3.09.
Empilée sur ERP-140 (#102). ## Périmètre ERP-141 Écran `/providers/new` — création par onglets + formulaire principal (POST). - **Page** `modules/technique/pages/providers/new.vue` : en-tête + retour, formulaire principal (Nom, Catégorie, Site), barre d'onglets **Contact · Adresse · Comptabilité** (pas d'onglet Information ; Rapports/Échanges absents en création). Contenu des onglets = placeholders « À venir » (ERP-142→144). - **`useProviderForm()`** : POST principal (groupe `provider:write:main`, IRIs catégories/sites), pré-check front RG-3.03 (≥1 site) / RG-3.09 (≥1 catégorie), 409 doublon (RG-3.10) inline, 422 mapping par champ via `useFormErrors`, orchestration des onglets (verrouillage + bascule auto sur Contact au succès), `patchProvider` (PATCH partiel mode strict pour les onglets à venir). - **`useProviderReferentials()`** : catégories type PRESTATAIRE + sites (`?pagination=false`, Hydra). - i18n `technique.providers.form/tab/toast`. ## Conformité - `useApi()` uniquement, composants `Malio*`, aucun texte FR en dur, bouton « Valider » toujours actif + erreurs sous les champs (ERP-101). ## Vérifications - Vitest : 402/402 (dont 9 nouveaux tests `useProviderForm`). - ESLint : OK. - `nuxi typecheck` : 0 erreur sur les fichiers source du ticket. - Golden path navigateur : page rendue, catégories filtrées PRESTATAIRE, sélecteur site, onglets désactivés avant validation, erreurs inline RG-3.03/3.09.
Owner

Review — RAS, bon pour merge.

Formulaire principal + orchestration des onglets propre :

  • useProviderForm : validation front RG-3.03 (≥1 site) / RG-3.09 (≥1 catégorie), back autoritaire (ERP-101).
  • Erreurs inline par champ via useFormErrors + { toast: false }, gestion dédiée du 409 doublon (RG-3.10), companyName omis du payload pour laisser remonter la 422 NotBlank.
  • Malio* partout, aucun import cross-module, commentaires FR.

Suggestion (mineure, non bloquante) — factoriser submitRows dans shared/.

submitRows est documenté comme « Miroir de useSupplierFormErrors.submitRows » : c'est un helper agnostique de l'entité (soumission ligne à ligne d'une collection + collecte des 422 par index via mapViolationsToRecord). Il est aujourd'hui recopié verbatim entre M2 (useSupplierFormErrors) et M3 (useProviderForm). L'import cross-module étant interdit (règle n°1), sa place naturelle serait frontend/shared/ pour éviter le drift entre les deux implémentations. À traiter dans un ticket dédié de mutualisation, pas un correctif de cette PR.

**Review — RAS, bon pour merge.** Formulaire principal + orchestration des onglets propre : - `useProviderForm` : validation front RG-3.03 (≥1 site) / RG-3.09 (≥1 catégorie), back autoritaire (ERP-101). - Erreurs inline par champ via `useFormErrors` + `{ toast: false }`, gestion dédiée du 409 doublon (RG-3.10), `companyName` omis du payload pour laisser remonter la 422 NotBlank. - `Malio*` partout, aucun import cross-module, commentaires FR. --- **Suggestion (mineure, non bloquante) — factoriser `submitRows` dans `shared/`.** `submitRows` est documenté comme « Miroir de `useSupplierFormErrors.submitRows` » : c'est un helper **agnostique de l'entité** (soumission ligne à ligne d'une collection + collecte des 422 par index via `mapViolationsToRecord`). Il est aujourd'hui recopié verbatim entre M2 (`useSupplierFormErrors`) et M3 (`useProviderForm`). L'import cross-module étant interdit (règle n°1), sa place naturelle serait `frontend/shared/` pour éviter le drift entre les deux implémentations. À traiter dans un ticket dédié de mutualisation, pas un correctif de cette PR.
tristan changed target branch from feature/ERP-140-page-repertoire-prestataires to develop 2026-06-15 08:51:21 +00:00
tristan added 1 commit 2026-06-15 08:58:03 +00:00
feat(front) : page ajout prestataire + formulaire principal
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m38s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m20s
7ad44fd366
tristan force-pushed feature/ERP-141-page-ajouter-prestataire from 845c295754 to 7ad44fd366 2026-06-15 08:58:03 +00:00 Compare
tristan merged commit d0e9f48983 into develop 2026-06-15 08:59:40 +00:00
tristan deleted branch feature/ERP-141-page-ajouter-prestataire 2026-06-15 08:59:40 +00:00
Sign in to join this conversation.