From 29ee4e9fd0f7e6e96eb97620c25f4b867fca93c2 Mon Sep 17 00:00:00 2001 From: tristan Date: Tue, 2 Jun 2026 17:25:09 +0200 Subject: [PATCH] feat(front) : page ajouter un client (formulaire principal + onglets) (ERP-63) - pages/clients/new.vue : route /clients/new gatee par commercial.clients.manage. Formulaire principal (POST /clients) puis validation incrementale des onglets via MalioTabList ; un onglet valide passe en lecture seule, passage automatique au suivant. Information (PATCH groupe information), Contact/Adresse (sous-ressources contacts/addresses), Comptabilite (PATCH scalaires accounting + POST ribs, gate accounting.view/manage), onglets coquille auto-avances. Mode strict RG-1.28 : chaque requete ne porte que les champs de son groupe. - i18n : cles commercial.clients.form.* (formulaire, onglets, confirmation, toasts). RG-1.04 (Information obligatoire pour la Commerciale) : non miroitee cote front (roles = IRIs dans /api/me, Bureau == Commerciale en permissions) ; appliquee de maniere fiable par le back. A rebrancher quand un code de role sera expose. --- frontend/i18n/locales/fr.json | 84 ++ .../modules/commercial/pages/clients/new.vue | 891 ++++++++++++++++++ 2 files changed, 975 insertions(+) create mode 100644 frontend/modules/commercial/pages/clients/new.vue diff --git a/frontend/i18n/locales/fr.json b/frontend/i18n/locales/fr.json index b3c0490..a01ee69 100644 --- a/frontend/i18n/locales/fr.json +++ b/frontend/i18n/locales/fr.json @@ -99,6 +99,90 @@ "phoneFormat": "Format de téléphone invalide (attendu : XX XX XX XX XX).", "emailFormat": "Format d'email invalide.", "addressCategoryForbidden": "Une catégorie « Distributeur » ou « Courtier » ne peut pas qualifier une adresse." + }, + "form": { + "title": "Ajouter un client", + "submit": "Valider", + "duplicateCompany": "Un client portant ce nom de société existe déjà.", + "main": { + "companyName": "Nom de l'entreprise", + "firstName": "Prénom", + "lastName": "Nom", + "email": "Email", + "phonePrimary": "Téléphone", + "phoneSecondary": "Téléphone (2)", + "addPhone": "Ajouter un numéro", + "categories": "Catégories", + "relation": "Relation", + "relationNone": "Aucune", + "relationDistributor": "Distributeur", + "relationBroker": "Courtier", + "distributorName": "Nom du distributeur", + "brokerName": "Nom du courtier", + "triageService": "Prestation de triage" + }, + "information": { + "description": "Description", + "competitors": "Concurrents", + "foundedAt": "Date de création", + "employeesCount": "Nombre de salariés", + "revenueAmount": "Chiffre d'affaires", + "profitAmount": "Résultat", + "directorName": "Dirigeant" + }, + "contact": { + "title": "Contact {n}", + "lastName": "Nom", + "firstName": "Prénom", + "jobTitle": "Fonction", + "email": "Email", + "phonePrimary": "Téléphone", + "phoneSecondary": "Téléphone (2)", + "addPhone": "Ajouter un numéro", + "remove": "Supprimer le contact", + "add": "Nouveau contact" + }, + "address": { + "title": "Adresse {n}", + "prospect": "Prospect", + "delivery": "Adresse de livraison", + "billing": "Facturation", + "categories": "Catégorie", + "country": "Pays", + "postalCode": "Code postal", + "city": "Ville", + "street": "Adresse", + "streetComplement": "Adresse complémentaire", + "sites": "Sites Starseed", + "contacts": "Contact(s) rattaché(s)", + "billingEmail": "Email de facturation", + "remove": "Supprimer l'adresse", + "add": "Nouvelle adresse", + "degraded": "Service d'adresse indisponible : saisie de la ville et de l'adresse en mode libre." + }, + "accounting": { + "siren": "SIREN", + "accountNumber": "Numéro de compte", + "tvaMode": "Mode de TVA", + "nTva": "N° de TVA", + "paymentDelay": "Délai de règlement", + "paymentType": "Type de règlement", + "bank": "Banque", + "ribTitle": "RIB {n}", + "ribLabel": "Libellé", + "ribBic": "BIC", + "ribIban": "IBAN", + "addRib": "Ajouter un RIB", + "removeRib": "Supprimer le RIB" + }, + "confirmDelete": { + "title": "Confirmer la suppression", + "contact": "Supprimer ce contact ?", + "address": "Supprimer cette adresse ?", + "rib": "Supprimer ce RIB ?", + "cancel": "Annuler", + "confirm": "Confirmer" + } } } }, diff --git a/frontend/modules/commercial/pages/clients/new.vue b/frontend/modules/commercial/pages/clients/new.vue new file mode 100644 index 0000000..f7b782c --- /dev/null +++ b/frontend/modules/commercial/pages/clients/new.vue @@ -0,0 +1,891 @@ + + +