[UX] register: P.IVA validazione locale + messaggio verde se valida (non blocca su lookup fallito)

This commit is contained in:
DevEnv nis2-agile 2026-03-10 11:39:20 +01:00
parent d603f3563f
commit 67560e1758

View File

@ -437,17 +437,32 @@
} }
// --- P.IVA Lookup --- // --- 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) { function lookupPiva(val) {
clearTimeout(pivaLookupTimer); clearTimeout(pivaLookupTimer);
val = val.replace(/\s/g, ''); val = val.replace(/\s/g, '');
const statusEl = document.getElementById('piva-status'); 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; pivaData = null;
statusEl.innerHTML = ''; statusEl.className = 'lookup-status err';
statusEl.innerHTML = '<i class="fas fa-times-circle"></i> P.IVA non valida (cifra di controllo errata)';
return; return;
} }
statusEl.className = 'lookup-status loading'; // Formato OK — mostra subito conferma, poi prova lookup
statusEl.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Ricerca azienda...'; statusEl.className = 'lookup-status ok';
statusEl.innerHTML = '<i class="fas fa-check-circle"></i> P.IVA valida — ricerca dati azienda...';
pivaLookupTimer = setTimeout(async () => { pivaLookupTimer = setTimeout(async () => {
try { try {
const res = await fetch(api.baseUrl + '/onboarding/lookup-piva', { const res = await fetch(api.baseUrl + '/onboarding/lookup-piva', {
@ -462,12 +477,13 @@
statusEl.innerHTML = '<i class="fas fa-building"></i> ' + data.data.company_name; statusEl.innerHTML = '<i class="fas fa-building"></i> ' + data.data.company_name;
} else { } else {
pivaData = null; pivaData = null;
statusEl.className = 'lookup-status'; statusEl.className = 'lookup-status ok';
statusEl.innerHTML = '<i class="fas fa-info-circle" style="color:#6b7280;"></i> Azienda non trovata, potrai inserire i dati manualmente'; statusEl.innerHTML = '<i class="fas fa-check-circle"></i> P.IVA valida — inserisci i dati aziendali nel passo successivo';
} }
} catch { } catch {
pivaData = null; pivaData = null;
statusEl.innerHTML = ''; statusEl.className = 'lookup-status ok';
statusEl.innerHTML = '<i class="fas fa-check-circle"></i> P.IVA valida — inserisci i dati aziendali nel passo successivo';
} }
}, 800); }, 800);
} }