So che di questo argomento se ne è già abbondantemente parlato, ma cerco di dare il mio contributo. In realtà ad ora è inutile perderci troppo tempo, perchè con la futura versione 1.1 il sistema di registrazione / dati utente è cambiato, e sarà molto più flessibile...
Nell'attuale versione ufficiale con language pack italiano, la partita iva ed il codice fiscale sono collegati ai campi EXTRA_FIELD_1 e EXTRA_FIELD_2, visto che questi campi serviranno nella maggior parte dei casi; mi sono però posto il problema di renderli obbligatori in fase di registrazione, nello specifico per le aziende P.IVA e codice fiscale, e per i privati solo il codice fiscale (in base al fatto che il campo "Azienda" sia compilato o meno); inoltre ho aggiunto anche un controllo di correttezza su entrambi i campi (non verifica i dati del cliente ma solo il codice di controllo, per evitare errori di battitura).
Per fare questo ho modificato il file htmlTools.class.php, nella cartella administrator\components\com_virtuemart\classes (che allego).
Basta quindi scomprimere il file allegato e metterlo in quella cartella; la versione VM di riferimento è la 1.0.11. Personalmente non penso che ce ne saranno altre della serie 1.0.x, almeno non importanti... Vedremo poi come modificare questo "hack" con il nuovo sistema della 1.1.x.
A chi interessasse la parte "tecnica", ho agito sulla funzione printJS_formvalidation, aggiungendo anzitutto in output le seguenti funzioni Javascript:
function vm_isCF(cf)
{
var validi, i, s, set1, set2, setpari, setdisp;
if( cf == "" ) return "";
cf = cf.toUpperCase();
if( cf.length != 16 )
return false;
validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
for( i = 0; i < 16; i++ ){
if( validi.indexOf( cf.charAt(i) ) == -1 )
return false;
}
set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
s = 0;
for( i = 1; i <= 13; i += 2 )
s += setpari.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
for( i = 0; i <= 14; i += 2 )
s += setdisp.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
if( s%26 != cf.charCodeAt(15)-"A".charCodeAt(0) )
return false;
return true;
}
function vm_isPartitaIva(piva) {
if (piva.length!=11) {
return false;
}
var contributo = new Array(0,2,4,6,8,1,3,5,7,9);
var somma = 0;
for (i=0;i<11;i++) {
if (i%2==0) {
somma += parseInt(piva.charAt(i));
} else {
var cifra = parseInt(piva.charAt(i));
somma += contributo[cifra];
}
}
if (somma%10==0) return true;
else return false;
}
Quindi, ho aggiunto i seguenti controlli Javascript:
if (form.extra_field_1!=null && form.extra_field_2!=null) {
if (form.company.value=="") {
if (form.extra_field_2.value=="") {
alert("Privato: inserire il proprio codice fiscale.");
return false;
} else {
form.extra_field_2.value = form.extra_field_2.value.toUpperCase();
if (!vm_isCF(form.extra_field_2.value)) {
alert("Privato: codice fiscale non corretto; controllare.");
return false;
}
}
} else {
if (form.extra_field_1.value=="" || form.extra_field_2.value=="") {
alert("Azienda: inserire partita IVA e codice fiscale.");
return false;
} else {
form.extra_field_2.value = form.extra_field_2.value.toUpperCase();
if (!vm_isPartitaIva(form.extra_field_1.value)) {
alert("Azienda: partita IVA non corretta; controllare.");
return false;
}
if (!vm_isPartitaIva(form.extra_field_2.value) && !vm_isCF(form.extra_field_2.value)) {
alert("Azienda: codice fiscale non corretto; controllare.");
return false;
}
}
}
}
20/07/2007: Allegato versione aggiornata (v3) per attivare il controllo anche nella modifica dati tramite la gestione account VirtueMart.
[allegato eliminato da un amministratore]