let shared_data = null; const Configurator = { init: (priceCalculator, config_data) => { Configurator.priceCalculator = priceCalculator; shared_data = config_data; }, enable: () => { $(("#larghezza, #altezza, select, input[name=vetro], input[type=radio]")).on('input', (e) => { Configurator.checkTextures() let res = Configurator.generatePrice(); if(res == null) return; res = Configurator.generateConfigData(res); $(".prezzo").html(`€ ${res.prezzo.toFixed(2)}IVA esclusa`); window.configurazione = res; if($(e.target).data('model')){ caricaModello($(e.target).data('model')); } }); }, generatePrice: () => { const config_data = {}; config_data.height = $('#altezza').val(); config_data.width = $('#larghezza').val(); config_data.finitura = $('#prezzi_finiture').val(); config_data.percentuale_accessori = 0; $('input.percentuale:checked').each((i, el) => { let perc = $(el).data('percentuale'); perc = perc == undefined ? 0 : parseFloat(perc); perc = isNaN(perc) ? 0 : perc; config_data.percentuale_accessori += (perc / 100); if($(el).hasClass('check_finitura')){ config_data.override_supplemento_finitura = true; } }); //config_data.finitura_interna = $('input[name=finitura_interna]:checked').val(); //config_data.finitura_esterna = $('input[name=finitura_esterna]:checked').val(); config_data.maniglia = $('input[name=maniglia]:checked').val(); //config_data.finitura_cassonetto = $('input[name=cassonetto]:checked').val(); config_data.finitura_avvolgibile = $('input[name=avvolgibile]:checked').val(); config_data.vetro = $('input[name=vetro]:checked').val(); config_data.cerniere_scomparsa = $('.cerniere_a_scomparsa').val(); config_data.altezza_maniglia = $('.altezza_maniglia').val(); config_data.azionamento = $('.azionamento').val(); config_data.tipo_ispezione = $('.tipo_ispezione').val(); config_data.apertura_portoncino = $('.apertura_portoncino option:selected').text(); config_data.tipo_ispezione = $('.tipo_ispezione option:selected').text(); let price = Configurator.priceCalculator.getGridPrice(config_data.width, config_data.height); if(price < 0){ $(".errore-misure-cnt").removeClass('d-none'); $(".prezzo").addClass('invisible'); $(".cart-button").addClass('disabled'); }else{ $(".errore-misure-cnt").addClass('d-none'); $(".prezzo").removeClass('invisible'); $(".cart-button").removeClass('disabled'); } config_data.prezzo_base = price; const config = Configurator.priceCalculator.getConfigurationPrice(config_data); config.configurazione.height = config_data.height; config.configurazione.width = config_data.width; config.configurazione.nome = shared_data.nome_esteso; if(config_data.apertura_portoncino != "") config.configurazione.apertura_portoncino = config_data.apertura_portoncino; if(config_data.tipo_ispezione != "") config.configurazione.tipo_ispezione = config_data.tipo_ispezione; return config; }, generateConfigData: (config) =>{ let input_finiture = $(`.finitura input[type=radio]:checked`); //console.log(input_finiture); input_finiture.each((i, el) => { let id_finitura = $(el).val(); let nome_finitura = $(el).attr('name'); let finitura = shared_data.data_finiture.find(f => f.id == id_finitura); config.configurazione[nome_finitura] = finitura.descrizione; }); //se è un cassonetto if(shared_data.data_avvolgibile != null && shared_data.data_avvolgibile.length > 0){ let id_avvolgibile = $(`input[name=avvolgibile]:checked`).val(); let avvolgibile = shared_data.data_avvolgibile.find(a => a.id == id_avvolgibile); config.configurazione.avvolgibile = avvolgibile.descrizione; let id_cassonetto = $(`input[name=avvolgibile]:checked`).val(); let cassonetto = shared_data.data_finiture.find(a => a.id == id_cassonetto); config.configurazione.cassonetto = cassonetto.descrizione; } let val_maniglia = $(`input[name=maniglia]:checked`).val(); let finitura_maniglia = shared_data.data_maniglie.find(m => m.id == val_maniglia); let altezza = parseFloat(config.configurazione.height); let mod_altezza = altezza % 10; if(mod_altezza > 0) altezza = (altezza - mod_altezza) + 10; let altezza_maniglia = shared_data.altezza_maniglia.find((m) => m.altezza == altezza); if(altezza_maniglia != null){ config.configurazione.altezza_maniglia = altezza_maniglia.altezza_maniglia; } if(altezza_maniglia == null && shared_data.altezza_maniglia.length > 0){ config.configurazione.altezza_maniglia = shared_data.altezza_maniglia[0]; } if(finitura_maniglia != null) config.configurazione.maniglia = finitura_maniglia.descrizione; $('input.auto-radio:checked').each((i, el) => { let nome = $(el).attr('name'); if($(`.${nome}`).hasClass('d-none')) return; config.configurazione[nome] = $(el).val(); }); return config; }, checkTextures: () =>{ let $interna = $("input[name=finitura_interna]:checked"); let $esterna = $("input[name=finitura_esterna]:checked"); let interna = $interna.val(); // modelli senza rivestimento esterno separato (tipo 'uniforme'): segue l'interno let esterna = $esterna.length ? $esterna.val() : interna; let internaPredefinita = $interna.data('predefinito') === true; let tipo = $interna.data('tipo'); let percentuale = $interna.data('percentuale'); // bianco: stesso colore predefinito su interno ed esterno -> nessun sovrapprezzo // uniforme: stesso colore (non predefinito) su interno ed esterno -> sovrapprezzo "uniforme" // bicolore: colori interno ed esterno diversi tra loro -> sovrapprezzo "bicolore" if(interna === esterna){ $("#prezzi_finiture").val(internaPredefinita ? 'bianco' : 'uniforme'); }else{ $("#prezzi_finiture").val('bicolore'); } if(percentuale != undefined && percentuale.length > 0){ $("#prezzi_finiture").val(''); } if(tipo == 'uniforme' && internaPredefinita){ $("#prezzi_finiture").val('bianco'); return; } if(tipo == 'uniforme' && !internaPredefinita){ $("#prezzi_finiture").val('uniforme'); return; } if(shared_data.data_avvolgibile != null && shared_data.data_avvolgibile.length > 0){ $("#prezzi_finiture").val('bicolore'); } }, priceCalculator: null } export default Configurator;