const send_to_search = ['G-NX4B8F5W4Y']; const send_to_view_item_list = ['G-NX4B8F5W4Y']; const send_to_select_item = ['G-NX4B8F5W4Y']; const send_to_view_item = ['G-NX4B8F5W4Y']; const send_to_add_to_cart = ['G-NX4B8F5W4Y']; const send_to_view_cart = ['G-NX4B8F5W4Y']; const send_to_remove_from_cart = ['G-NX4B8F5W4Y']; const send_to_begin_checkout = ['G-NX4B8F5W4Y']; const send_to_purchase = ['G-NX4B8F5W4Y']; const currency = "EUR"; const cem_ses_beg_checkout = parseInt("0"); const cem_ses_purchase = parseInt("0"); // Al hacer una búsqueda const handleSearch = function () { const data = { send_to: send_to_search, search_term: $('#cem-search-term').val() || '', search_origin: $('#cem-search-origin').val() || '', } console.log('Evento search'); console.log(data); gtag("event", "search", data); } // Al ver un listado de productos const handleViewItemList = function () { const contenedorProductos = document.getElementById('listado-productos'); if (contenedorProductos) { const elementosProducto = contenedorProductos.querySelectorAll('.producto'); const data = { send_to: send_to_view_item_list, item_list_id: $('#cem-item-list-id').val() || '', item_list_name: $('#cem-item-list-name').val() || '', items: [], }; elementosProducto.forEach(function (elementoProducto, index) { const item = { index: index, item_id: $(elementoProducto).find('.cem-item-id').val() || '', item_name: $(elementoProducto).find('.cem-item-name').val() || '', item_brand: $(elementoProducto).find('.cem-item-brand').val() || '', price: $(elementoProducto).find('.cem-price').val() || '', }; data.items.push(item); }); console.log('Evento view item list'); console.log(data); gtag('event', 'view_item_list', data); } }; // Al seleccionar un producto del listado const handleSelectItem = function (elementoProducto, event_callback) { const data = { send_to: send_to_select_item, item_list_id: $('#cem-item-list-id').val() || '', item_list_name: $('#cem-item-list-name').val() || '', items: [ { index: $(elementoProducto).index(), item_id: $(elementoProducto).find('.cem-item-id').val() || '', item_name: $(elementoProducto).find('.cem-item-name').val() || '', price: $(elementoProducto).find('.cem-price').val() || '' } ] }; if (event_callback) { data.event_callback = event_callback; } console.log('Evento select item'); console.log(data); gtag("event", "select_item", data); }; // Al entrar en la ficha de un producto const handleViewItem = function () { const elementoProducto = $('#producto'); const price = $(elementoProducto).find('.cem-price').val().replace(',', '.'); const data = { send_to: send_to_view_item, currency, value: price, items: [ { // No podemos enviar el item_list_id y el item_list_name porque // por el cambio que ha hecho recambium no se arrastra. index: 0, item_list_id: '', item_list_name: '', item_id: $(elementoProducto).find('.cem-item-id').val() || '', item_name: $(elementoProducto).find('.cem-item-name').val() || '', item_brand: $(elementoProducto).find('.cem-item-brand').val() || '', price: price || '' } ] }; console.log('Evento view item'); console.log(data); gtag("event", "view_item", data); }; // Cesta // Al entrar en la cesta const handleViewCart = function () { const lineasCesta = $('.cesta .linea-cesta:not(.cesta-vacia)'); if (lineasCesta.length === 0) { return; } const data = { send_to: send_to_view_cart, currency, value: $('#cem-value').val() || '', items: [], } lineasCesta.each(function () { const item = { item_id: $(this).find('.cem-item-id').val() || '', item_name: $(this).find('.cem-item-name').val() || '', price: $(this).find('.cem-price').val() || '', quantity: $(this).find('.cem-quantity').val() || '', }; data.items.push(item); }); console.log('Evento view cart'); console.log(data); gtag('event', 'view_cart', data); }; // Al añadir un producto al carrito const handleAddToCart = function (params) { const { elementoProducto, index, quantity, event_callback } = params; const item = { index, item_id: $(elementoProducto).find('.cem-item-id').val() || '', item_name: $(elementoProducto).find('.cem-item-name').val() || '', item_brand: $(elementoProducto).find('.cem-item-brand').val() || '', item_list_id: $('#cem-item-list-id').val() || '', item_list_name: $('#cem-item-list-name').val() || '', price: $(elementoProducto).find('.cem-price').val().replace(',', '.') || '', quantity, }; const data = { send_to: send_to_add_to_cart, currency, value: $(elementoProducto).find('.cem-value').val().replace(',', '.') || '', items: [item] } if (event_callback) { data.event_callback = event_callback; } console.log('Evento add to cart'); console.log(data); gtag("event", "add_to_cart", data); } // Al eliminar un producto del carrito const handleVaciarCesta = function (event_callback) { const data = { send_to: send_to_remove_from_cart, currency, value: $('#cem-value').val() || '', items: obtenerTodosLosProductosDeCesta(), } if (event_callback) { data.event_callback = event_callback; } console.log('Evento remove from cart'); console.log(data); gtag("event", "remove_from_cart", data); } const handleRemoveFromCart = function (params) { let { elementoProducto, quantity, event_callback } = params; // pasamos quantity a positivo en caso de que sea negativo quantity = Math.abs(quantity); const data = { send_to: send_to_remove_from_cart, currency, value: $(elementoProducto).find('.cem-value').val() || '', items: [ { item_id: $(elementoProducto).find('.cem-item-id').val() || '', item_name: $(elementoProducto).find('.cem-item-name').val() || '', price: $(elementoProducto).find('.cem-price').val() || '', quantity, } ] }; if (event_callback) { data.event_callback = event_callback; } console.log('Evento remove from cart'); console.log(data); gtag("event", "remove_from_cart", data); }; // Al iniciar el proceso de pago const handleBeginCheckout = function (params) { if (cem_ses_beg_checkout !== 0) { if (params && params.event_callback) { params.event_callback(); } return; } let { event_callback } = params || {}; const data = { send_to: send_to_begin_checkout, currency, value: $('#cem-value').val() || '', items: obtenerTodosLosProductosDeCesta(), }; let wrapperEjecutado = false; const ejecutarServletYCallback = function() { if (!wrapperEjecutado) { wrapperEjecutado = true; llamarServletTramitarPedido(function() { if (event_callback) { event_callback(); } }); } }; // Callback de seguridad por si gtag tarda o es bloqueado por un adblocker const safetyTimeout = setTimeout(ejecutarServletYCallback, 250); data.event_callback = function() { clearTimeout(safetyTimeout); ejecutarServletYCallback(); }; console.log('Evento begin checkout'); console.log(data); gtag("event", "begin_checkout", data); }; // Al realizar una compra const handlePurchase = function (params) { if (!cem_data || cem_ses_purchase !== 0) { if (params && params.event_callback) { params.event_callback(); } return; } let { event_callback } = params || {}; const items = (cem_data["cem-items"] || []).map(function(item) { return { item_id: item["cem-item-id"] || '', item_name: item["cem-item-name"] || '', item_brand: item["cem-item-brand"] || '', price: item["cem-price"] || '', quantity: item["cem-quantity"] || '' }; }); const data = { send_to: send_to_purchase, transaction_id: cem_data["cem-transaction-id"], currency, value: cem_data["cem-value"], shipping: cem_data["cem-shipping"], tax: cem_data["cem-tax"], items: items, }; let wrapperEjecutado = false; const ejecutarServletYCallback = function() { if (!wrapperEjecutado) { wrapperEjecutado = true; llamarServletFinalizarPedido(function() { if (event_callback) { event_callback(); } }); } }; // Callback de seguridad por si gtag tarda o es bloqueado por un adblocker const safetyTimeout = setTimeout(ejecutarServletYCallback, 250); data.event_callback = function() { clearTimeout(safetyTimeout); ejecutarServletYCallback(); }; console.log('Evento purchase'); console.log(data); gtag("event", "purchase", data); }; // Helpers const obtenerTodosLosProductosDeCesta = function () { const productos = []; $('.cesta .linea-cesta:not(.cesta-vacia)').each(function () { const producto = { item_id: $(this).find('.cem-item-id').val() || '', item_name: $(this).find('.cem-item-name').val() || '', price: $(this).find('.cem-price').val() || '', quantity: $(this).find('.cem-quantity').val() || '', }; productos.push(producto); }); return productos; } const ejecutarAccionYNavegar = function (url, accionSeguimiento, accionPostSeguimiento) { const navegar = function() { window.location.href = url; }; let timeoutSeguridadLimpiado = false; // Callback de seguridad por si falla la red o Analytics tarda en responder const timeoutSeguridad = setTimeout(function() { if (!timeoutSeguridadLimpiado) { timeoutSeguridadLimpiado = true; if (accionPostSeguimiento) { accionPostSeguimiento(navegar); } else { navegar(); } } }, 250); const alCompletarSeguimiento = function() { if (!timeoutSeguridadLimpiado) { clearTimeout(timeoutSeguridad); timeoutSeguridadLimpiado = true; if (accionPostSeguimiento) { accionPostSeguimiento(navegar); } else { navegar(); } } }; accionSeguimiento(alCompletarSeguimiento); }; const llamarServletTramitarPedido = function (alCompletar) { $.ajax({ dataType: "json", type: "POST", url: "ControlB2C_2", data: { tabla: 10, estado: 1 }, timeout: 1500, // Evitar bloqueo indefinido si falla el servidor complete: function() { alCompletar(); } }); }; const llamarServletFinalizarPedido = function (alCompletar) { $.ajax({ dataType: "json", type: "POST", url: "ControlB2C_2", data: { tabla: 10, estado: 2 }, timeout: 1500, // Evitar bloqueo indefinido si falla el servidor complete: function() { if (alCompletar) { alCompletar(); } } }); }; // Eventos $(document).on('click', '.cem-link-producto', function (event) { event.preventDefault(); // Sacamos el elementoProducto que es el padre con la clase producto const elementoProducto = $(this).closest('.producto'); const url = $(this).attr('href'); ejecutarAccionYNavegar(url, function (alCompletar) { handleSelectItem(elementoProducto, alCompletar); }); }); $(document).on('click', '#btn-tramitar-pedido', function(event) { if (cem_ses_beg_checkout !== 0) { return; } event.preventDefault(); const url = $(this).attr('href'); const navegar = function() { window.location.href = url; }; handleBeginCheckout({ event_callback: navegar }); });