[UX] register: P.IVA validazione locale + messaggio verde se valida (non blocca su lookup fallito)
This commit is contained in:
parent
d603f3563f
commit
67560e1758
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user