From fe1376438e1215153fd17f764f70a434d2963229 Mon Sep 17 00:00:00 2001 From: Chloe Herd Date: Wed, 24 Jan 2024 10:24:40 -0500 Subject: [PATCH] Collate & Push info to data layer on confirmation enter --- src/layouts/confirmation/confirmation.vue | 2 + src/mixins/analytics-mixin.js | 76 +++++++++++++++++++++++ 2 files changed, 78 insertions(+) diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue index 2724dbcb6..92a86e609 100644 --- a/src/layouts/confirmation/confirmation.vue +++ b/src/layouts/confirmation/confirmation.vue @@ -75,6 +75,7 @@ import cart from "@/fmg-components/cart/cart"; //Supporting files import baseMixin from "@/mixins/base-mixin.js"; +import analyticsMixin from "@/mixins/analytics-mixin"; import store from "@/store"; import { storeActions } from "@/constants/store-actions"; import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; @@ -134,6 +135,7 @@ export default { vm.setCmsContent(resultMap.cmsContent); vm.lineItems = lineItemsFromSubmittedOrder; vm.vaps = availableVaps; + analyticsMixin.methods.pushSubmittedOrderToDataLayer(); }); }, data() { diff --git a/src/mixins/analytics-mixin.js b/src/mixins/analytics-mixin.js index 3f20adb59..36b5f619f 100644 --- a/src/mixins/analytics-mixin.js +++ b/src/mixins/analytics-mixin.js @@ -21,6 +21,7 @@ import { GaEvents, ValueToLogTypes, } from "@/constants/analytics"; +import { AppointmentTypeStrings } from "@/constants/schedule-constants"; import store from "@/store"; import baseMixin from "@/mixins/base-mixin"; @@ -119,6 +120,81 @@ export default { await this.logPageView(analyticsPageEvents.ENTRY); }, + pushSubmittedOrderToDataLayer() { + // check if submitted order exists; exit if not. + const hasSubmittedOrder = store.getters.hasSubmittedOrder; + + if (!hasSubmittedOrder) { + return; + } + + const order = store.getters.submittedOrder; + + // assemble data for payload + // // reduce promocode array + const promos = order.lineItems.promos ?? []; + const promoString = + promos.length === 0 ? "" : promos.reduce((prev, next) => `${prev},${next}`); + + // // reduce glass array + const glassToReplace = order.damage.glassToReplace ?? []; + const glassToReplaceNames = glassToReplace.map( + (glassPiece) => `${glassPiece.glassLocation}/${glassPiece.glassName}` + ); + const glassString = + glassToReplaceNames.length === 0 + ? "" + : glassToReplaceNames.reduce((prev, next) => `${prev},${next}`); + + // // calculate subtotal + const lineItems = order.lineItems; + const combinedLineItems = [ + ...(lineItems.glassParts ?? []), + ...(lineItems.supportingItems ?? []), + ...(lineItems.vaps ?? []), + ...(lineItems.promos ?? []), + ]; + const subtotal = baseMixin.methods.getTotalPriceOfAllLineItemsAndChildParts( + combinedLineItems, + false + ); + + // // get correct zip code + const providerZip = order.serviceLocation.provider.address.zipCode; + const serviceZip = + order.serviceLocation.appointmentType === AppointmentTypeStrings.MOBILE + ? order.serviceLocation.zipCode + : providerZip; + + // // calculate total + const total = baseMixin.methods.getTotalPriceOfAllLineItemsAndChildParts( + combinedLineItems, + true + ); + + const payload = { + serviceZipCode: serviceZip, + damage: order.damage.isRepair ? "repair" : "replace", + accountType: order.payment.isInsurance ? "insurance" : "cash", + promoCodes: promoString, + vehicleYear: order.vehicle.year, + vehicleMake: order.vehicle.make, + vehicleModel: order.vehicle.model, + vehicleStyle: order.vehicle.style, + glassToReplace: glassString, + workOrderId: order.workOrderId, + providerCtu: order.serviceLocation.zipCodeCtu, + orderNumber: order.workOrderNumber, + priceTotal: total, + priceSubTotal: subtotal, + isRecalibrationOnOrder: store.getters.isRecalibrationOnSubmittedOrder, + appointmentType: order.serviceLocation.appointmentType, + }; + + // push to data layer. + pushToDataLayerIfDefined(payload); + }, + pushExperimentsToDataLayer() { const experiments = store.getters.applicationUser.experiments; experiments?.forEach((exp) => {