/**
*@file productos.js
*@date 11/03/2020
*@author Cristina Caba García (cristinacaba1983@gmail.com)
**/
function Productos() {
//Definición de las variables de clases js útiles.
this.iu = new Iu();
this.ajax = new Ajax(URL);
//Combos fijos
this.cantidadProductos = null; //Cantidad de chapas seleccionadas.
this.numeroDisenho = null; //Número de diseños seleccionados.
//Contedores
this.contadorCarga = 0; //Contador de carga.
//Identificadores.
this.idCategoria = null; //Identificador de la caategoría.
this.idProducto = null; //Identificador del producto.
this.idPresupuesto = null; //identificador del presupuesto;
this.idSubcategoria = null; //Identificador de la subcategoría.
//Objeto.
this.caracteristicas = null; //Objeto contenedor de las características de las categorías.
this.categorias = null; //Objeto contenedor de las categorías.
this.imagenProducto = null; //Imagen del producto cargado.
this.imagenesSubcategorias = null; //Objeto contenedor de las imágenes de las subcategorías
this.imagenesProductos = null; //Objeto contenedor de las imágenes de los productos..
this.imagenPlantilla = null; //Imagen de la Plantilla del producto.
this.preciosNDiseno = null; //Objeto contenedor de los precios por número de diseño.
this.preciosRangosMetro = null; //Objeto contenedor de los precios por rangos por metro del producto.
this.productos = null; //Objeto contenedor de los productos.
this.subcategorias = null; //Objeto contenedor de las subcategorías.
this.valores = null; //Objeto contenedor de los valores de las subcategorías de las características de las categorías.
this.valorCategoria = null; //Valor de la categoría a la que pertenece el producto.
//Precios.
this.precioSinIVA = 0; //Precio del producto sin IVA.
this.precioSinIVADiseno = 0; //Precio del producto sin IVA por disenos.
this.precioSinIVADescuento = 0; //Precio del producto sin IVA con descuento del patrocinio.
this.precioSinIVAPersonalizado = 0; //Precio del producto sin IVA con personalización
this.precioSinIVADescuentoDiseno = 0; //Precio del producto sin IVA con descuento del patrocinio por diseños.
this.precioSinIVADescuentoPersonalizado = 0; //Precio del producto sin IVA con descuento de patocinio y personalización
this.precioSinIVADisenoPersonalizado = 0; //Precio del producto sin IVA con diseño y personalización
this.precioSinIVADescuentoDisenoPersonalizado = 0; //Precio del producto sin IVA con descuento de patrocinio, diseño y personalización.
this.precioConIVA = 0; //Precio del producto con IVA.
this.precioConIVADiseno = 0; //Precio del producto con IVA por diseños.
this.precioConIVADescuento = 0; //Precio del producto con IVA y con descuento del patrocinio.
this.precioConIVAPersonalizado = 0; //Precio del producto con IVA y personalizado.
this.precioConIVADescuentoDiseno = 0; //Precio del producto con IVA y con descuento del patrocinio por diseños.
this.precioConIVADescuentoPersonalizado = 0; //Precio del producto con IVA y con descuento de patrocinio y personalizado.
this.precioConIVADisenoPersonalizado = 0; //Precio del producto con IVA y con diseño y personalizado.
this.precioConIVADescuentoDisenoPersonalizado = 0; //Precio del producto con IVA y con descuento de patrocinio, diseño y personalizado.
//Totales
this.totalCaracteristicas = 0;
this.totalPreciosRangosMetro = 0;
//Varios.
this.carrito = null; //
this.fondo = null; //Fondo de la chapa en el diseñador. Valor hexadecimal #ffffff.
this.hayStock = 0; //Control de botones en función de si hay o no stock del producto cargado.
this.maximoRangoMetro = 0; //El máximo de los rangos, para validarlo.
this.mensajePresupuesto = ""; //Mensaje del correo del presupuesto.
this.mensajePresupuestoEspanol = ""; //Mensaje del correo del presupuesto en español.
this.pesoProducto = null; //Peso del producto.
this.permitirCalcularPrecio = false; //Booleano que controla la ejecución del cálcuo del precio.
this.rangoMaximo = 0; //Rango máximo del producto.
this.rangoMinimo = 0; //Rango mínimo del producto.
//this.rotableSubcategoria = 0; //Si el molde es rotable en su subcategoria.
//this.rotableProducto = 0; //Si el molde es rotable en su producto.
this.textoMensaje = ""; //Texto de aviso para el diseñador en función del valor de la característica.
this.textoNombreSeo = null; //Texo del nmobre seo del producto seleccionado.
this.validadoMedidas = false; //
this.codigoIdioma = null;
this.returnValidarMedidas = false;
this.miCarrusel = null;
//Funciones de clase
this.iniciar = function() {
//Limpiamos.
$(".avisopequecaracteristicas").hide();
$("#btn_carrito").show();
$("#btn_carrito").prop("disabled",false);
$("#btn-menos-cantidadProducto").prop("disabled",true);
$("#btn-menos-disenhoProducto").prop("disabled",true);
$("#btn_presupuesto").prop("disabled",true);
$("#precio").show();
$("#rangoMaximo").hide();
$("#ancho-error").hide();
$("#ancho-error-requerido").hide();
$("#alto-error-requerido").hide();
$("#medidas-error-nulo").hide();
//Cargamos el carrito lo primero.
this.cargarCarrito();
//Identificadores
this.idCategoria = $("#idCategoriaProducto").val();
this.idProducto = $("#idProducto").val();
this.idProductoStock = $("#idProductoStock").val();
this.idSubcategoria = $("#idSubcategoriaProducto").val();
//Cargamos valores
this.cantidadProductos = $("#cantidad").val();
this.codigoIdioma = $("#codigoIdioma").val();
this.numeroDisenho = 1;
this.pesoProducto = $("#pesoProducto").val();
this.textoNombreSeo = $("#textoNombreSeo").val();
this.valorCategoria = $("#valorCategoriaProducto").val();
//Cogemos el rango máximo y el rango mínimo del producto
this.rangoMaximo = $("#rangoMaximoProducto").val();
this.rangoMinimo = $("#rangoMinimoProducto").val();
this.maximoRangoMetro = 0;
//Cogemos el booleano del stock del producto
this.hayStock = $("#hayStockProducto").val();
this.rotableSubcategoria = $("#rotableSubcategoria").val();
this.rotableProducto = $("#rotableProducto").val();
this.imagenProducto = $("#imagenSubcategoriaProducto").val();
this.imagenPlantilla = $("#imagenPlantillaProducto").val();
this.totalPreciosRangosMetro = $("#totalPreciosRangosMetro").val();
//Controlamos los rangos
this.controlesDependientesRangoMaxStock();
//Contador de carga
this.contadorCarga = 0;
//Buscamos los objetos necesarios.
this.cargarCategorias();
this.cargarCaracteristicas();
this.cargarImagenesSubcategorias();
this.cargarPrecioNDiseno();
this.cargarPreciosRangosMetro();
this.cargarProductos();
this.cargarSubcategorias();
this.cargarValoresCaracteristicas();
//Controlamos los botones
this.controlHabilitarDeshabilitar();
//Iniciamos la animación
this.miCarrusel = new Carousel();
this.miCarrusel.constructor();
this.miCarrusel.iniciar();
}
this.recargarImprescindibles = function(){
//Limpiamos.
$(".avisopequecaracteristicas").hide();
$("#btn_carrito").hide();
$("#btn_carrito").attr("disabled",true);
$("#btn_calculando").show();
$("#btn_presupuesto").hide();
$("#btn_presupuesto").attr("disabled",true);
$("#visual-price").hide();
$("#ancho-error").hide();
$("#ancho-error-requerido").hide();
$("#alto-error-requerido").hide();
$("#medidas-error-nulo").hide();
this.limpiarCamposMailPresupuestoProducto();
this.cargarCarrito();
//Identificadores
this.idCategoria = $("#idCategoriaProducto").val();
this.idProducto = $("#idProducto").val();
this.idSubcategoria = $("#idSubcategoriaProducto").val();
this.buscarProducto();
this.buscarProductoEspanol();
this.buscarImagenPrincipal();
//Cogemos el rango máximo y el rango mínimo del producto
this.rangoMaximo = $("#rangoMaximoProducto").val();
this.rangoMinimo = $("#rangoMinimoProducto").val();
//Cargamos valores
this.cantidadProductos = $("#cantidad").val();
this.numeroDisenho = $("#ndesigns").val();
this.textoNombreSeo = $("#textoNombreSeo").val();
//Cogemos el booleano del stock del producto
this.rotableSubcategoria = $("#rotableSubcategoria").val();
this.buscarImagenPlantilla();
this.contadorCarga = 6;
setTimeout(function(){
//Controlamos los rangos
eco_productos.controlesDependientesRangoMaxStock();
//Controlamos los botones
eco_productos.cargarPreciosRangosMetro(); //Aqui controlamos la visualización de determinados botones y calculamos el precio.
//Cargamos las imágenes
eco_productos.cargarImagenesProductos();
//Controlamos los botones
eco_productos.controlHabilitarDeshabilitar();
},1000);
}
this.recargarImprescindiblesActualizarPrecio = function(){
//Limpiamos.
$(".avisopequecaracteristicas").hide();
$("#btn_carrito").hide();
$("#btn_carrito").attr("disabled",true);
$("#btn_calculando").show();
$("#btn_presupuesto").hide();
$("#btn_presupuesto").attr("disabled",true);
$("#visual-price").hide();
$("#ancho-error").hide();
$("#ancho-error-requerido").hide();
$("#alto-error-requerido").hide();
$("#medidas-error-nulo").hide();
this.limpiarCamposMailPresupuestoProducto();
this.cargarCarrito();
//Identificadores
this.idCategoria = $("#idCategoriaProducto").val();
this.idProducto = $("#idProducto").val();
this.idSubcategoria = $("#idSubcategoriaProducto").val();
//Cargamos valores
this.cantidadProductos = $("#cantidad").val();
this.numeroDisenho = $("#ndesigns").val();
//Cogemos el booleano del stock del producto
this.rotableSubcategoria = $("#rotableSubcategoria").val();
this.contadorCarga = 6;
setTimeout(function(){
//Controlamos los rangos
eco_productos.controlesDependientesRangoMaxStock();
//Controlamos los botones
eco_productos.cargarPreciosRangosMetro(); //Aqui controlamos la visualización de determinados botones y calculamos el precio.
//Controlamos los botones
eco_productos.controlHabilitarDeshabilitar();
},1000);
}
//Funciones de trabajo.
this.guardarPresupuesto = function() {
/**- Función que envía un mail para que se presupueste un determinado producto
**/
this.limpiarErroresMailPresupuestoProducto();
//Array de parámetros
var parametros = new Array();
parametros.push(new ParametroFormulario("email","correoUsuarioProducto","correoUsuarioProducto",$("#correoUsuarioProducto").val().trim(),"correoUsuarioProducto-error"));
//Validamos el campo.
if(!camposObligatorios(parametros)) return;
if(!formateoCampos(parametros)) return;
parametros.push(new Parametro("idCategoria",this.idCategoria));
parametros.push(new Parametro("idSubcategoria",this.idSubcategoria));
parametros.push(new Parametro("idProducto",this.idProducto));
parametros.push(new Parametro("cantidadTotal",this.cantidadProductos));
parametros.push(new Parametro("cantidadDisenhos",this.numeroDisenho));
if($("#patrocinio").prop("checked")) parametros.push(new Parametro("patrocinio",1));
else parametros.push(new Parametro("patrocinio",0));
if($("#personalizacion").prop("checked")) parametros.push(new Parametro("productoPersonalizado",1));
else parametros.push(new Parametro("productoPersonalizado",0));
parametros.push(new Parametro("mensajePresupuesto",this.mensajePresupuestoEspanol));
//Características
$.each(eco_productos.caracteristicas,function(index,value){
if(eco_productos.idCategoria == value.iddependiente) {
//parametros.push(new Parametro("nombreCaracteristicaProducto_"+value.id,value.nombreCaracteristica));
//parametros.push(new Parametro("nombreCaracteristicaEspanolProducto_"+value.id,$("#caracteristica_"+value.id+" option:selected").data('nombrecaracteristicaespanol')));
//parametros.push(new Parametro("valorCaracteristicaProducto_"+value.id,$("#caracteristica_"+value.id+" option:selected").text().trim()));
//parametros.push(new Parametro("valorCaracteristicaEspanolProducto_"+value.id,$("#caracteristica_"+value.id+" option:selected").data(value.nombreCaracteristica+"_es")));
parametros.push(new Parametro("idValorCaracteristicaProducto_"+value.id,$("#caracteristica_"+value.id).val()));
}
});
//Si todo va bien, mandamos los parámetros para enviar un email a la empresa
this.ajax.pedir("productosControl.guardarPresupuesto",parametros,XJSON,ASYNC,"eco_productos.postGuardarPresupuesto");
}
this.limpiarCamposMailPresupuestoProducto = function() {
/**- Función que limpia los errores de los campos de error del formulario del presupuesto
**/
$(".idsGrupoLimpiarCamposUsuarioProducto").each(function(){
switch(this){
default:
$(this).val("");
$(this).html("");
break;
}
});
}
this.limpiarErroresMailPresupuestoProducto = function() {
/**- Función que limpia los errores de los campos de error del formulario del presupuesto
**/
$(".idsGrupoLimpiezaErroresUsuarioProducto").each(function(){
switch(this){
default:
$(this).val("");
$(this).html("");
break;
}
});
}
this.modalPresupuesto = function() {
/**- Función que visuliza la ventana para pedir presupuesto, con la información relevante para ello
Necesitamos: la categoría, el producto, el número de diseños y la cantidad.
**/
this.mensajePresupuesto = $("#nombreCategoriaProducto").val()+" "+$("#nombreSubcategoriaProducto").val()+" "+$("#nombreProducto").val()+" / ";
this.mensajePresupuestoEspanol = $("#nombreCategoriaProducto_es").val()+" "+$("#nombreSubcategoriaProducto_es").val()+" "+$("#nombreProducto_es").val()+" / ";
$.each(this.caracteristicas,function(index,value){
if(eco_productos.idCategoria == value.iddependiente) {
if(eco_productos.valores != null) {
$.each(eco_productos.valores,function(indexVal,valueVal){
if(valueVal.idcaracteristica == value.id) {
if(eco_productos.idSubcategoria == valueVal.iddependiente) {
if($("#caracteristica_"+value.id).val() == valueVal.id) {
eco_productos.mensajePresupuesto += value.nombreCaracteristica+": "+valueVal.nombreValorCaracteristica+" / ";
eco_productos.mensajePresupuestoEspanol += value.nombreCaracteristicaEspanol+": "+valueVal.nombreValorCaracteristicaEspanol+" / ";
}
}
}
});
}
}
});
this.numeroDisenho = $("#ndesigns").val();
this.cantidadProductos = $("#cantidad").val();
this.mensajePresupuestoEspanol += "Número de diseños: "+this.numeroDisenho+" / Cantidad: "+this.cantidadProductos+" / Patrocinado: ";
if($("#patrocinio").prop("checked")) this.mensajePresupuestoEspanol += "sí";
else this.mensajePresupuestoEspanol += "no";
if($("#diseno").prop("checked")) this.mensajePresupuestoEspanol += " / Diseñado por Createlow";
if($("#personalizacion").prop("checked")) this.mensajePresupuestoEspanol += " / Producto personalizado";
if($("#ancho").val() != "" && $("#ancho").val() != undefined) this.mensajePresupuestoEspanol += " / Ancho x Alto = "+$("#ancho").val()+" x "+$("#alto").val();
switch(this.codigoIdioma) {
case "es":
this.mensajePresupuesto = this.mensajePresupuestoEspanol;
break;
case "fr":
this.mensajePresupuesto += "Nombre de designs: "+this.numeroDisenho+" / Quantité: "+this.cantidadProductos+" / Sponsorisé: ";
if($("#patrocinio").prop("checked")) this.mensajePresupuesto += "oui";
else this.mensajePresupuesto += "non";
if($("#diseno").prop("checked")) this.mensajePresupuesto += " / Conçu par Createlow";
if($("#personalizacion").prop("checked")) this.mensajePresupuesto += " / Produit personnalisé";
if($("#ancho").val() != "" && $("#ancho").val() != undefined) this.mensajePresupuesto += " / Large x Haut = "+$("#ancho").val()+" x "+$("#alto").val();
break;
case "it":
this.mensajePresupuesto += "Numero di design: "+this.numeroDisenho+" / Quantità: "+this.cantidadProductos+" / Sponsorizzato: ";
if($("#patrocinio").prop("checked")) this.mensajePresupuesto += "sì";
else this.mensajePresupuesto += "no";
if($("#diseno").prop("checked")) this.mensajePresupuesto += " / Progettato da Createlow";
if($("#personalizacion").prop("checked")) this.mensajePresupuesto += " / Prodotto personalizzato";
if($("#ancho").val() != "" && $("#ancho").val() != undefined) this.mensajePresupuesto += " / Ampio x Alto = "+$("#ancho").val()+" x "+$("#alto").val();
break;
case "pt":
this.mensajePresupuesto += "Número de designs: "+this.numeroDisenho+" / Quantidade: "+this.cantidadProductos+" / Patrocinado: ";
if($("#patrocinio").prop("checked")) this.mensajePresupuesto += "sim";
else this.mensajePresupuesto += "não";
if($("#diseno").prop("checked")) this.mensajePresupuesto += " / Projetado por Createlow";
if($("#personalizacion").prop("checked")) this.mensajePresupuesto += " / Produto personalizado";
if($("#ancho").val() != "" && $("#ancho").val() != undefined) this.mensajePresupuesto += " / Largo x Alto = "+$("#ancho").val()+" x "+$("#alto").val();
break;
default:
break;
}
$("#infoPresupuesto").show();
$("#errorPresupuesto").hide();
$("#avisosPresupuesto").html(this.mensajePresupuesto);
$("#presupuestoModal").modal('show');
$("#presupuestoModal").show();
}
this.actualizarCondicionesProducto = function(){
/**- Función que recoge el valor del check de diseno, patrocinio y producto personalizado e imprime el precio en función de si el check está a true o no.
**/
if($("#diseno").prop("checked")) {
if($("#patrocinio").prop("checked")) {
if($("#personalizacion").prop("checked")) {
$("#visual-price").html(formatoPrecioHTML(this.precioSinIVADescuentoDisenoPersonalizado));
} else {
$("#visual-price").html(formatoPrecioHTML(this.precioSinIVADescuentoDiseno));
}
} else {
if($("#personalizacion").prop("checked")) {
$("#visual-price").html(formatoPrecioHTML(this.precioSinIVADisenoPersonalizado));
} else {
$("#visual-price").html(formatoPrecioHTML(this.precioSinIVADiseno));
}
}
} else {
if($("#patrocinio").prop("checked")) {
if($("#personalizacion").prop("checked")) {
$("#visual-price").html(formatoPrecioHTML(this.precioSinIVADescuentoPersonalizado));
} else {
$("#visual-price").html(formatoPrecioHTML(this.precioSinIVADescuento));
}
} else {
if($("#personalizacion").prop("checked")) {
$("#visual-price").html(formatoPrecioHTML(this.precioSinIVAPersonalizado));
} else {
$("#visual-price").html(formatoPrecioHTML(this.precioSinIVA));
}
}
}
}
this.actualizarPrecio = function(id,operacion){
/**- Función que actualiza el precio.
Esta función también llamara a recalcular el precio del producto en función de su cantidad.
@param idFila, identificador del input.
@param operacion, String mas o menos.
**/
$("#btn_carrito").prop("disabled",true);
$("#btn_carrito").hide();
$("#btn_calculando").show();
if(id == "cantidad") {
// Cantidad de productos o de diseños
var cantidad = parseInt($("#"+id).val().trim());
if(operacion == "menos" && cantidad > 1) cantidad -= parseInt(this.rangoMinimo);
if(operacion == "mas" ) cantidad += parseInt(this.rangoMinimo);
if(operacion == "menos" && cantidad == 1) {
cantidad = 1;
$("#btn-menos-cantidadProducto").prop("disabled",true);
}
this.cantidadProductos = cantidad;
$("#"+id).val(this.cantidadProductos);
} else {
// Cantidad de productos o de diseños
var cantidad = parseInt($("#"+id).val().trim());
if(operacion == "menos" && cantidad > 1) cantidad -= 1;
if(operacion == "mas" ) cantidad += 1;
if(operacion == "menos" && cantidad == 1) {
cantidad = 1;
$("#btn-menos-disenhoProducto").prop("disabled",true);
}
this.numeroDisenho = cantidad;
$("#"+id).val(this.numeroDisenho);
}
this.recargarImprescindiblesActualizarPrecio();
}
this.anadirProductoSesion = function(){
/**- Función que coge los datos de la última selección y los mete en sesion.
**/
if(!this.validadoMedidas) {
this.validarMedidas();
if(this.returnValidarMedidas) return;
}
if(parseInt(this.cantidadProductos) < parseInt(this.rangoMinimo)) {
$("#btn_carrito").prop("disabled",true);
$("#btn_carrito").show();
$("#btn_calculando").hide();
return;
}
//Array de parámetros
var parametros = new Array();
if(parseInt(this.totalPreciosRangosMetro) > 0) {
parametros.push(new ParametroFormulario("numeroObligatorio","anchoProducto","anchoProducto",$("#ancho").val().trim(),"ancho-error-requerido"));
parametros.push(new ParametroFormulario("numeroObligatorio","altoProducto","altoProducto",$("#alto").val().trim(),"alto-error-requerido"));
}
if(!camposObligatorios(parametros)) return;
parametros.push(new ParametroFormulario("numeroNoNulo","anchoProducto","anchoProducto",$("#ancho").val().trim(),"medidas-error-nulo"));
parametros.push(new ParametroFormulario("numeroNoNulo","altoProducto","altoProducto",$("#alto").val().trim(),"medidas-error-nulo"));
if(!formateoCampos(parametros)) return;
var medida = $("#ancho").val()/1000 * $("#alto").val()/1000;
if(medida > this.maximoRangoMetro) {
$("#ancho-error").show();
return;
}
parametros.push(new Parametro("idCategoria",this.idCategoria));
parametros.push(new Parametro("valorCategoria",this.valorCategoria));
parametros.push(new Parametro("nombreCategoria",$("#nombreCategoriaProducto").val()));
parametros.push(new Parametro("nombreCategoriaEspanol",$("#nombreCategoriaProducto_es").val()));
parametros.push(new Parametro("idSubcategoria",this.idSubcategoria));
parametros.push(new Parametro("nombreSubcategoria",$("#nombreSubcategoriaProducto").val()));
parametros.push(new Parametro("nombreSubcategoriaEspanol",$("#nombreSubcategoriaProducto_es").val()));
parametros.push(new Parametro("idProducto",this.idProducto));
parametros.push(new Parametro("idProductoStock",this.idProductoStock));
parametros.push(new Parametro("imagenSubcategoria",this.imagenProducto));
parametros.push(new Parametro("nombreProducto",$("#nombreProducto").val()));
parametros.push(new Parametro("nombreProductoEspanol",$("#nombreProducto_es").val()));
parametros.push(new Parametro("cantidadTotal",this.cantidadProductos));
parametros.push(new Parametro("cantidadDisenhos",this.numeroDisenho));
parametros.push(new Parametro("rangoMaximoProducto",this.rangoMaximo));
parametros.push(new Parametro("rangoMinimoProducto",this.rangoMinimo));
if($("#patrocinio").prop("checked")) parametros.push(new Parametro("patrocinio",1));
else parametros.push(new Parametro("patrocinio",0));
if($("#diseno").prop("checked")) parametros.push(new Parametro("disenhadoEmpresa",1));
else parametros.push(new Parametro("disenhadoEmpresa",0));
if($("#personalizacion").prop("checked")) parametros.push(new Parametro("productosPersonalizados",1));
else parametros.push(new Parametro("productosPersonalizados",0));
parametros.push(new Parametro("precioSinIvaPersonalizacion",this.precioSinIvaPersonalizacion));
parametros.push(new Parametro("cantidadesCambiadas",0));
parametros.push(new Parametro("pesoProducto",this.pesoProducto));
//Características
var numCaras = 0;
if(eco_productos.caracteristicas != null) {
$.each(eco_productos.caracteristicas,function(index,value){
if(eco_productos.idCategoria == value.iddependiente) {
//parametros.push(new Parametro("nombreCaracteristicaProducto_"+value.id,value.nombreCaracteristica));
//parametros.push(new Parametro("nombreCaracteristicaEspanolProducto_"+value.id,$("#caracteristica_"+value.id+" option:selected").data('nombrecaracteristicaespanol')));
//var nombreValor = $("#caracteristica_"+value.id+" option:selected").text().trim().toLowerCase();
//nombreValor = nombreValor.replace(/ /g,"-",nombreValor);
//parametros.push(new Parametro("valorCaracteristicaProducto_"+value.id,$("#caracteristica_"+value.id+" option:selected").text().trim()));
//parametros.push(new Parametro("valorCaracteristicaEspanolProducto_"+value.id,$("#caracteristica_"+value.id+" option:selected").data(nombreValor+"_es")));
//var caras = $("#caracteristica_"+value.id+" option:selected").data('caras');
//parametros.push(new Parametro("carasCaracteristicaProducto_"+value.id,$("#caracteristica_"+value.id+" option:selected").data('caras')));
//if(caras != null) numCaras += parseInt($("#caracteristica_"+value.id+" option:selected").data('caras'));
//parametros.push(new Parametro("tipoCaracteristicaProducto_"+value.id,$("#caracteristica_"+value.id+" option:selected").data('tipo')));
if($("#caracteristica_"+value.id).val() != null && $("#caracteristica_"+value.id).val() != undefined && $("#caracteristica_"+value.id).val() != "")
parametros.push(new Parametro("idValorCaracteristicaProducto_"+value.id,$("#caracteristica_"+value.id).val()));
//$.each(eco_productos.valores,function(indexVal,valueVal){
// if(value.id == valueVal.idcaracteristica && $("#caracteristica_"+value.id).val() == valueVal.id) {
// if(valueVal.fondo != undefined && valueVal.fondo != null) parametros.push(new Parametro("colorFondo",valueVal.fondo));
// if(valueVal.textoMensaje != undefined && valueVal.textoMensaje != null) parametros.push(new Parametro("mensajeProductoAviso",valueVal.textoMensaje));
// }
//});
}
});
}
//if(numCaras == 0) numCaras = 1;
//parametros.push(new Parametro("numCarasProducto",numCaras));
//Petición por ajax.
this.ajax.pedir("productosControl.anadirDatosSesion",parametros,XJSON,ASYNC,"eco_productos.postAnadirDatosSesion");
}
this.buscarImagenPlantilla = function() {
/**- Función que busca la imagen de la plantilla del producto
**/
var parametros = new Array();
parametros.push(new Parametro("idProducto",this.idProducto));
parametros.push(new Parametro("tipoImagen",TIPO_IMAGEN_PRODUCTOS));
parametros.push(new Parametro("principalImagen",IMAGEN_PLANTILLA));
//Petición ajax.
this.ajax.pedir("productosControl.buscarImagenes",parametros,XJSON,ASYNC,"eco_productos.postBuscarImagenPlantilla");
}
this.buscarImagenPrincipal = function() {
/**- Función que busca la imagen principal del producto seleccionado.
**/
var parametros = new Array();
parametros.push(new Parametro("idProducto",this.idProducto));
parametros.push(new Parametro("tipoImagen",TIPO_IMAGEN_PRODUCTOS));
parametros.push(new Parametro("principalImagen",IMAGEN_PRINCAPAL));
//Petición ajax.
this.ajax.pedir("productosControl.buscarImagenes",parametros,XJSON,ASYNC,"eco_productos.postBuscarImagenPrincipal");
}
this.buscarProducto = function() {
/**- Función que busca el producto redirigido a través del combo de productos. Esto es para no recargar la página.
**/
var parametros = new Array();
parametros.push(new Parametro("idProducto",this.idProducto));
//Petición por ajax.
this.ajax.pedir("productosControl.buscar",parametros,XJSON,ASYNC,"eco_productos.postBuscarProducto");
}
this.buscarProductoEspanol = function() {
/**- Función que busca el producto redirigido a través del combo de productos. Esto es para no recargar la página.
**/
var parametros = new Array();
parametros.push(new Parametro("idProducto",this.idProducto));
parametros.push(new Parametro("codigoIdioma",'es'));
//Petición por ajax.
this.ajax.pedir("productosControl.buscar",parametros,XJSON,ASYNC,"eco_productos.postBuscarProductoEspanol");
}
this.cargarCarrito = function() {
/**- Función que coge el carrito de la sesión.
**/
this.ajax.pedir("productosControl.cargarCarrito",null,XJSON,ASYNC,"eco_productos.postCargarCarrito");
}
this.cargarCategorias = function() {
/**- Función que busca las categorías.
**/
//Petición ajax.
this.ajax.pedir("categoriasControl.buscar",null,XJSON,ASYNC,"eco_productos.postCargarCategorias");
}
this.cargarCaracteristicas= function() {
/**- Función que busca las características de las categorías.
**/
//Petición ajax.
this.ajax.pedir("categoriasControl.buscarCaracteristicas",null,XJSON,ASYNC,"eco_productos.postCargarCaracteristicas");
}
this.cargarImagenesSubcategorias = function() {
/**- Función que busca las imágenes de las subcategorías.
**/
//Array de parámetros.
var parametros = new Array();
parametros.push(new Parametro("tipoImagen",TIPO_IMAGEN_SUBCATEGORIAS));
//Petición ajax.
this.ajax.pedir("subcategoriasControl.buscarImagenes",parametros,XJSON,ASYNC,"eco_productos.postCargarImagenesSubcategorias");
}
this.cargarImagenesProductos = function() {
/**- Función que busca las imágenes de los productos.
**/
//Array de parámetros.
var parametros = new Array();
parametros.push(new Parametro("tipoImagen",TIPO_IMAGEN_PRODUCTOS));
//Petición ajax.
this.ajax.pedir("productosControl.buscarImagenes",parametros,XJSON,ASYNC,"eco_productos.postCargarImagenesProductos");
}
this.cargarPrecioNDiseno = function() {
/**- Función que carga todos los precios a incrementar por cantiades de diseños de la categoría seleccionada.
**/
var parametros = new Array();
parametros.push(new Parametro("idCategoria",this.idCategoria));
//Petición
this.ajax.pedir("categoriasControl.buscarPrecioNDisenos",parametros,XJSON,ASYNC,"eco_productos.postCargarPrecioNDiseno");
}
this.cargarPreciosRangosMetro = function() {
/**- Fucnión que carga de la sesión los precios por rango por metros
**/
var parametros = new Array();
parametros.push(new Parametro("idProducto",this.idProducto));
this.ajax.pedir("productosControl.buscarPreciosRangosMetro",parametros,XJSON,ASYNC,"eco_productos.postCargarPreciosRangosMetro");
}
this.cargarProductos = function() {
/**- Función que busca los productos.
**/
//Petición ajax.
this.ajax.pedir("productosControl.buscar",null,XJSON,ASYNC,"eco_productos.postCargarProductos");
}
this.cargarSubcategorias = function() {
/**- Función que busca las subcategorías.
**/
//Petición ajax.
this.ajax.pedir("subcategoriasControl.buscar",null,XJSON,ASYNC,"eco_productos.postCargarSubcategorias");
}
this.cargarValoresCaracteristicas = function() {
/**- Función que busca los valores de las características de las subcategorías.
**/
//Petición ajax.
this.ajax.pedir("subcategoriasControl.buscarValoresCaracteristicas",null,XJSON,ASYNC,"eco_productos.postCargarValoresCaracteristicas");
}
this.calcularPrecio = function(){
/**- Función que recoge los valores de las variables necesarias para consultar el precio en bbdd.
**/
//Array de parámetros.
var parametros = new Array();
parametros.push(new Parametro("cantidadTotal",this.cantidadProductos));
parametros.push(new Parametro("cantidadDisenhos",this.numeroDisenho));
parametros.push(new Parametro("idCategoria",this.idCategoria));
parametros.push(new Parametro("idProducto",this.idProducto));
parametros.push(new Parametro("idSubcategoria",this.idSubcategoria));
parametros.push(new Parametro("anchoProducto",$("#ancho").val()));
parametros.push(new Parametro("altoProducto",$("#alto").val()));
//Recorremos las características para obtener los nombres de los combos de las caracteristicas.
var numCaras = 0;
if(this.totalCaracteristicas > 0) {
$.each(eco_productos.caracteristicas,function(index,value){
if(eco_productos.idCategoria == value.iddependiente){
if(eco_productos.valores != null) {
$.each(eco_productos.valores,function(indexVal,valueVal){
if(eco_productos.idSubcategoria == valueVal.iddependiente) {
if(valueVal.idcaracteristica == value.id) {
if($("#caracteristica_"+value.id).val() == valueVal.id) {
parametros.push(new Parametro("valorCaracteristica_"+value['id'],$("#caracteristica_"+value['id']).val().trim()));
var caras = valueVal.caras;
if(caras != null) numCaras += parseInt(caras);
}
}
}
});
}
}
});
}
if(numCaras == 0) numCaras = 1;
parametros.push(new Parametro("numCarasProducto",numCaras));
//Petición por ajax.
this.ajax.pedir("productosControl.buscarPrecio",parametros,XJSON,ASYNC,"eco_productos.postBuscarPrecio");
}
this.controlesDependientesRangoMaxStock = function() {
/**- Función que controla los elementos que dependen del rango máximo de un producto
**/
$("#ancho-error").hide();
if(parseInt(eco_productos.hayStock)) {
$("#btn_stock").hide();
//Con respecto al rango máximo.
if(parseInt(eco_productos.cantidadProductos) <= parseInt(eco_productos.rangoMaximo)) { //Mirar el rango máximo de este producto
$("#btn-mas-cantidadProducto").prop("disabled",false);
$("#btn_carrito").show();
$("#btn_carrito").prop("disabled",false);
$("#btn_calculando").hide();
$("#btn_presupuesto").hide();
$("#btn_presupuesto").prop("disabled",true);
$("#precio").show();
$("#rangoMaximo").hide();
} else {
$("#btn-mas-cantidadProducto").prop("disabled",true);
$("#btn_carrito").hide();
$("#btn_carrito").prop("disabled",true);
$("#btn_calculando").hide();
$("#btn_presupuesto").show();
$("#btn_presupuesto").prop("disabled",false);
$("#precio").hide();
$("#textoRangoMaximo").html(eco_productos.rangoMaximo);
$("#rangoMaximo").show();
$(".solicita-presupuesto").show();
}
//Con respecto al rango mínimo
if(parseInt(eco_productos.cantidadProductos) <= parseInt(eco_productos.rangoMinimo)) {
$("#btn-menos-cantidadProducto").prop("disabled",true);
if(parseInt(eco_productos.cantidadProductos) < parseInt(eco_productos.rangoMinimo)) {
$("#cantidad-error").html("Mínimo: "+eco_productos.rangoMinimo);
}
} else {
$("#btn-menos-cantidadProducto").attr("disabled",false);
$("#cantidad-error").html("");
}
} else {//No hay stock
$("#btn_stock").show();
$("#btn_carrito").hide();
$("#btn_carrito").prop("disabled",true);
$("#btn_calculando").hide();
$("#btn_presupuesto").hide();
$("#btn_presupuesto").prop("disabled",true);
$("#precio").show();
$("#rangoMaximo").hide();
//Con respecto al rango máximo.
if(parseInt(eco_productos.cantidadProductos) <= parseInt(eco_productos.rangoMaximo)) { //Mirar el rango máximo de este producto
$("#btn-mas-cantidadProducto").prop("disabled",false);
$("#btn_calculando").hide();
$("#btn_presupuesto").hide();
$("#btn_presupuesto").prop("disabled",true);
$("#precio").show();
$("#rangoMaximo").hide();
} else {
$("#btn-mas-cantidadProducto").prop("disabled",true);
$("#btn_carrito").hide();
$("#btn_carrito").prop("disabled",true);
$("#btn_calculando").hide();
$("#btn_presupuesto").show();
$("#btn_presupuesto").prop("disabled",false);
$("#precio").hide();
$("#textoRangoMaximo").html(eco_productos.rangoMaximo);
$("#rangoMaximo").show();
$(".solicita-presupuesto").show();
}
//Con respecto al rango mínimo
if(parseInt(eco_productos.cantidadProductos) <= parseInt(eco_productos.rangoMinimo)) {
$("#btn-menos-cantidadProducto").prop("disabled",true);
if(parseInt(eco_productos.cantidadProductos) < parseInt(eco_productos.rangoMinimo)) {
$("#cantidad-error").html("Mínimo: "+eco_productos.rangoMinimo);
}
} else {
$("#btn-menos-cantidadProducto").attr("disabled",false);
$("#cantidad-error").html("");
}
}
}
this.controlHabilitarDeshabilitar = function(){
/**- Función que controla la edición de los inputs de cantidad y disenho
**/
if(this.numeroDisenho <= 1) {
$("#btn-menos-disenhoProducto").attr("disabled",true);
if(this.numeroDisenho < 1) {
$("#ndesigns").val(1);
$("#disenho-error").html("Minimum: 1");
this.numeroDisenho = 1;
}
} else {
$("#btn-menos-disenhoProducto").prop("disabled",false);
$("#disenho-error").html("");
}
if(parseInt(this.totalPreciosRangosMetro) > 0) $(".medidasProducto").show();
else $(".medidasProducto").hide();
if(this.maximoRangoMetro != 0) {
var medida = $("#ancho").val()/1000 * $("#alto").val()/1000;
if(medida > this.maximoRangoMetro) $("#ancho-error").show();
}
if(parseInt($("#ndesigns").val()) >= parseInt($("#cantidad").val())) {
$("#cantidad").val($("#ndesigns").val());
this.cantidadProductos = $("#cantidad").val();
}
if(this.imagenPlantilla != null && this.imagenPlantilla != "" && this.imagenPlantilla != undefined) $(".btn-plantilla").show();
else $(".btn-plantilla").hide();
}
this.dibujarImagenesProductos = function() {
/**- Función que dibuja las imágenes del producto
**/
var principales = $(".carousel__track");
var miniaturas = $(".carousel-thumbnails");
//Vaciamos los contenedores
principales.empty();
miniaturas.empty();
//Dibujamos
$.each(this.imagenesProductos,function(index,value) {
if(value.iddependiente == eco_productos.idProducto && value.principal == IMAGEN_PRINCAPAL) {
var div = crearElementoClasesTexto("div","carousel__slide active",null,null);
div.setAttribute("id","slide_0");
div.setAttribute("loading","lazy");
div.setAttribute("alt",eco_productos.textoNombreSeo);
div.setAttribute("title",eco_productos.textoNombreSeo);
div.setAttribute("style","background: url("+value.imagen+"); background-size: cover;");
div.setAttribute("data",value.imagen);
principales.append(div);
var div = crearElementoClasesTexto("div","carousel-thumbnails__item active",null,null);
div.setAttribute("id","tn_0");
miniaturas.append(div);
var imagen = crearElementoClasesTexto("img",null,null,null);
imagen.setAttribute("src",value.imagen);
imagen.setAttribute("loading","lazy");
div.appendChild(imagen);
}
});
var i = 1;
$.each(this.imagenesProductos,function(index,value) {
if(value.iddependiente == eco_productos.idProducto && value.principal == IMAGEN_SECUNDARIA) {
var div = crearElementoClasesTexto("div","carousel__slide",null,null);
div.setAttribute("id","slide_"+i);
div.setAttribute("alt",eco_productos.textoNombreSeo);
div.setAttribute("title",eco_productos.textoNombreSeo);
div.setAttribute("style","background: url("+value.imagen+"); background-size: cover;");
div.setAttribute("data",value.imagen);
principales.append(div);
var div = crearElementoClasesTexto("div","carousel-thumbnails__item",null,null);
div.setAttribute("id","tn_"+i);
miniaturas.append(div);
var imagen = crearElementoClasesTexto("img",null,null,null);
imagen.setAttribute("src",value.imagen);
imagen.setAttribute("loading","lazy");
div.appendChild(imagen);
i++;
}
});
this.miCarrusel.destroyCarousel();
this.miCarrusel = new Carousel();
this.miCarrusel.constructor();
this.miCarrusel.iniciar();
}
this.enviarMailPresupuesto = function() {
/**- Función que envía un mail a picazo sobre un presupuesto pedido
**/
var parametros = new Array();
parametros.push(new Parametro("correoUsuarioProducto",$("#correoUsuarioProducto").val().trim()));
parametros.push(new Parametro("mensajeUsuario",this.mensajePresupuesto));
parametros.push(new Parametro("mensajeAdmin",this.mensajePresupuestoEspanol));
parametros.push(new Parametro("idPresupuesto",this.idPresupuesto));
var respuesta = this.ajax.pedir("productosControl.enviarMailPresupuesto",parametros,XJSON,SYNC,null);
$("#presupuestoModal").hide();
iu.comunicarMio(respuesta.valor, respuesta.mensaje, "presupuestoEnviado");
}
this.mensajeAvisoCierre = function(tipoCaracteristica,idCaracteristica) {
var valorValorCaracteristica = $("#"+idCaracteristica+" option:selected").val();
if(tipoCaracteristica == "Cierre" && parseInt(valorValorCaracteristica) == 85) {
$(".avisopequecaracteristicas").show();
} else $(".avisopequecaracteristicas").hide();
}
this.redirigirProducto = function(valor) {
/**- Función que redirige la página en función del parámetros seleccionados.
Seleccionaremos la primera opción de los productos.
**/
$("#idProducto").val(valor);
this.recargarImprescindibles();
}
this.redirigirSubcategoria = function() {
/**- Función que redirige la página en función del parámetros seleccionados.
Vamos a pedir el primer tamaño o producto de la categoría seleccionada, y recargaremos la página.
**/
//Cogemos la url amigable
var url = $("#modelo option:selected").attr("data-link");
//Redirigimos la web
window.location.href = url;
}
this.validarMedidas = function() {
/**- Función que valida el mínimo de las medidas cuando tenemos un producto a medida
**/
if($("#ancho").val() != "" && $("#ancho").val() != undefined && $("#alto").val() != "" && $("#alto").val() != undefined) {
if(parseFloat($("#ancho").val()) < LIMITE_INFERIOR_MEDIDAS_PRODUCTO || parseFloat($("#ancho").val()) < LIMITE_INFERIOR_MEDIDAS_PRODUCTO) {
iu.comunicarMio("Ok","Les mesures sont-elles correctes ?
N'oubliez pas que nous parlons de millimètres.","productos");
this.validadoMedidas = true;
this.returnValidarMedidas = true;
}
}
}
this.validarNumeroEntero = function(nombre) {
/**- Función que valida el número entero en un input
#param nombre, identificador del input.
**/
return "1234567890".indexOf($("#"+nombre).val().fromCharCode($("#"+nombre).which)) >= 0;
}
/**MÉTODOS PORST**/
this.postAnadirDatosSesion = function(respuesta) {
/**- Función que procesa el resultado de una petición.
@param respuesta, ok
**/
//funcion que repinte el minicarrito
//ahora está puesto a PELO
var precio = 0;
if(respuesta.lista.producto['descuento'] != undefined && respuesta.lista.producto['descuento'] == 1) {
if(respuesta.lista.producto['disenhadoEmpresa'] != undefined && respuesta.lista.producto['disenhadoEmpresa'] == 1) {
if(respuesta.lista.producto['productosPersonalizados'] != undefined && respuesta.lista.producto['productosPersonalizados'] == 1) {
precio = respuesta.lista.producto['precioSinIVADescuentoDisenoPersonalizado'];
} else {
precio = respuesta.lista.producto['precioSinIVADescuentoDiseno'];
}
} else {
precio = respuesta.lista.producto['precioSinIVADescuento'];
}
} else {
if(respuesta.lista.producto['disenhadoEmpresa'] != undefined && respuesta.lista.producto['disenhadoEmpresa'] == 1) {
if(respuesta.lista.producto['productosPersonalizados'] != undefined && respuesta.lista.producto['productosPersonalizados'] == 1) {
precio = respuesta.lista.producto['precioSinIVADisenoPersonalizado'];
} else {
precio = respuesta.lista.producto['precioSinIVADiseno'];
}
} else {
if(respuesta.lista.producto['productosPersonalizados'] != undefined && respuesta.lista.producto['productosPersonalizados'] == 1) {
precio = respuesta.lista.producto['precioSinIVAPersonalizado'];
} else {
precio = respuesta.lista.producto['precioSinIVA'];
}
}
}
caracteristicas_nuevo = '';
if(respuesta.lista.producto.caracteristicas != undefined) {
$.each(respuesta.lista.producto.caracteristicas, function(index,value){
if (value.valorCaracteristica != "") caracteristicas_nuevo += value.valorCaracteristica + ' / ';
});
}
if(respuesta.lista.producto['ancho'] != undefined && respuesta.lista.producto['ancho'] != null && respuesta.lista.producto['ancho'] != "") caracteristicas_nuevo += respuesta.lista.producto['ancho']+" x "+respuesta.lista.producto['alto']+" (mm) / ";
caracteristicas_nuevo += "Conceptions: "+respuesta.lista.producto['cantidadDisenhos'];
$(".tabla-listado-productos-minicarrito table").append('
Sans fermeture | ![]() Réglable boule | ![]() Réglable métal | ![]() Réglable ressort | ![]() Sécurité plastique | ![]() Sécurité métal | |
---|---|---|---|---|---|---|
Économique / Satiné 10mm | ||||||
Économique / Satiné 15mm | ||||||
Économique / Satiné 20mm | ||||||
Épais 10mm | ||||||
Épais 15mm | ||||||
Épais 20mm |