tristan
5834d7b225
feat(commercial) : onglet adresse — Select « Type d'adresse » + Sites en multiselect, ligne 1 réagencée (ERP-110)
...
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m0s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m19s
- Sites Starseed : 3 cases -> multiselect a tags « Sites » (required).
- Usage adresse : 3 cases Prospect/Livraison/Facturation -> Select unique « Type d'adresse » (Prospect / Livraison / Facturation / Adresse + Facturation), obligatoire sans option vide, conditionnant le bouton « Valider ». Pur sucre front : le back recoit toujours isProspect/isDelivery/isBilling (aucune RG modifiee), exclusivite Prospect devenue structurelle.
- Email de facturation conditionnel (Facturation / Adresse + Facturation) deplace en ligne 1.
- Ligne 1 : Type d'adresse | Sites | Contact rattache | Email ; le reste (Categorie, Pays, CP, Ville, Adresse...) en lignes suivantes.
- Email : MalioInputText -> MalioInputEmail (lowercase, ERP-101/RG-1.21) sur facturation ET contact.
- Helpers front testables addressFlagsFromType / addressTypeFromFlags + gating canValidateAddresses (type obligatoire) dans new.vue / edit.vue.
2026-06-04 16:01:41 +02:00
tristan
c2282fdac5
fix(commercial) : rendre obligatoires les 6 champs comptables — 422 back par champ + bouton « Valider » grisé tant que l'onglet est incomplet (ERP-110)
...
spec-front marquait SIREN / N° compte / Mode TVA / N° TVA / Délai / Type de règlement obligatoires, mais ni le back (colonnes nullable, aucun NotBlank) ni le front (canValidateAccounting ne gardait que bank/RIB) ne l'imposaient : on validait un onglet vide.
- Back : ClientAccountingCompletenessValidator (calqué sur RG-1.04) invoqué par le ClientProcessor quand les 6 champs sont présents dans le payload (validation d'onglet) → 422 par propertyPath. PATCH partiel ciblé non impacté.
- Front : helper hasAllRequiredAccountingFields + canValidateAccounting étendu dans new.vue / edit.vue (cohérent avec les onglets Contact/Adresse).
- Spec-back : RG-1.30 documente la règle et résout l'incohérence spec-front/spec-back.
2026-06-04 14:45:14 +02:00
Matthieu
ad32d8147d
test(commercial) : POST sous-ressource sur client inexistant -> 404 (ERP-110)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m55s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m27s
2026-06-04 13:34:00 +02:00
Matthieu
b564838c2e
fix(commercial) : reset erreurs RIB en tete et ne sauter que les amorces neuves vides (ERP-110)
2026-06-04 13:33:51 +02:00
Matthieu
f407c3d46a
fix(commercial) : ne sauter que les blocs contact/RIB totalement vides (bloc partiel sans nom -> 422 inline, ERP-110)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m49s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m16s
2026-06-04 12:01:14 +02:00
Matthieu
41d391eebf
feat(commercial) : valide tous les blocs contacts/adresses/RIB et affiche les erreurs par bloc (ERP-110)
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Has been cancelled
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Has been cancelled
2026-06-04 11:42:08 +02:00
Matthieu
c0645233ef
feat(commercial) : submitRows collecte les erreurs de tous les blocs de collection (ERP-110)
2026-06-04 11:37:05 +02:00
Matthieu
9a1fcad3cb
test(commercial) : verrouille POST adresses/RIB sur client peuple (ERP-110)
2026-06-04 11:35:26 +02:00
Matthieu
571d80f75f
fix(commercial) : POST sous-ressource client en read:false + parent 404 (corrige 500 NonUniqueResult, ERP-110)
2026-06-04 11:33:46 +02:00
Matthieu
e61e653ea3
test(commercial) : reproduit la 500 NonUniqueResult au POST contact sur client peuple (ERP-110)
2026-06-04 11:31:53 +02:00