/** * Helpers purs de l'onglet Contact prestataire (M3 Technique, ERP-142) — miroir * reduit de `supplierFormRules.ts` / `supplierEdit.ts` (M2). Testables sans Vue * ni API : detection de bloc vide (RG-3.04) et construction du payload de * sous-ressource contacts. */ import type { ProviderContactFormDraft } from '~/modules/technique/types/providerForm' /** Vrai si une chaine porte au moins un caractere non-espace. */ function isFilled(value: string | null | undefined): boolean { return value !== null && value !== undefined && value.trim() !== '' } /** * RG-3.04 : un bloc Contact est VIDE tant qu'aucun des champs comptant pour la * validite n'est rempli — prenom / nom / fonction / telephone principal / email. * * `phoneSecondary` est volontairement EXCLU : le back (CHECK * `chk_provider_contact_name` + `ProviderContactProcessor`) ne le compte pas non * plus, un bloc ne portant qu'un 2e numero reste invalide. Garder la meme * definition cote front evite tout drift (un bloc « vide » front == bloc rejete * back). */ export function isProviderContactBlank(contact: ProviderContactFormDraft): boolean { return ![ contact.firstName, contact.lastName, contact.jobTitle, contact.phonePrimary, contact.email, ].some(isFilled) } /** * RG-3.04 : un contact est « nomme » (valide) des qu'il porte un prenom OU un nom * — aligne sur le M1/M2. Sert le gating « + Nouveau contact » et la notion de * contact valide (la fonction / le telephone / l'email seuls ne suffisent pas). */ export function isProviderContactNamed(contact: ProviderContactFormDraft): boolean { return isFilled(contact.firstName) || isFilled(contact.lastName) } /** * RG-3.12 : l'onglet Contact ne peut etre finalise que s'il reste au moins un * contact nomme (prenom ou nom). */ export function hasAtLeastOneFilledContact(contacts: ProviderContactFormDraft[]): boolean { return contacts.some(isProviderContactNamed) } /** * Payload de la sous-ressource contacts (groupe `provider:write:contacts`). Les * chaines vides sont envoyees a null (le serveur normalise/trim de toute facon). * `phoneSecondary` n'est envoye que si le 2e numero a ete revele (max 2 tel). */ export function buildProviderContactPayload(contact: ProviderContactFormDraft): Record { return { firstName: contact.firstName || null, lastName: contact.lastName || null, jobTitle: contact.jobTitle || null, phonePrimary: contact.phonePrimary || null, phoneSecondary: contact.hasSecondaryPhone ? (contact.phoneSecondary || null) : null, email: contact.email || null, } }