diff --git a/src/layouts/quote/afterpay-modal-banner/afterpay-modal-banner.vue b/src/layouts/quote/afterpay-modal-banner/afterpay-modal-banner.vue index 512d0f577..bf9433301 100644 --- a/src/layouts/quote/afterpay-modal-banner/afterpay-modal-banner.vue +++ b/src/layouts/quote/afterpay-modal-banner/afterpay-modal-banner.vue @@ -30,7 +30,7 @@ import { splitCopyOnCMSPlaceHolder } from "@/helpers/cms-content-helper"; import baseMixin from "@/mixins/base-mixin.js"; import { getPromosThatMatchLineItemsOnOrder } from "@/helpers/promotions-helper"; -import { getArrayOfAllLineItems } from "@/store"; +import { getArrayOfAllLineItemsAndChildParts } from "@/store"; const INLINE_IMAGE_TOKEN = "custom:inlineImage"; const AFTERPAY_PRICE_TOKEN = "custom:afterpayPrice"; @@ -76,7 +76,7 @@ export default { return this.getCmsContent(this.cmsWidgetName, "SubheaderText"); }, afterpayPrice() { - let allLineItems = getArrayOfAllLineItems(this.lineItems); + let allLineItems = getArrayOfAllLineItemsAndChildParts(this.lineItems); if (this.lineItems.promos) { allLineItems = allLineItems?.filter((item) => item.partType !== "PROMO_DISCOUNT"); } @@ -91,7 +91,7 @@ export default { }); if (this.lineItems.promos) { - let allLineItems = getArrayOfAllLineItems(this.lineItems); + let allLineItems = getArrayOfAllLineItemsAndChildParts(this.lineItems); const promos = getPromosThatMatchLineItemsOnOrder( this.lineItems.promos, allLineItems diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue index cfd51dc8b..6b67561ec 100644 --- a/src/layouts/quote/quote.vue +++ b/src/layouts/quote/quote.vue @@ -337,17 +337,10 @@ export default { experimentSettings.INSURANCE_TAB_TO_DISPLAY_THRESHOLD_INTERNAL ); - if (!store.getters.externalParameterState?.isExternalParameter) { - // there are no external parameters + const isExternalParameter = store.getters.externalParameterState?.isExternalParameter; - if (internalThreshold) thresholdToUse = internalThreshold; - vm.isInsuranceSelected = getIsInsuranceSelectedValue( - vm.availableLineItems, - thresholdToUse - ); - baseMixin.methods.ResetExternalParamsAndHideModal(); - } else { - // there ARE external parameters + if (isExternalParameter !== undefined) { + // user is from an external source (either has value or is null) if (store.getters.externalParameterQuote.isInsurance == true) { // did user intentionally select insurance? @@ -361,26 +354,26 @@ export default { baseMixin.methods.ResetExternalParamsAndHideModal(); } } else { - // did user come from external source (LeadGen)? - let externalSource = store.getters.externalParameterSource - ? store.getters.externalParameterSource - : null; + const externalThreshold = experimentMixin.methods.getSettingValue( + experimentSettings.INSURANCE_TAB_TO_DISPLAY_THRESHOLD_EXTERNAL + ); + thresholdToUse = externalThreshold; - // Business logic to determine what "external" source is - if (externalSource?.includes("LeadGen")) { - const externalThreshold = experimentMixin.methods.getSettingValue( - experimentSettings.INSURANCE_TAB_TO_DISPLAY_THRESHOLD_EXTERNAL - ); - if (externalThreshold) thresholdToUse = externalThreshold; - } else { - if (internalThreshold) thresholdToUse = internalThreshold; - } vm.isInsuranceSelected = getIsInsuranceSelectedValue( vm.availableLineItems, thresholdToUse ); baseMixin.methods.ResetExternalParamsAndHideModal(); } + } else { + // there are no external parameters; use internal threshold + if (internalThreshold) thresholdToUse = internalThreshold; + + vm.isInsuranceSelected = getIsInsuranceSelectedValue( + vm.availableLineItems, + thresholdToUse + ); + baseMixin.methods.ResetExternalParamsAndHideModal(); } }); }, diff --git a/src/layouts/service-location/shop-question/shop-question.vue b/src/layouts/service-location/shop-question/shop-question.vue index d77a7eb04..a15d8bb0b 100644 --- a/src/layouts/service-location/shop-question/shop-question.vue +++ b/src/layouts/service-location/shop-question/shop-question.vue @@ -167,7 +167,10 @@ export default { if (logFirstShopsDisplayed) { gaAction = this.GaActions.SHOPS_FIRST_DISPLAYED; } - if (this.selectedAppointmentType === AppointmentTypeStrings.IN_SHOP) { + if ( + this.selectedAppointmentType === AppointmentTypeStrings.IN_SHOP || + this.selectedAppointmentType === AppointmentTypeStrings.DROP_OFF + ) { var shops = mappedData.map((shop) => { if (shop.value.length > 5 && shop.value.startsWith("00")) { return shop.value.substring(1); @@ -179,7 +182,7 @@ export default { this.pushEventToGA( this.GaCategories.SERVICE_LOCATION, gaAction, - shops.join("/"), + shops.join(","), true ); } diff --git a/src/store/index.js b/src/store/index.js index 29289db6e..5baf2a3a5 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -476,10 +476,6 @@ export const mutations = { externalParameterState.quote.servicePackage = servicePackage; saveExternalParameterState(externalParameterState); }, - updateExternalParameterSource(state, source) { - externalParameterState.source = source; - saveExternalParameterState(externalParameterState); - }, //RESET ExternalParameter MUTATIONS resetExternalParameterVehicleState(state) { externalParameterState.vehicle.year = null; @@ -510,10 +506,6 @@ export const mutations = { externalParameterState.quote.servicePackage = null; saveExternalParameterState(externalParameterState); }, - resetExternalParameterSourceState(state) { - externalParameterState.source = null; - saveExternalParameterState(externalParameterState); - }, resetIsExternalParameter(state) { externalParameterState.isExternalParameter = null; saveExternalParameterState(externalParameterState); @@ -936,7 +928,7 @@ export const getters = { externalParameterQuote: (state) => externalParameterState?.quote, externalParameterServiceZip: (state) => externalParameterState?.serviceZip, externalParameterEstimate: (state) => externalParameterState?.estimate, - externalParameterSource: (state) => externalParameterState?.source, + isExternalParameter: (state) => externalParameterState?.isExternalParameter, }; function getNonFalseValuesOfPropertyInArrayOfObjects(array, propertyName) { @@ -2625,7 +2617,7 @@ export const actions = { eon: order.eon, isRepair: order.damage.isRepair, glassToReplace: renameGlassToReplaceAttributes(order.damage.glassToReplace), - lineItemsOnOrder: getArrayOfAllLineItems(lineItemsToUse), + lineItemsOnOrder: getArrayOfAllLineItemsAndChildParts(lineItemsToUse), parentAccountNumber: useDefaultCashParentAccount ? applicationConfig.CASH_PARENT_ACCOUNT_NUMBER : order.payment.parentAccountNumber, @@ -2697,7 +2689,7 @@ export const actions = { eon: order.eon, isRepair: order.damage.isRepair, glassToReplace: renameGlassToReplaceAttributes(order.damage.glassToReplace), - lineItemsOnOrder: getArrayOfAllLineItems(lineItemsToUse), + lineItemsOnOrder: getArrayOfAllLineItemsAndChildParts(lineItemsToUse), parentAccountNumber: useDefaultCashParentAccount ? applicationConfig.CASH_PARENT_ACCOUNT_NUMBER : order.payment.parentAccountNumber, @@ -2929,7 +2921,6 @@ export const actions = { context.commit(storeMutations.RESET_EXTERNAL_PARAMETER_ESTIMATE_STATE); context.commit(storeMutations.RESET_EXTERNAL_PARAMETER_SERVICEZIP_STATE); context.commit(storeMutations.RESET_EXTERNAL_PARAMETER_QUOTE_STATE); - context.commit(storeMutations.RESET_EXTERNAL_PARAMETER_SOURCE_STATE); context.commit(storeMutations.RESET_IS_EXTERNAL_PARAMETER); } }, @@ -2950,7 +2941,9 @@ export const actions = { async getRecalPartsAndSaveToLineItems(context, { pageNameToLog }) { // identify each part that needs recal - const glassParts = context.state.order?.lineItems?.glassParts ?? []; + const glassParts = context.state.order?.lineItems?.glassParts + ? deepClone(context.state.order.lineItems.glassParts) + : []; for (let i = 0; i < glassParts.length; i++) { // does this part need recal? @@ -2983,6 +2976,7 @@ export const actions = { } glassParts[i].childParts.push(...recalPartResponse.data.recalibrationParts); + context.dispatch(storeActions.SAVE_GLASS_PARTS, glassParts); } } } @@ -3177,20 +3171,32 @@ export function mapTaxedLineItemsToStoreFormat(availableLineItems, storeLineItem return lineItems; } -export function getArrayOfAllLineItems(lineItems) { +export function getArrayOfAllLineItemsAndChildParts(lineItems) { let consolidatedLineItemsArray = []; if (lineItems.glassParts != null) - consolidatedLineItemsArray = [...consolidatedLineItemsArray, ...lineItems.glassParts]; + consolidatedLineItemsArray = [ + ...consolidatedLineItemsArray, + ...getFlattenedArrayOfLineItemsWithChildParts(lineItems.glassParts), + ]; if (lineItems.supportingItems != null) - consolidatedLineItemsArray = [...consolidatedLineItemsArray, ...lineItems.supportingItems]; + consolidatedLineItemsArray = [ + ...consolidatedLineItemsArray, + ...getFlattenedArrayOfLineItemsWithChildParts(lineItems.supportingItems), + ]; if (lineItems.vaps != null) - consolidatedLineItemsArray = [...consolidatedLineItemsArray, ...lineItems.vaps]; + consolidatedLineItemsArray = [ + ...consolidatedLineItemsArray, + ...getFlattenedArrayOfLineItemsWithChildParts(lineItems.vaps), + ]; if (lineItems.promos != null) - consolidatedLineItemsArray = [...consolidatedLineItemsArray, ...lineItems.promos]; + consolidatedLineItemsArray = [ + ...consolidatedLineItemsArray, + ...getFlattenedArrayOfLineItemsWithChildParts(lineItems.promos), + ]; return consolidatedLineItemsArray; } @@ -3225,7 +3231,11 @@ function getFlattenedLineItemsWithGlassPartTag(lineItems) { return { partNumber: lineItem.partNumber, partType: lineItem.partType, - isGlassPart: true, + isGlassPart: + lineItem.partType == partTypeStrings.RECALIBRATION || + lineItem.partType == partTypeStrings.ADAS_RECALIBRATION + ? false + : true, }; }); @@ -3269,6 +3279,9 @@ function addGuidToLineItemsIfNotAlreadyThere(lineItems) { if (!lineItem.id) { lineItem.id = crypto.randomUUID(); } + if (lineItem.childParts) { + addGuidToLineItemsIfNotAlreadyThere(lineItem.childParts); + } }); } @@ -3450,7 +3463,6 @@ async function resetScheduleIfUnavailable(context, order, pageNameToLog) { function createExternalParameterDefaultState() { // create default externalParameter state const externalParameterDefaultState = { - isExternalParameter: null, vehicle: { year: null, make: null, @@ -3473,7 +3485,6 @@ function createExternalParameterDefaultState() { isInsurance: null, servicePackage: null, }, - source: null, }; // set to session storage saveExternalParameterState(externalParameterDefaultState);