- validation serveur « relation choisie => FK obligatoire » : champ transitoire
relationType (non persiste) + Assert\Callback portant la 422 sur distributor /
broker, que le back ne pouvait pas deriver des seules FK nullable
- mutualisation des payloads d'ecriture clients : new.vue consomme buildMainPayload
/ buildAddressPayload / buildRibPayload (fin de la duplication create/edit)
- COMMENT ON TABLE client_address : ajout des types Courtier / Distributeur
(catalogue + migration Version20260609120000)
- tests : violationsByPath remonte dans AbstractCommercialApiTestCase (fin des
copies inline) + couverture de la nouvelle RG relation
Champ « Date de creation » (foundedAt) en :editable sur les formulaires de
creation et d'edition : saisie clavier JJ/MM/AAAA en plus du calendrier
(prop MalioDate, @malio/layer-ui 1.7.8). Consultation inchangee (lecture seule).
Pendant du telephone secondaire (max 2). Bump @malio/layer-ui 1.7.8 (prop
addable du MalioInputEmail).
- back : colonne billing_email_secondary (migration + COMMENT + catalogue),
propriete ClientAddress (Email + Length), Callback etendu (2e email interdit
hors facturation, optionnel sinon), normalisation lowercase au Processor.
- front : draft + flag UI hasSecondaryBillingEmail, mappers, payloads, champ
MalioInputEmail :addable -> revele un 2e champ ; layout : 2e email qui coule
dans la grille et Adresse complementaire sur une colonne.
- tests back (2 emails / 2e email hors facturation) et front (payload).
Quand le dernier onglet remplissable par le role est valide (Adresse pour
Bureau/Commerciale, Comptabilite pour Admin), l'ajout est termine : toast
« Client ajoute » + redirection vers /clients. Le dernier onglet remplissable
est derive de tabKeys via lastFillableTabKey (dernier onglet non-placeholder),
deja role-aware, sans regle RBAC custom. completeTab retourne un booleen pour
eviter le double toast.
Le champ Adresse (MalioInputAutocomplete) passe en allow-create : le texte saisi
est conserve au blur/Entree meme sans suggestion BAN (sinon il etait efface).
Message « Adresse introuvable ? Saisissez-la directement. » dans la liste vide.
La ville reste pilotee par le code postal.
Ajoute deux types d'adresse autonomes (exclusifs, comme la Prospection) :
- back : colonnes is_broker / is_distributor sur client_address (migration
modulaire, append + 2 CHECK miroir d'exclusivite + COMMENT ON COLUMN),
proprietes ClientAddress (getters Groups + SerializedName), Callback
validateExclusiveAddressTypes, validateAddressTypeRequired etendue,
catalogue des commentaires SQL mis a jour.
- front : type AddressType (+broker/distributor), drapeaux, mappers, option
du select Type d'adresse, labels i18n, payloads create/edit et lecture.
- tests back (acceptation + exclusivite + contrat de serialisation) et front.
- Boutons « Valider » toujours actifs (retrait du gating de validite) : le back renvoie les 422 mappees en rouge par champ.
- Champs requis a colonne non-nullable : la cle est omise du payload si vide (companyName, RIB, adresse) -> 422 NotBlank au lieu d'un 400 de type a la deserialisation.
- Onglet Contact : au moins un contact requis -> l'amorce vide est soumise pour declencher la 422 RG-1.05 quand aucun contact n'est nomme.
- Adresse : affichage inline des erreurs type / sites / categories, et nouvelle RG back « au moins un type d'adresse obligatoire » (Callback sur isProspect).