Files
kreios/src/js/configurator.js
T

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;