From 64f5401112fe2c58a1306265224b73d185a08905 Mon Sep 17 00:00:00 2001 From: MVA Global Fret Date: Sun, 3 May 2026 11:20:52 +0200 Subject: [PATCH] feat: generate client reference number (MVA-YYYY-XXXX), save to HubSpot reference_client field, display in success message --- contact.html | 7 ++++++- js/form-handler.js | 19 ++++++++++++++++--- js/translations.js | 18 ++++++++++++------ 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/contact.html b/contact.html index e4173dd..7bf471a 100644 --- a/contact.html +++ b/contact.html @@ -77,7 +77,12 @@
diff --git a/js/form-handler.js b/js/form-handler.js index 118968c..2093ae0 100644 --- a/js/form-handler.js +++ b/js/form-handler.js @@ -14,6 +14,12 @@ document.addEventListener('DOMContentLoaded', () => { if (form) setupContactForm(form); }); +function generateRefNumber() { + const year = new Date().getFullYear(); + const rand = Math.floor(1000 + Math.random() * 9000); // 4 digits + return `MVA-${year}-${rand}`; +} + function setupContactForm(form) { form.addEventListener('submit', async (e) => { e.preventDefault(); @@ -21,12 +27,15 @@ function setupContactForm(form) { setLoading(true); + const refNumber = generateRefNumber(); + const data = { firstname: form.firstname.value.trim(), lastname: form.lastname.value.trim(), phone: form.phone.value.trim(), email: form.email.value.trim(), address: form.address.value.trim(), + reference_client: refNumber, }; const results = await Promise.allSettled([ @@ -40,7 +49,7 @@ function setupContactForm(form) { setLoading(false); if (hubspotOk || formspreeOk) { - showSuccess(); + showSuccess(refNumber); } else { showError(); } @@ -55,6 +64,7 @@ async function submitToHubSpot(data) { { name: 'phone', value: data.phone }, { name: 'email', value: data.email }, { name: 'address', value: data.address }, + { name: 'reference_client', value: data.reference_client }, ], context: { pageUri: window.location.href, @@ -86,7 +96,8 @@ async function submitToFormspree(data) { prenom: data.firstname, telephone: data.phone, email: data.email, - adresse_antananarivo: data.address, + adresse_livraison: data.address, + reference_client: data.reference_client, }), }); @@ -173,9 +184,11 @@ function setLoading(isLoading) { form?.classList.toggle('form-loading', isLoading); } -function showSuccess() { +function showSuccess(refNumber) { const successEl = document.getElementById('formSuccess'); const form = document.getElementById('contactForm'); + const refDisplay = document.getElementById('refNumberDisplay'); + if (refDisplay && refNumber) refDisplay.textContent = refNumber; if (successEl) { successEl.classList.add('show'); successEl.scrollIntoView({ behavior: 'smooth', block: 'center' }); diff --git a/js/translations.js b/js/translations.js index a9bfc76..9595744 100644 --- a/js/translations.js +++ b/js/translations.js @@ -110,8 +110,10 @@ const translations = { placeholderAdresse: "Adresse complète...", submitBtn: "S'inscrire", submitLoading: "Envoi en cours...", - successTitle: "Inscription envoyée !", - successMsg: "Merci ! Nous avons bien reçu votre demande. Notre équipe vous contactera dans les plus brefs délais avec votre numéro de référence client.", + successTitle: "Inscription réussie !", + successMsg: "Merci ! Votre inscription a bien été enregistrée.", + refLabel: "VOTRE NUMÉRO DE RÉFÉRENCE CLIENT", + successNote: "Conservez ce numéro — il vous sera demandé lors de chaque envoi.", errorMsg: "Une erreur est survenue. Veuillez réessayer ou nous contacter directement.", required: "Ce champ est obligatoire", invalidEmail: "Adresse email invalide", @@ -314,8 +316,10 @@ const translations = { placeholderAdresse: "Full address...", submitBtn: "Register", submitLoading: "Sending...", - successTitle: "Registration Sent!", - successMsg: "Thank you! We have received your request. Our team will contact you shortly with your client reference number.", + successTitle: "Registration Successful!", + successMsg: "Thank you! Your registration has been recorded.", + refLabel: "YOUR CLIENT REFERENCE NUMBER", + successNote: "Keep this number — you will need it for every shipment.", errorMsg: "An error occurred. Please try again or contact us directly.", required: "This field is required", invalidEmail: "Invalid email address", @@ -518,8 +522,10 @@ const translations = { placeholderAdresse: "Adiresy feno...", submitBtn: "Hisoratra anarana", submitLoading: "Alefa...", - successTitle: "Lasa ny fisoratana anarana!", - successMsg: "Misaotra! Voaray ny fangatahanareo. Hifandray aminareo ny ekipanay amin'ny fotoana fohy indrindra miaraka amin'ny laharan'ny mpanjifa.", + successTitle: "Vita ny fisoratana anarana!", + successMsg: "Misaotra! Voaray tsara ny fisoratana anarana.", + refLabel: "NY LAHARANAO MPANJIFA", + successNote: "Tehirizo ity laharana ity — ilaina amin'ny fandefasana tsirairay.", errorMsg: "Nisy olana nitranga. Andramo indray na mifandraisa mivantana aminay.", required: "Tsy maintsy fenoina ity saha ity", invalidEmail: "Tsy mety ny adiresy mailaka",