function getBasicDatalayer(dataLayerP4) { var dataLayer = jQuery.extend({}, dataLayerP4); if (dataLayer.impressions) delete dataLayer.impressions; if (dataLayer.products) delete dataLayer.products; if (typeof getCustomDatalayer == "function") { return getCustomDatalayer(dataLayerP4, null, null); } return dataLayer; } function buildEcommerce(dataLayerP4, step, option) { setAdvisorCurrency(dataLayerP4); var ecommerceDl = { 'ecommerce': { 'currencyCode': getCurrencyCode(), } }; if (dataLayerP4.impressions) { ecommerceDl.ecommerce.impressions = buildImpressions(dataLayerP4); } if (dataLayerAction == "checkout") { ecommerceDl.ecommerce.checkout = { 'actionField' : { 'step' : step, 'option' : option }, 'products': buildProductsFromDatalayer(dataLayerP4) }; } if (dataLayerAction == "transaction_complete") { ecommerceDl.ecommerce.purchase = { 'actionField': { 'id': dataLayerP4.transactionId, 'revenue': dataLayerP4.totalPrice, 'tax': dataLayerP4.totalFee }, 'products': buildProductsFromDatalayer(dataLayerP4) }; if (dataLayerP4.affiliateId) purchaseDL.ecommerce.purchase.actionField.affiliation = dataLayerP4.affiliateId; if (dataLayerP4.coupon) purchaseDL.ecommerce.purchase.actionField.coupon = dataLayerP4.coupon; } if (typeof getCustomDatalayer == "function") { return getCustomDatalayer(dataLayerP4, 0, null); } return ecommerceDl; } /** * Generates the necessary events for web analytics based on the dataLayerAction * @param dataLayerP4 * @param step * @param option */ function pushEcommerce(dataLayerP4, step, option) { setAdvisorCurrency(dataLayerP4); if (dataLayerAction === "event_landing") { var prodView = buildProductsFromDatalayer(dataLayerP4); dataLayer.push({ event: 'view_item', ecommerce: { items: { 'id': dataLayerP4.eventId, 'name': dataLayerP4.eventName, 'category': dataLayerP4.venue, 'provider': dataLayerP4.provider, 'promoter': dataLayerP4.promoter, 'actionField': { 'id': dataLayerP4.eventId, 'name': dataLayerP4.eventName, 'category': dataLayerP4.venue, 'provider': dataLayerP4.provider, 'promoter': dataLayerP4.promoter, }, 'products': prodView } } }); } else if (dataLayerAction === "checkout") { var prodCheckout = buildProductsFromDatalayer(dataLayerP4); dataLayer.push({ event: "begin_checkout", ecommerce: { items: { 'actionField': { 'step': step, 'option': option, }, 'products': prodCheckout } } }); } else if (dataLayerAction === "transaction_complete") { var prodPurchase = buildProductsFromDatalayer(dataLayerP4); dataLayer.push({ event: "purchase", ecommerce: { id: dataLayerP4.transactionId, currency: dataLayerP4.advisorCurrency, value: dataLayerP4.totalPrice, shipping: dataLayerP4.totalFee, items: { 'actionField': { 'id': dataLayerP4.transactionId, 'revenue': dataLayerP4.totalPrice, 'tax': dataLayerP4.totalFee, 'products': prodPurchase }, 'products': prodPurchase } } }); } } /** * Genera el DataLayer para un determinado paso de compra * @param dataLayerP4 * @param step * @param option * @returns checkoutDL */ function generarCheckout(dataLayerP4, step, option, sale) { setAdvisorCurrency(dataLayerP4); if (!dataLayerP4.products) { dataLayerP4.products = buildProductsFromDatalayer(dataLayerP4); } else if (sale) { dataLayerP4.products = buildProductsFromSale(dataLayerP4, sale); } if (typeof getCustomDatalayer == "function") { return getCustomDatalayer(dataLayerP4, step, sale); } return [ {event: 'checkout'}, { 'ecommerce' : { 'checkout' : { 'actionField' : { 'step' : step, 'option' : option }, 'products': dataLayerP4.products } } } ]; } /** * Builds impressions for data layer's ecommerce * @param dataLayerP4 * @returns */ function buildImpressions(dataLayerP4) { if (dataLayerP4.impressions) { var impressions = new Array(); for (var i in dataLayerP4.impressions) { var impression = dataLayerP4.impressions[i]; impressions[i] = { 'name': impression.name, 'id': impression.id, 'price': impression.price, 'brand': impression.brand, 'category': impression.category, 'variant': impression.variant }; } return impressions; } return null; } function buildProductClick(sale) { if (sale != null) { var selectedProducts = []; let detalle = null; if (typeof sale.entradasSeleccionadas != 'undefined' && sale.entradasSeleccionadas != null) { detalle = sale.entradasSeleccionadas; } else if (typeof sale.detalle != 'undefined' && sale.detalle != null) { detalle = sale.detalle; } if (detalle != null) { for (var i in detalle) { var prod = detalle[i]; selectedProducts.push({ 'name': prod.litEvento, 'id': prod.idEvento, 'price': prod.importe, 'brand': prod.litRecinto, // 'category': 'Apparel', 'variant': prod.litProducto, 'quantity': prod.cantidad, 'dimension1' : prod.idSesion, 'metric1' : prod.importeComisionUsuario, }); } var productClick = { 'event': 'productClick', 'ecommerce': { 'currencyCode': getCurrencyCode(), 'click': { 'products': selectedProducts } } } } return productClick; } return null; } /** * Construye los productos para el DataLayer en un proceso de compra * @param dataLayerP4 * @returns products */ function buildProductsFromDatalayer(dataLayerP4) { var products = []; if (dataLayerP4.products) { for (let i = 0; i