[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 ---
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 = '<i class="fas fa-times-circle"></i> P.IVA non valida (cifra di controllo errata)';
return;
}
statusEl.className = 'lookup-status loading';
statusEl.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Ricerca azienda...';
// Formato OK — mostra subito conferma, poi prova lookup
statusEl.className = 'lookup-status ok';
statusEl.innerHTML = '<i class="fas fa-check-circle"></i> 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 = '<i class="fas fa-building"></i> ' + data.data.company_name;
} else {
pivaData = null;
statusEl.className = 'lookup-status';
statusEl.innerHTML = '<i class="fas fa-info-circle" style="color:#6b7280;"></i> Azienda non trovata, potrai inserire i dati manualmente';
statusEl.className = 'lookup-status ok';
statusEl.innerHTML = '<i class="fas fa-check-circle"></i> P.IVA valida — inserisci i dati aziendali nel passo successivo';
}
} catch {
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);
}