diff --git a/public/register.html b/public/register.html index 6cd42e1..96ae7c0 100644 --- a/public/register.html +++ b/public/register.html @@ -437,17 +437,32 @@ } // --- P.IVA Lookup --- + function validaFormatoPiva(v) { + // Controllo cifra di controllo P.IVA italiana + if (!/^\d{11}$/.test(v)) return false; + let s = 0; + for (let i = 0; i < 10; i++) { + let n = parseInt(v[i]); + if (i % 2 === 1) { n *= 2; if (n > 9) n -= 9; } + s += n; + } + return (10 - (s % 10)) % 10 === parseInt(v[10]); + } + function lookupPiva(val) { clearTimeout(pivaLookupTimer); val = val.replace(/\s/g, ''); const statusEl = document.getElementById('piva-status'); - if (val.length !== 11) { + if (val.length < 11) { pivaData = null; statusEl.innerHTML = ''; return; } + if (val.length === 11 && !validaFormatoPiva(val)) { pivaData = null; - statusEl.innerHTML = ''; + statusEl.className = 'lookup-status err'; + statusEl.innerHTML = ' P.IVA non valida (cifra di controllo errata)'; return; } - statusEl.className = 'lookup-status loading'; - statusEl.innerHTML = ' Ricerca azienda...'; + // Formato OK — mostra subito conferma, poi prova lookup + statusEl.className = 'lookup-status ok'; + statusEl.innerHTML = ' P.IVA valida — ricerca dati azienda...'; pivaLookupTimer = setTimeout(async () => { try { const res = await fetch(api.baseUrl + '/onboarding/lookup-piva', { @@ -462,12 +477,13 @@ statusEl.innerHTML = ' ' + data.data.company_name; } else { pivaData = null; - statusEl.className = 'lookup-status'; - statusEl.innerHTML = ' Azienda non trovata, potrai inserire i dati manualmente'; + statusEl.className = 'lookup-status ok'; + statusEl.innerHTML = ' P.IVA valida — inserisci i dati aziendali nel passo successivo'; } } catch { pivaData = null; - statusEl.innerHTML = ''; + statusEl.className = 'lookup-status ok'; + statusEl.innerHTML = ' P.IVA valida — inserisci i dati aziendali nel passo successivo'; } }, 800); }