/** *@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(BASE_URL); //Combos fijos this.cantidadProductos = null; //Cantidad de chapas seleccionadas. this.numeroDisenho = null; //Número de diseños seleccionados. //Combo características imagen this.idCaracteristica = null; this.idValorCaracteristica = null; this.nombreValorCaracteristica = null; //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.idRangoMaximo = null; //Identificador del rango máximo de la categoría. 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.precio = 0; //Precio del producto sin IVA con las condiciones selaccionadas, es el precio sin iva final. this.precioSinIVA = 0; //Precio del producto sin IVA. this.precioSinIVAUnidad = 0; //Precio unitario del producto sin IVA. this.precioSinIVADiseno = 0; //Precio del producto sin IVA por disenos. this.precioSinIVADisenoUnidad = 0; //Precio unitario del producto sin IVA por disenos. this.precioSinIVADescuento = 0; //Precio del producto sin IVA con descuento del patrocinio. this.precioSinIVADescuentoUnidad = 0; //Precio unitario del producto sin IVA con descuento del patrocinio. this.precioSinIVAPersonalizado = 0; //Precio del producto sin IVA con personalización this.precioSinIVAPersonalizadoUnidad = 0; //Precio unitario del producto sin IVA con personalización this.precioSinIVADescuentoDiseno = 0; //Precio del producto sin IVA con descuento del patrocinio por diseños. this.precioSinIVADescuentoDisenoUnidad = 0; //Precio unitario 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.precioSinIVADescuentoPersonalizadoUnidad = 0; //Precio unitario 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.precioSinIVADisenoPersonalizadoUnidad = 0; //Precio unitario 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.precioSinIVADescuentoDisenoPersonalizadoUnidad = 0;//Precio unitario del producto sin IVA con descuento de patrocinio, diseño y personalización. this.precioConIVA = 0; //Precio del producto con IVA. this.precioConIVA = 0; //Precio unitario del producto con IVA. this.precioConIVADiseno = 0; //Precio del producto con IVA por diseños. this.precioConIVADisenoUnidad = 0; //Precio unitario del producto con IVA por diseños. this.precioConIVADescuento = 0; //Precio del producto con IVA y con descuento del patrocinio. this.precioConIVADescuentoUnidad = 0; //Precio unitario del producto con IVA y con descuento del patrocinio. this.precioConIVAPersonalizado = 0; //Precio del producto con IVA y personalizado. this.precioConIVAPersonalizadoUnidad = 0; //Precio unitario del producto con IVA y personalizado. this.precioConIVADescuentoDiseno = 0; //Precio del producto con IVA y con descuento del patrocinio por diseños. this.precioConIVADescuentoDisenoUnidad = 0; //Precio unitario 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.precioConIVADescuentoPersonalizadoUnidad = 0; //Precio unitario 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.precioConIVADisenoPersonalizadoUnidad = 0; //Precio unitario 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. this.precioConIVADescuentoDisenoPersonalizadoUnidad = 0;//Precio unitario del producto con IVA y con descuento de patrocinio, diseño y personalizado. this.precioUnitario = 0; //Precio de la del producto en su rango con las condiciones seleccionadas. //Totales this.totalCaracteristicas = 0; this.totalPreciosRangosMetro = 0; //Varios. this.carrito = null; //Objeto contenedor del carrito de la sesión. 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.precioBaseReal = 0; //Precio base del producto unitario en su máximo rango, es decir, el más bajo. this.rangoMaximo = 0; //Rango máximo del producto. this.rangoMinimo = 0; //Rango mínimo del producto. this.referrer = null; //Página de la que se procede, si es menu es porque se ha accedido desde el menú y no seleccionanado un producto de algún carrusel. 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.codigoIdioma = null; 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(); //Busccamos al usuario this.buscarUsuario(); //Implementamos el dataLayer del carrusel de productos relacionedos this.dataLayerCarruselProductosRelacionados(); //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.precioBaseReal = $("#precioBaseRealProducto").val(); this.referrer = $("#referrerProducto").val(); this.textoNombreSeo = $("#textoNombreSeo").val(); this.valorCategoria = $("#valorCategoriaProducto").val(); //Cogemos el rango máximo y el rango mínimo del producto this.idRangoMaximo = $("#idRangoMaximo").val(); this.rangoMaximo = $("#rangoMaximoProducto").val(); this.rangoMinimo = $("#rangoMinimoProducto").val(); this.maximoRangoMetro = 0; //Cogemos el booleano del stock del producto this.hayStock = $("#hayStockProducto").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(){ console.log("recargarImprescindiblesActualizarPrecio"); //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")) { this.precio = this.precioSinIVADescuentoDisenoPersonalizado; this.precioUnitario = this.precioSinIVADescuentoDisenoPersonalizadoUnidad; $("#visual-price").html(formatoPrecioHTML(this.precioSinIVADescuentoDisenoPersonalizado)); } else { this.precio = this.precioSinIVADescuentoDiseno; this.precioUnitario = this.precioSinIVADescuentoDisenoUnidad; $("#visual-price").html(formatoPrecioHTML(this.precioSinIVADescuentoDiseno)); } } else { if($("#personalizacion").prop("checked")) { this.precio = this.precioSinIVADisenoPersonalizado; this.precioUnitario = this.precioSinIVADisenoPersonalizadoUnidad; $("#visual-price").html(formatoPrecioHTML(this.precioSinIVADisenoPersonalizado)); } else { this.precio = this.precioSinIVADiseno; this.precioUnitario = this.precioSinIVADisenoUnidad; $("#visual-price").html(formatoPrecioHTML(this.precioSinIVADiseno)); } } } else { if($("#patrocinio").prop("checked")) { if($("#personalizacion").prop("checked")) { this.precio = this.precioSinIVADescuentoPersonalizado; this.precioUnitario = this.precioSinIVADescuentoPersonalizadoUnidad; $("#visual-price").html(formatoPrecioHTML(this.precioSinIVADescuentoPersonalizado)); } else { this.precio = this.precioSinIVADescuento; this.precioUnitario = this.precioSinIVADescuentoUnidad; $("#visual-price").html(formatoPrecioHTML(this.precioSinIVADescuento)); } } else { if($("#personalizacion").prop("checked")) { this.precio = this.precioSinIVAPersonalizado; this.precioUnitario = this.precioSinIVAPersonalizadoUnidad; $("#visual-price").html(formatoPrecioHTML(this.precioSinIVAPersonalizado)); } else { this.precio = this.precioSinIVA; this.precioUnitario = this.precioSinIVAUnidad; $("#visual-price").html(formatoPrecioHTML(this.precioSinIVA)); } } } $("#precioUnitario").val(this.precioUnitario); this.dataLayerDetallesProducto(); } 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.validarMedidas()) 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("referrerProducto",this.referrer)); 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 if(eco_productos.caracteristicas != null) { $.each(eco_productos.caracteristicas,function(index,value){ if(eco_productos.idCategoria == value.iddependiente) { 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())); } }); } //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.buscarUsuario = function() { /**- Función que busca si el usuario está logueado **/ var resultado = this.ajax.pedir("usuarioControl.buscarUsuarioSesion",null,XJSON,SYNC,null); if(resultado.tipo == "Respuesta") { dataLayer.push({ user_id: resultado.lista }); } } 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("Mínimo: 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.dataLayerAnadirProductoCarrito = function() { /**- Función que implementa el dataLayer de añadir producto al carrito **/ if($("#patrocinio").prop("checked")) var patrocinio = true; else var patrocinio = false; if($("#diseno").prop("checked")) var disenado = true; else var disenado = false; if($("#personalizacion").prop("checked")) var personalizado = true; else var personalizado = false; var ref = eco_productos.referrer; if(ref == "Menu" || ref == undefined) ref = "Null"; //Recorremos las características para insertarlas en el dataLayer var item_custom_parameters_f = { tipo: $("#nombreSubcategoriaProducto_es").val(), modelo: $("#nombreProducto_es").val(), disenos: $("#ndesigns").val(), descuento_patrocinio: patrocinio, disenado_por_createlow: disenado, dato_variable: personalizado, } $.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) { var texto = value.nombreCaracteristicaEspanol.replace(/ /g,"_"); texto = reemplazarCaracteresEspeciales(texto); var clave = texto.toLowerCase(); var valor = valueVal.nombreValorCaracteristicaEspanol; item_custom_parameters_f[clave] = valor; } } } }); } } }); dataLayer.push({ ecommerce: null}); dataLayer.push({ event: "add_to_cart", ecommerce: { item_list_id: ref.toLowerCase(), item_list_name: ref, currency: "EUR", value: eco_productos.precio, items: [ { item_id: eco_productos.idProducto, item_name: $("#nombreCategoriaProducto_es").val()+" "+$("#nombreSubcategoriaProducto_es").val()+" "+$("#nombreProducto_es").val(), index: 0, item_category: $("#nombreCategoriaProducto_es").val(), price: eco_productos.precioUnitario, quantity: $("#cantidad").val(), item_custom_parameters: item_custom_parameters_f } ] } }); } this.dataLayerCarruselProductosRelacionados = function() { /**- Función que implementa el dataLayer del carrusel de los productos relacionados **/ //Limpiamos el dataLayer de eventoas anteriores dataLayer.push({ ecommerce: null }); //Creamos un array vacío var items = []; //Llenamos el array de items $.each($(".productosCarrusel"),function(i,value){ var precio = parseFloat(value.dataset.price); precio = Math.round(precio*100)/100; items.push({ item_id: value.dataset.id, item_name: value.dataset.name, index: i, item_category: value.dataset.category, price: precio }); }); //Construimos el dataLayer de elementos encontrados en el carrusel. dataLayer.push({ event: "view_item_list", ecommerce : { item_list_id: "productos_relacionados", item_list_name: "Productos relacionados", items: items } }); } this.dataLayerDetallesProducto = function() { /**- Función que implementa el dataLayer de la calculadora. **/ dataLayer.push({ ecommerce: null}); var ref = eco_productos.referrer; if(ref == "Menu" || ref == undefined) ref = "Null"; dataLayer.push({ event: "view_item", ecommerce: { item_list_id: ref.toLowerCase(), item_list_name: ref, items: [ { item_id: eco_productos.idProducto, item_name: $("#nombreCategoriaProducto_es").val()+" "+$("#nombreSubcategoriaProducto_es").val()+" "+$("#nombreProducto_es").val(), index: 0, item_category: $("#nombreCategoriaProducto_es").val(), price: parseFloat($("#precioUnitario").val()) } ] } }); } this.dataLayerSelectItem = function() { /**- Función que implementa el dataLayer de la calculadora. **/ dataLayer.push({ ecommerce: null}); var ref = eco_productos.referrer; if(ref == "Menu" || ref == undefined) ref = "Null"; dataLayer.push({ event: "select_item", ecommerce: { item_list_id: ref.toLowerCase(), item_list_name: ref, items: [ { item_id: eco_productos.idProducto, item_name: $("#nombreCategoriaProducto_es").val()+" "+$("#nombreSubcategoriaProducto_es").val()+" "+$("#nombreProducto_es").val(), index: 0, item_category: $("#nombreCategoriaProducto_es").val(), price: parseFloat($("#precioUnitario").val()) } ] } }); } this.dibujarComboCaracteristicaImagen = function() { /**- Función que dibuja el combo de las características de las imágenes cuando estas han cambiado **/ //Vaciamos el combo de los destinos. var combo = $("#comboCaracteristica_"+this.idCaracteristica); combo.empty(); var divFlechaDonw = crearElementoClasesTexto("div","flechita-abajo",null,null); combo.append(divFlechaDonw); var iDonw = crearElementoClasesTexto("i","fas fa-chevron-down",null,null); divFlechaDonw.appendChild(iDonw); var divListadoPaises = crearElementoClasesTexto("div","listado-paises listado-paises_"+this.idCaracteristica,null,null); combo.append(divListadoPaises); $.each(this.valores,function(index,valor) { if(parseInt(valor.activa) == 1) { if(valor.idcaracteristica == eco_productos.idCaracteristica && valor.iddependiente == eco_productos.idSubcategoria) { if(valor.id == eco_productos.idValorCaracteristica) { var div0 = crearElementoClasesTexto("div","activo pais pais_"+valor.idcaracteristica,null,null); combo.append(div0); var div1 = crearElementoClasesTexto("div","bandera",null,null); div0.appendChild(div1); if(valor.imagen != null) { var img = crearElementoClasesTexto("img","imagen imagenCaracteristica_"+valor.idcaracteristica,null,null); img.setAttribute("src",valor.imagen); div1.appendChild(img); } var divNombre = crearElementoClasesTexto("div","nombre nombreCaracteristica_"+valor.idcaracteristica,valor.nombreValorCaracteristica,null); div0.appendChild(divNombre); div0.addEventListener("click",function(e) { e.stopPropagation(); var partesId = e.currentTarget.classList[2].split("_"); var idCaracteristica = partesId[1]; var $actual = $(".listado-paises_" + idCaracteristica); $(".listado-paises").not($actual).hide(); $actual.toggle(); },false); } if(valor.id == eco_productos.idValorCaracteristica) var div0 = crearElementoClasesTexto("div","inactivo pais caracteristicaSeleccionada pais_"+valor.idcaracteristica,null,null); else var div0 = crearElementoClasesTexto("div","inactivo pais pais_"+valor.idcaracteristica,null,null); divListadoPaises.appendChild(div0); var div1 = crearElementoClasesTexto("div","bandera",null,null); div0.appendChild(div1); if(valor.imagen != null) { var img = crearElementoClasesTexto("img","imagen imagenCaracteristica_"+valor.idcaracteristica,null,null); img.setAttribute("src",valor.imagen); div1.appendChild(img); } var divNombre = crearElementoClasesTexto("div","nombre nombreCaracteristica_"+valor.idcaracteristica,valor.nombreValorCaracteristica,null); div0.appendChild(divNombre); div0.addEventListener("click",function(e){eco_productos.seleccionarCaracteristica(valor.idcaracteristica,valor.id);},false); } } }); } 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) { /**- Función que muestra un mensaje de aviso condicionado por los parametros, @param tipoCaracteristica, el campo tipo de una característica. @param idCaracteristica, el identificador de la característica de la que depende el valor sobre el que se ejecuta la acción. **/ 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); var nombreCategoriaEs = null; var nombreSubcategoriaEs = null; var nombreProductoEs = null; $.each(this.productos,function(index,value){ if(value.id == valor) { nombreCategoriaEs = value.nombreCategoria_es; nombreSubcategoriaEs = value.nombreSubcategoria_es; nombreProductoEs = value.nombreProducto_es; } }); var precioBaseReal = null; var parametros = new Array(); parametros.push(new Parametro("idProducto",valor)); parametros.push(new Parametro("idRango",eco_productos.idRangoMaximo)); var resultado = iu.ajax.pedir("productosControl.buscarPrecioBase",parametros,XJSON,SYNC,null); if(resultado.tipo == "Respuesta" && resultado.total > 0) { precioBaseReal = parseFloat(resultado.lista[0].precio).toFixed(2); precioBaseReal = precioBaseReal*100; precioBaseReal = precioBaseReal/100; } var parametros = new Array(); parametros.push(new Parametro("referrer","Product")); var resultado = this.ajax.pedir("controlador.guardarSeleccionProducto",parametros,XJSON,SYNC,null); dataLayer.push({ ecommerce: null}); dataLayer.push({ event: "select_item", ecommerce: { item_list_id: "product", item_list_name: "Product", items: [ { item_id: valor, item_name: nombreCategoriaEs+" "+nombreSubcategoriaEs+" "+nombreProductoEs, index: 0, item_category: nombreCategoriaEs, price: precioBaseReal } ] } }); 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"); var idSubcategoria = $("#modelo").val(); var idProductoDL = null; var nombreCategoriaEs = null; var nombreSubcategoriaEs = null; var nombreProductoEs = null; $.each(this.productos,function(index,value){ if(value.idsubcategoria == idSubcategoria) { if(value.defecto) { idProductoDL = value.id; nombreCategoriaEs = value.nombreCategoria_es; nombreSubcategoriaEs = value.nombreSubcategoria_es; nombreProductoEs = value.nombreProducto_es; } } }); var precioBaseReal = null; var parametros = new Array(); parametros.push(new Parametro("idProducto",idProductoDL)); parametros.push(new Parametro("idRango",eco_productos.idRangoMaximo)); var resultado = iu.ajax.pedir("productosControl.buscarPrecioBase",parametros,XJSON,SYNC,null); if(resultado.tipo == "Respuesta" && resultado.total > 0) { precioBaseReal = parseFloat(resultado.lista[0].precio).toFixed(2); precioBaseReal = precioBaseReal*100; precioBaseReal = precioBaseReal/100; } var parametros = new Array(); parametros.push(new Parametro("referrer","Product")); var resultado = this.ajax.pedir("controlador.guardarSeleccionProducto",parametros,XJSON,SYNC,null); dataLayer.push({ ecommerce: null}); dataLayer.push({ event: "select_item", ecommerce: { item_list_id: "product", item_list_name: "Product", items: [ { item_id: idProductoDL, item_name: nombreCategoriaEs+" "+nombreSubcategoriaEs+" "+nombreProductoEs, index: 0, item_category: nombreCategoriaEs, price: precioBaseReal } ] } }); //Redirigimos la web window.location.href = url; } this.seleccionarCaracteristica = function(idCaracteristica,idValorCaracteristica) { /**- Función que recoje el identificador de la característica seleccionada cuando el combo padre es el de las características con imagen. @param idCaracteristica, identificador de la característica cuyo valor estamos modificando. @param idValorCaracteristica, identificador del valor de la caracteristica. **/ this.idCaracteristica = idCaracteristica; this.idValorCaracteristica = idValorCaracteristica; //Seleccionamos el valor de la característica correspondiente $("#caracteristica_"+idCaracteristica).val(idValorCaracteristica); $("#caracteristica_"+idCaracteristica).prop('selected', false).eq(idValorCaracteristica).prop('selected', true); this.dibujarComboCaracteristicaImagen(); this.recargarImprescindiblesActualizarPrecio(); } this.validarMedidas = function() { /**- Función que valida el mínimo de las medidas cuando tenemos un producto a medida @return true o false en función de si las medidas pasan o no los controles de validación definidos. **/ if(this.idCategoria == 7 && $("#ancho").val() != "" && $("#alto").val() != "" && ($("#ancho").val() < 30 || $("#alto").val() < 30)) { $("#medidas-error-minimas").html("Mínimo: 30mm."); $("#medidas-error-minimas").show(); return false; } if(this.idCategoria == 12 && $("#ancho").val() != "" && $("#alto").val() != "" && ($("#ancho").val() < 40 || $("#alto").val() < 40)) { $("#medidas-error-minimas").html("Mínimo: 40mm."); $("#medidas-error-minimas").show(); return false; } return 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']; } } } this.dataLayerAnadirProductoCarrito(); var caracteristicas_nuevo = ''; if(respuesta.lista.producto.caracteristicas != undefined) { $.each(respuesta.lista.producto.caracteristicas, function(index,value){ if(value.valorCaracteristica != "") caracteristicas_nuevo += value.valorCaracteristica + ' / '; }); //caracteristicas_nuevo = caracteristicas_nuevo.substr(0, caracteristicas_nuevo.length-3); } 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 += "Diseños: "+respuesta.lista.producto['cantidadDisenhos']; $(".tabla-listado-productos-minicarrito table").append(''+respuesta.lista.producto.nombre_categoria+' '+respuesta.lista.producto.nombre_subcategoria+' '+respuesta.lista.producto.nombre_producto+'
'+caracteristicas_nuevo+''+respuesta.lista.producto.cantidadTotal+' u.'+formatoPrecioHTML(precio)+''); $(".dropdown-carrito").addClass("movido"); if(respuesta.lista.total < 60) { $(".mensaje-carrito-tefalta span").html(formatoPrecioHTML((60)-respuesta.lista.total)); $(".mensaje-carrito-tefalta").show(); $(".mensaje-carrito-enviogratis").hide(); } else { $(".mensaje-carrito-tefalta").hide(); $(".mensaje-carrito-enviogratis").show(); } $("#carritoPrecioTotal").html(formatoPrecioHTML(respuesta.lista.total)); $("#cantidadProductosCarritoMenu").html(parseInt(respuesta.lista.cuantos)); $(".dropdown-carrito").addClass("movido"); $(".page-cover").show(); } this.postBuscarImagenPlantilla = function(respuesta) { /**- Función que procesa el resultado de una petición. @param respuesta, Objeto Respuesta. **/ //Procesamos la respuesta if(respuesta.tipo == "Respuesta" && respuesta.total == 1) { this.imagenPlantilla = respuesta.lista[0]['imagen']; $(".btn-plantilla").attr("src",this.imagenPlantilla); $(".btn-plantilla").attr("href",this.imagenPlantilla); } else this.imagenPlantilla = null; } this.postBuscarImagenPrincipal = function(respuesta) { /**- Función que procesa el resultado de una petición. @param respuesta, Objeto Respuesta. **/ //Procesamos la respuesta if(respuesta.tipo == "Respuesta" && respuesta.total == 1) { this.imagenProducto = respuesta.lista[0]['imagen']; $("#imagenSubcategoriaProducto").attr("src",this.imagenProducto); } } this.postBuscarPrecio = function(respuesta) { /**- Función que procesa el resultado de una petición. @param respuesta, Objeto Respuesta. **/ //Procesamos la respuesta if(respuesta.tipo == "Respuesta" && respuesta.total > 0) { this.precioConIVA = respuesta.lista['precioConIVA']; this.precioConIVAUnidad = respuesta.lista['precioConIVAUnidad']; this.precioConIVADescuento = respuesta.lista['precioConIVADescuento']; this.precioConIVADescuentoUnidad = respuesta.lista['precioConIVADescuentoUnidad']; this.precioConIVADiseno = respuesta.lista['precioConIVADiseno']; this.precioConIVADisenoUnidad = respuesta.lista['precioConIVADisenoUnidad']; this.precioConIVAPersonalizado = respuesta.lista['precioConIVAPersonalizado']; this.precioConIVAPersonalizadoUnidad = respuesta.lista['precioConIVAPersonalizadoUnidad']; this.precioConIVADescuentoDiseno = respuesta.lista['precioConIVADescuentoDiseno']; this.precioConIVADescuentoDisenoUnidad = respuesta.lista['precioConIVADescuentoDisenoUnidad']; this.precioConIVADescuentoPersonalizado = respuesta.lista['precioConIVADescuentoPersonalizado']; this.precioConIVADescuentoPersonalizadoUnidad = respuesta.lista['precioConIVADescuentoPersonalizadoUnidad']; this.precioConIVADisenoPersonalizado = respuesta.lista['precioConIVADisenoPersonalizado']; this.precioConIVADisenoPersonalizadoUnidad = respuesta.lista['precioConIVADisenoPersonalizadoUnidad']; this.precioConIVADescuentoDisenoPersonalizado = respuesta.lista['precioConIVADescuentoDisenoPersonalizado']; this.precioConIVADescuentoDisenoPersonalizadoUnidad = respuesta.lista['precioConIVADescuentoDisenoPersonalizadoUnidad']; this.precioSinIVA = respuesta.lista['precioSinIVA']; this.precioSinIVAUnidad = respuesta.lista['precioSinIVAUnidad']; this.precioSinIVADescuento = respuesta.lista['precioSinIVADescuento']; this.precioSinIVADescuentoUnidad = respuesta.lista['precioSinIVADescuentoUnidad']; this.precioSinIVADiseno = respuesta.lista['precioSinIVADiseno']; this.precioSinIVADisenoUnidad = respuesta.lista['precioSinIVADisenoUnidad']; this.precioSinIVAPersonalizado = respuesta.lista['precioSinIVAPersonalizado']; this.precioSinIVAPersonalizadoUnidad = respuesta.lista['precioSinIVAPersonalizadoUnidad']; this.precioSinIVADescuentoDiseno = respuesta.lista['precioSinIVADescuentoDiseno']; this.precioSinIVADescuentoDisenoUnidad = respuesta.lista['precioSinIVADescuentoDisenoUnidad']; this.precioSinIVADescuentoPersonalizado = respuesta.lista['precioSinIVADescuentoPersonalizado']; this.precioSinIVADescuentoPersonalizadoUnidad = respuesta.lista['precioSinIVADescuentoPersonalizadoUnidad']; this.precioSinIVADisenoPersonalizado = respuesta.lista['precioSinIVADisenoPersonalizado']; this.precioSinIVADisenoPersonalizadoUnidad = respuesta.lista['precioSinIVADisenoPersonalizadoUnidad']; this.precioSinIVADescuentoDisenoPersonalizado = respuesta.lista['precioSinIVADescuentoDisenoPersonalizado']; this.precioSinIVADescuentoDisenoPersonalizadoUnidad = respuesta.lista['precioSinIVADescuentoDisenoPersonalizadoUnidad']; this.actualizarCondicionesProducto(); $("#btn_calculando").hide(); $("#visual-price").show(); } else { iu.comunicarMio(respuesta.valor,respuesta.mensaje,"productos"); } } this.postBuscarProducto = function(respuesta) { /**- Función que procesa la respuesta de una petición ajax asíncrona. @respuesta, Objeto Respuesta con los resultados de la petición. **/ if(respuesta.tipo == "Respuesta" && respuesta.total > 0) { this.pesoProducto = respuesta.lista[0].peso; $("#pesoProducto").val(this.pesoProducto); this.defectoProducto = respuesta.lista[0].defecto; $("#defectoProducto").val(this.defectoProducto); this.hayStock = respuesta.lista[0].stock; $("#hayStockProducto").val(this.hayStock); this.nombreProducto = respuesta.lista[0].nombreProducto; $("#nombreProducto").val(respuesta.lista[0].nombreProducto); this.idProductoStock = respuesta.lista[0].idproductostock; $("#idProductoStock").val(respuesta.lista[0].idproductostock); this.textoNombreSeo = respuesta.lista[0].textoNombreSeo; } } this.postBuscarProductoEspanol = function(respuesta) { /**- Función que procesa la respuesta de una petición ajax asíncrona. @respuesta, Objeto Respuesta con los resultados de la petición. **/ if(respuesta.tipo == "Respuesta" && respuesta.total > 0) { $("#nombreProducto_es").val(respuesta.lista[0].nombreProducto); } } this.postCargarCarrito = function(respuesta) { /**- Función que procesa la respuesta de una petición ajax asíncrona. @respuesta, Objeto Respuesta con los resultados de la petición. **/ if(respuesta.tipo == "Respuesta" && respuesta.total > 0) { this.carrito = respuesta.lista; } else { this.carrito = null; } } this.postCargarCategorias = function(respuesta) { /**- Función que procesa la respuesta de una petición ajax asíncrona. @respuesta, Objeto Respuesta con los resultados de la petición. **/ if(respuesta.tipo == "Respuesta" && respuesta.total > 0) { //Cargamos las variables de clase de lós paneles this.categorias = respuesta.lista; this.contadorCarga++; //Calculamos los precios con la cantidad de productos mínima. if(this.contadorCarga == 7) this.calcularPrecio(); } else this.categorias = null; } this.postCargarCaracteristicas = function(respuesta) { /**- Función que procesa la respuesta de una petición ajax asíncrona. @respuesta, Objeto Respuesta con los resultados de la petición. **/ if(respuesta.tipo == "Respuesta" && respuesta.total > 0) { //Cargamos las variables de clase de lós paneles this.caracteristicas = respuesta.lista; this.totalCaracteristicas = respuesta.total; this.contadorCarga++; //Calculamos los precios con la cantidad de productos mínima. if(this.contadorCarga == 7) this.calcularPrecio(); } else { this.caracteristicas = null; this.totalCaracteristicas = 0; } } this.postCargarImagenesSubcategorias = function(respuesta) { /**- Función que procesa la respuesta de una petición ajax asíncrona. @respuesta, Objeto Respuesta con los resultados de la petición. **/ if(respuesta.tipo == "Respuesta" && respuesta.total > 0) { //Cargamos las variables de clase de lós paneles this.imagenesSubcategorias = respuesta.lista; } else this.imagenesSubcategorias = null; } this.postCargarImagenesProductos = function(respuesta) { /**- Función que procesa la respuesta de una petición ajax asíncrona. @respuesta, Objeto Respuesta con los resultados de la petición. **/ if(respuesta.tipo == "Respuesta" && respuesta.total > 0) { //Cargamos las variables de clase de lós paneles this.imagenesProductos = respuesta.lista; this.dibujarImagenesProductos(); } else this.imagenesProductos = null; } this.postCargarPrecioNDiseno = function(respuesta) { /**- Función que procesa la respuesta de un apetición ajax asíncrona. @respuesta, Objeto Respuesta con los resultados de la petición. **/ if(respuesta.tipo == "Respuesta" && respuesta.total > 0) { //Cargamos las variables de clase. this.preciosNDiseno = respuesta.lista; this.contadorCarga++; if(this.contadorCarga == 7) this.calcularPrecio(); } else this.preciosNDiseno = null; } this.postCargarPreciosRangosMetro = function(respuesta) { /**- Función que procesa la respuesta de una petición ajax asíncrona. @respuesta, objeto Respuesta. **/ if(respuesta.tipo == "Respuesta" && respuesta.total > 0) { this.preciosRangosMetro = respuesta.lista; this.totalPreciosRangosMetro = respuesta.total; this.maximoRangoMetro = respuesta.lista[((respuesta.total)-1)].maximo; this.minimoRangoMetro = respuesta.lista[0].minimo; var ancho = $("#ancho").val(); var alto = $("#alto").val(); if(this.idProducto == 198) { if(ancho.length == 0) $("#ancho").val(70); if(alto.length == 0) $("#alto").val(70); } else { if(ancho.length == 0) $("#ancho").val(50); if(alto.length == 0) $("#alto").val(50); } this.controlHabilitarDeshabilitar(); this.contadorCarga++; //Buscamos los precios if(this.contadorCarga == 7) this.calcularPrecio(); } else { this.preciosRangosMetro = null; this.totalPreciosRangosMetro = 0; $("#ancho").val(""); $("#alto").val(""); this.controlHabilitarDeshabilitar(); this.contadorCarga++; //Buscamos los precios if(this.contadorCarga == 7) this.calcularPrecio(); } } this.postCargarProductos = function(respuesta) { /**- Función que procesa la respuesta de una petición ajax asíncrona. @respuesta, Objeto Respuesta con los resultados de la petición. **/ if(respuesta.tipo == "Respuesta" && respuesta.total > 0) { //Cargamos las variables de clase de lós paneles this.productos = respuesta.lista; this.contadorCarga++; //Calculamos los precios con la cantidad de productos mínima. if(this.contadorCarga == 7) this.calcularPrecio(); } else this.productos = null; } this.postCargarSubcategorias = function(respuesta) { /**- Función que procesa la respuesta de una petición ajax asíncrona. @respuesta, Objeto Respuesta con los resultados de la petición. **/ if(respuesta.tipo == "Respuesta" && respuesta.total > 0) { //Cargamos las variables de clase de lós paneles this.subcategorias = respuesta.lista; this.contadorCarga++; //Calculamos los precios con la cantidad de productos mínima. if(this.contadorCarga == 7) this.calcularPrecio(); } else this.subcategorias = null; } this.postCargarValoresCaracteristicas = function(respuesta) { /**- Función que procesa la respuesta de una petición ajax asíncrona. @respuesta, Objeto Respuesta con los resultados de la petición. **/ if(respuesta.tipo == "Respuesta" && respuesta.total > 0) { //Cargamos las variables de clase de lós paneles this.valores = respuesta.lista; this.contadorCarga++; //Calculamos los precios con la cantidad de productos mínima. if(this.contadorCarga == 7) this.calcularPrecio(); } else this.valores = null; } this.postGuardarPresupuesto = function(respuesta) { /**- Función que procesa el resultado de una petición asíncrona. @param respuesta, Objeto Resultado. **/ if(respuesta.tipo == "Resultado" && respuesta.valor == "Ok") { eco_productos.idPresupuesto = respuesta.idregistro; eco_productos.enviarMailPresupuesto(); $("#presupuestoModal").hide(); } else { //Ocultamos el modal y mostramos error $("#presupuestoModal").hide(); iu.comunicarMio(respuesta.valor, respuesta.mensaje,"productos"); } } } var eco_productos = new Productos(); $(document).ready(function(){ eco_productos.iniciar(); $(document).on('click', function(){ $('.listado-paises:visible').hide(); // cierra todos los dropdowns abiertos }); $("#aceptarBotonQueEsEstoProducto").click(function(){ $("#patrocinio").prop("checked",true); $("#que-es-esto").modal("hide"); eco_productos.actualizarCondicionesProducto(); }); $("#aceptarBtnPersonalizacionIndividual").click(function(){ $("#personalizacion").prop("checked",true); $("#personalizacion-individual").modal("hide"); eco_productos.actualizarCondicionesProducto(); }); $(".activo.pais").click(function(e) { e.stopPropagation(); var partesId = e.currentTarget.classList[2].split("_"); var idCaracteristica = partesId[1]; var $actual = $(".listado-paises_" + idCaracteristica); $(".listado-paises").not($actual).hide(); $actual.toggle(); }); $("#alto").change(function() { $("#medidas-error-minimas").hide(); }); $("#ancho").change(function() { $("#medidas-error-minimas").hide(); }); $("#btn_carrito").click(function(){ $("#btn_calculando").hide(); $("#btn_carrito").prop("disabled",true); eco_productos.anadirProductoSesion(); setTimeout(function(){ $("#btn_carrito").prop("disabled",false); },1000); }); $("#btn_enviarMailPresupuesto").click(function(){ eco_productos.enviarMailPresupuesto(); }); $("#btn-mas-cantidadProducto").click(function(){ $("#btn_carrito").prop("disabled",true); $("#btn_carrito").hide(); $("#btn_calculando").show(); eco_productos.actualizarPrecio("cantidad","mas"); }); $("#btn-mas-disenhoProducto").click(function(){ $("#btn_carrito").prop("disabled",true); $("#btn_carrito").hide(); $("#btn_calculando").show(); eco_productos.actualizarPrecio("ndesigns","mas"); }); $("#btn-menos-cantidadProducto").click(function(){ $("#btn_carrito").prop("disabled",true); $("#btn_carrito").hide(); $("#btn_calculando").show(); eco_productos.actualizarPrecio("cantidad","menos"); }); $("#btn-menos-disenhoProducto").click(function(){ $("#btn_carrito").prop("disabled",true); $("#btn_carrito").hide(); $("#btn_calculando").show(); eco_productos.actualizarPrecio("ndesigns","menos"); }); $("#btn_presupuesto").click(function(){ eco_productos.modalPresupuesto(); }); $("#diseno").change(function(){ eco_productos.actualizarCondicionesProducto(); }); $("#enlaceModalImagenesCierresPulseras").click(function(){ iu.comunicarMio("","
Sin cierre Ajustable bola
Ajustable bola
Ajustable metálico
Ajustable metálico
Ajustable muelle
Ajustable muelle
Seguridad plástico
Seguridad plástico
Seguridad metal
Seguridad metal
Económica / Satinada 10mm
Económica / Satinada 15mm
Económica / Satinada 20mm
Gruesa 10mm
Gruesa 15mm
Gruesa 20mm
","productos"); }); $("#patrocinio").change(function(){ if($("#patrocinio").prop("checked")) { if(window.innerWidth < 992) { $('html, body').animate({ scrollTop: $("#patrocinio").offset().top - 500 }); } $("#que-es-esto").modal("show"); } $("#patrocinio").prop("checked",false); eco_productos.actualizarCondicionesProducto(); }); $("#personalizacion").change(function(){ if($("#personalizacion").prop("checked")) { if(window.innerWidth < 992) { $('html, body').animate({ scrollTop: $("#patrocinio").offset().top - 500 }); } $("#personalizacion-individual").modal("show"); } $("#personalizacion").prop("checked",false); eco_productos.actualizarCondicionesProducto(); }); });