187 lines
7.2 KiB
JavaScript
187 lines
7.2 KiB
JavaScript
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)}<span>IVA esclusa</span>`);
|
|
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; |