Untitled

mail@pastecode.io avatar
unknown
plain_text
14 days ago
8.5 kB
2
Indexable
Never
var AccountForm = window.AccountForm || {};
var formContext = {};
(function () {

    var formType;

    var CrmFormType = {
        create: 1,
        update: 2

    };
    this.onLoad = function (executionContext) {
        debugger
        formContext = executionContext.getFormContext();

        formContext.getAttribute("emailaddress1").addOnChange(this.onEmailChange);
        formContext.getAttribute("yod_creacontatto").addOnChange(this.onCreaContattoFieldChange);
        this.visibilitaCreaContatto();

        formType = formContext.ui.getFormType();
        if (formType === CrmFormType.update) {
            formContext.getAttribute("yod_codicefiscale").addOnChange(this.checkCodiceFiscale);
            formContext.getAttribute("telephone1").addOnChange(this.validateAndCorrectPhoneNumber);
        }
        
        
        //this.checkCodiceFiscale();
        //this.validateAndCorrectPhoneNumber();

        
    };
    this.onSave = function (executionContext) {
        debugger   
        formContext = executionContext.getFormContext();
        try {
            this.checkCodiceFiscale();
            this.validateAndCorrectPhoneNumber();

        } catch(error) {
            alert(error.message);
            executionContext.getEventArgs().preventDefault();
        }
      
    }
    // OnChange of email

    this.visibilitaCreaContatto = function () {
        debugger
        var email = formContext.getAttribute("emailaddress1").getValue();

        var CreaContatto = formContext.getControl("yod_creacontatto");
        if (email) {
            CreaContatto.setVisible(true);
        } else {
            CreaContatto.setVisible(false);
        }
    };
    this.onEmailChange = function (){
        debugger
        //var formContext = executionContext.getFormContext();
        AccountForm.visibilitaCreaContatto();
    };
    // OnChange event handler for the CreaContatto field
    this.onCreaContattoFieldChange = function (){
        debugger
        //var formContext = executionContext.getFormContext();
        var creaContatto = formContext.getAttribute("yod_creacontatto").getValue();

        if (creaContatto === true) {
            AccountRibbon.CreaContactCommand(formContext);

        }
    };
    this.checkCodiceFiscale = function () {
        debugger
        var codiceFiscale = formContext.getAttribute("yod_codicefiscale").getValue();
        // check if the codice fiscale is valid
        if (codiceFiscale) {
            try {
                codiceFiscale = codiceFiscale.toUpperCase();
                if (codiceFiscale.length !== 16) {
                    throw new Error("Il codice fiscale deve avere 16 caratteri alfanumerici.");
                } else {
                        if (codiceFiscale.substring(15, 16) !== this.calcolaCodiceControllo(codiceFiscale.substring(0, 15))) {
                            throw new(Error("Il codice fiscale non è valido."))
                        } else {
                            formContext.getAttribute("yod_codicefiscale").setValue(codiceFiscale);
                        }
                }
                
            } catch (error) {
                alert(error.message)

            }
        }
    };
    // Calculate the control code
    this.calcolaCodiceControllo = function(codice) {
        debugger
        // Calcola il codice di controllo del Codice Fiscale
        // Input: i primi 15 caratteri del Codice Fiscale
        // Output: il codice di controllo
        let contatore = 0;

        codice = codice.toUpperCase();
        if (codice.length !== 15)
            return "0"; // zero: errore
        else {
            for (let i = 0; i < codice.length; i++) {
                contatore += this.valoreDelCarattere(codice.substring(i, i + 1), i);
            }
            contatore %= 26; // si considera il resto
            return String.fromCharCode(contatore + 65);
        }
    }
    // Get the value of a character
    this.valoreDelCarattere = function(carattere, posizione) {
        let valore = 0;
        switch (carattere) {
            case "A":
            case "0":
                valore = (posizione % 2) === 0 ? 1 : 0;
                break;
            case "B":
            case "1":
                valore = (posizione % 2) === 0 ? 0 : 1;
                break;
            case "C":
            case "2":
                valore = (posizione % 2) === 0 ? 5 : 2;
                break;
            case "D":
            case "3":
                valore = (posizione % 2) === 0 ? 7 : 3;
                break;
            case "E":
            case "4":
                valore = (posizione % 2) === 0 ? 9 : 4;
                break;
            case "F":
            case "5":
                valore = (posizione % 2) === 0 ? 13 : 5;
                break;
            case "G":
            case "6":
                valore = (posizione % 2) === 0 ? 15 : 6;
                break;
            case "H":
            case "7":
                valore = (posizione % 2) === 0 ? 17 : 7;
                break;
            case "I":
            case "8":
                valore = (posizione % 2) === 0 ? 19 : 8;
                break;
            case "J":
            case "9":
                valore = (posizione % 2) === 0 ? 21 : 9;
                break;
            case "K":
                valore = (posizione % 2) === 0 ? 2 : 10;
                break;
            case "L":
                valore = (posizione % 2) === 0 ? 4 : 11;
                break;
            case "M":
                valore = (posizione % 2) === 0 ? 18 : 12;
                break;
            case "N":
                valore = (posizione % 2) === 0 ? 20 : 13;
                break;
            case "O":
                valore = (posizione % 2) === 0 ? 11 : 14;
                break;
            case "P":
                valore = (posizione % 2) === 0 ? 3 : 15;
                break;
            case "Q":
                valore = (posizione % 2) === 0 ? 6 : 16;
                break;
            case "R":
                valore = (posizione % 2) === 0 ? 8 : 17;
                break;
            case "S":
                valore = (posizione % 2) === 0 ? 12 : 18;
                break;
            case "T":
                valore = (posizione % 2) === 0 ? 14 : 19;
                break;
            case "U":
                valore = (posizione % 2) === 0 ? 16 : 20;
                break;
            case "V":
                valore = (posizione % 2) === 0 ? 10 : 21;
                break;
            case "W":
                valore = 22; // Since both cases result in 22
                break;
            case "X":
                valore = (posizione % 2) === 0 ? 25 : 23;
                break;
            case "Y":
                valore = 24; // Since both cases result in 24
                break;
            case "Z":
                valore = (posizione % 2) === 0 ? 23 : 25;
                break;
            default:
                valore = 0;
                break;
        }
        return valore;
    }


    this.validateAndCorrectPhoneNumber = function () {
        debugger
        var phoneNumber = formContext.getAttribute("telephone1").getValue();
        if (phoneNumber) {
            try {
                const cleanedPhoneNumber = this.validateItalianPhoneNumber(phoneNumber);
                
                if (!/^\d{14}$/.test(cleanedPhoneNumber)) {
                    throw newError("Numero di telefono non valìdo.")
                } else {
                        formContext.getAttribute("telephone1").setValue(cleanedPhoneNumber);

                }
            } catch (error) {
                alert(error.message);

            }
        }
        
    }
    this.validateItalianPhoneNumber = function(phonenumber) {

        var phoneNumber = formContext.getAttribute("telephone1").getValue();       
        const cleanedPhoneNumber = phoneNumber.replace(/\D/g, '');
        if (cleanedPhoneNumber.startsWith('39')) {
            return '0039' + cleanedPhoneNumber.slice(2); 
        }
        if (!cleanedPhoneNumber.startsWith('0039')) {
            return '0039' + cleanedPhoneNumber; 
        }
        return cleanedPhoneNumber;
    }

}).call(AccountForm);
Leave a Comment