feat(front) : util httpExternal + autocomplete adresse BAN (ERP-66) #52

Merged
tristan merged 5 commits from feature/ERP-66-utils-phone-address into develop 2026-06-03 14:02:14 +00:00
Owner

ERP-66 — Utilitaires adresse/téléphone + autocomplétion BAN

feat

  • httpExternal : client dédié aux API publiques externes (URL absolue, sans cookie de session, timeout). Seul point d'entrée autorisé pour un $fetch externe (règle frontend n°4).
  • useAddressAutocomplete : implémentation BAN (api-adresse.data.gouv.fr) — recherche ville (type=municipality) et adresse, mapping GeoJSON, throw en cas d'erreur/timeout (mode dégradé côté composant). La recherche d'adresse n'impose pas type=housenumber (sinon 0 résultat tant qu'aucun numéro n'est saisi) — spec-front mise à jour.
  • Tests Vitest : httpExternal, useAddressAutocomplete, cas limites formatPhoneFR.

fix

  • ClientAddressBlock : la rue courante est toujours réinjectée dans les options de MalioInputAutocomplete (computed, miroir de cityOptions). Corrige le champ Adresse qui se vidait après validation / à l'édition d'une adresse existante (valeur pourtant persistée). Test de montage ajouté.
  • useClientReferentials : libellé des sites = numéro de département (2 premiers chiffres du code postal, déjà exposé par /sites) au lieu du nom.

Vérifs

  • ESLint · Vitest 196/196
  • Changements 100% frontend (+ doc spec).
## ERP-66 — Utilitaires adresse/téléphone + autocomplétion BAN ### feat - **httpExternal** : client dédié aux API publiques externes (URL absolue, sans cookie de session, timeout). Seul point d'entrée autorisé pour un `$fetch` externe (règle frontend n°4). - **useAddressAutocomplete** : implémentation BAN (api-adresse.data.gouv.fr) — recherche ville (`type=municipality`) et adresse, mapping GeoJSON, throw en cas d'erreur/timeout (mode dégradé côté composant). La recherche d'adresse n'impose **pas** `type=housenumber` (sinon 0 résultat tant qu'aucun numéro n'est saisi) — spec-front mise à jour. - Tests Vitest : httpExternal, useAddressAutocomplete, cas limites `formatPhoneFR`. ### fix - **ClientAddressBlock** : la rue courante est toujours réinjectée dans les options de `MalioInputAutocomplete` (computed, miroir de `cityOptions`). Corrige le champ Adresse qui se vidait après validation / à l'édition d'une adresse existante (valeur pourtant persistée). Test de montage ajouté. - **useClientReferentials** : libellé des sites = numéro de département (2 premiers chiffres du code postal, déjà exposé par `/sites`) au lieu du nom. ### Vérifs - ESLint ✅ · Vitest 196/196 ✅ - Changements 100% frontend (+ doc spec).
tristan added the type/feattype/fixfrontM1-Client labels 2026-06-03 11:55:15 +00:00
tristan added 2 commits 2026-06-03 11:55:16 +00:00
- httpExternal : client dedie aux API publiques externes (URL absolue,
  sans cookie de session, timeout), seul point d'entree autorise pour un
  $fetch externe (regle frontend n°4).
- useAddressAutocomplete : implementation BAN (api-adresse.data.gouv.fr),
  recherche ville (type=municipality) et adresse, mapping GeoJSON, throw
  en cas d'erreur/timeout (mode degrade cote composant). La recherche
  d'adresse n'impose pas type=housenumber (sinon 0 resultat tant qu'aucun
  numero n'est saisi) — spec-front mise a jour en consequence.
- Tests Vitest : httpExternal, useAddressAutocomplete, et cas limites
  supplementaires pour formatPhoneFR.
fix(front) : champ adresse vide apres validation + libelle departement des sites
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m51s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m21s
f4313d1f3d
- ClientAddressBlock : la rue courante est toujours reinjectee dans les
  options de MalioInputAutocomplete (computed, miroir de cityOptions).
  Sinon, des que la liste de suggestions BAN est vide (remontage apres
  validation, edition d'une adresse existante), le composant ne resolvait
  plus la valeur liee et affichait un champ vide alors que la donnee etait
  bien persistee. Test de montage ajoute.
- useClientReferentials : le libelle des sites = numero de departement
  (2 premiers chiffres du code postal, deja expose par /sites) au lieu du
  nom.
tristan added 1 commit 2026-06-03 13:34:36 +00:00
feat(front) : ameliorations UI onglets client (compta, RIB, blocs, placeholder)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m2s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m16s
5754d19450
- Onglet Comptabilite : grille alignee sur les autres onglets
  (grid-cols-4 gap-x-[44px] gap-y-4) en creation / modification / consultation.
- Bloc RIB toujours visible (au moins un bloc, meme vide) en creation,
  modification et consultation ; un bloc vide n'est jamais persiste.
- Blocs Contact / Adresse / RIB toujours affiches meme vides en consultation
  et modification ; suppression des messages « Aucun ... enregistre ».
- Onglets a venir (Transport, Statistiques, Rapports, Echanges) : nouveau
  composant partage ComingSoonPlaceholder (shared/components/ui) « En cours de
  dev » + gif, reutilisable par tous les modules ; remplace TabPlaceholderBlank.
tristan added 1 commit 2026-06-03 13:44:21 +00:00
fix(front) : consultation — afficher tous les sites (departement) dans le bloc adresse
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m52s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m25s
9c301371fb
En consultation, le bloc adresse n'affichait que les sites rattaches a l'adresse
(donc rien si l'adresse est vide). On affiche desormais TOUS les sites de
l'utilisateur (issus de /api/me, groupe me:read — pas de 403 pour les roles
metier), libelle = numero de departement ; les sites rattaches restent coches.
tristan added 1 commit 2026-06-03 13:57:29 +00:00
fix(back,front) : adresse client — au moins une categorie obligatoire
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m54s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m15s
7a45d17724
Spec-front § Adresse : la categorie est obligatoire sur une adresse, mais
n'etait enforced ni au back ni au front.

- Back : ClientAddress::$categories porte desormais Assert\Count(min: 1)
  (POST/PATCH sans categorie -> 422). Test testAddressRequiresAtLeastOneCategory ;
  deux tests existants qui creaient une adresse sans categorie recoivent une
  categorie SECTEUR.
- Front : canValidateAddresses (creation + modification) exige >= 1 categorie
  par adresse -> bouton Enregistrer desactive tant qu'aucune categorie n'est
  choisie (meme gating que les sites).
tristan merged commit 912280d24e into develop 2026-06-03 14:02:14 +00:00
tristan deleted branch feature/ERP-66-utils-phone-address 2026-06-03 14:02:15 +00:00
Sign in to join this conversation.