From d5eee99b01dda8e592f52f7b8a1e0be40929474d Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Mon, 3 Feb 2025 10:53:31 -0500 Subject: [PATCH 01/14] CASH-183 | Update experiment logging for debugging in dev-qa These changes must be removed before any release --- src/layouts/vehicle/vehicle.vue | 10 +++++++--- src/router/index.js | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/layouts/vehicle/vehicle.vue b/src/layouts/vehicle/vehicle.vue index c81dfa2b0..79fad6313 100644 --- a/src/layouts/vehicle/vehicle.vue +++ b/src/layouts/vehicle/vehicle.vue @@ -80,7 +80,11 @@ import vehicleQuestion from "@/layouts/vehicle/vehicle-question/vehicle-question // Supporting files import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; import { experimentUniverses } from "@/constants/experiments"; -import { getSessionKeyValue, getUserIdValue, getDeviceIdValue } from "@/helpers/heritage-integration/cookie-helper"; +import { + getSessionKeyValue, + getUserIdValue, + getDeviceIdValue, +} from "@/helpers/heritage-integration/cookie-helper"; import { settleAllPromises } from "@/helpers/layout-helper"; import { Form, defineRule } from "vee-validate"; import { required } from "@/helpers/validation-rules"; @@ -188,10 +192,10 @@ export default { userId: getUserIdValue(), deviceId: getDeviceIdValue(), sessionKey: getSessionKeyValue(), - pageName: to.query.fmgPage, + pageName: "vehicle-logExposure", //to.query.fmgPage, experiment: experimentForLogging, }, - "vehicle", + "vehicle-logExposure", false ); } diff --git a/src/router/index.js b/src/router/index.js index 76d1203b7..918688a3c 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -810,7 +810,7 @@ async function runExperiments(nextPage) { { deviceId: getDeviceIdValue(), triggerEvent: experimentTriggers.PAGE_ENTRY, - triggerValue: nextPage, + triggerValue: nextPage == "vehicle" ? "vehicle-pageEntry" : nextPage, }, nextPage ); From 471cf1b14479a9b5cffc7eb02aad7f623e6bc319 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Tue, 4 Feb 2025 08:03:29 -0500 Subject: [PATCH 02/14] Revert "Merge pull request #2271 from Safelite/feature/CASH-183" This reverts commit 2bf674dda79eb7b627417bb340cc52696ad7b360, reversing changes made to ae178c811ae11f209d46fa77def4c09a5d70b43b. --- src/layouts/vehicle/vehicle.vue | 10 +++------- src/router/index.js | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/layouts/vehicle/vehicle.vue b/src/layouts/vehicle/vehicle.vue index 79fad6313..c81dfa2b0 100644 --- a/src/layouts/vehicle/vehicle.vue +++ b/src/layouts/vehicle/vehicle.vue @@ -80,11 +80,7 @@ import vehicleQuestion from "@/layouts/vehicle/vehicle-question/vehicle-question // Supporting files import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; import { experimentUniverses } from "@/constants/experiments"; -import { - getSessionKeyValue, - getUserIdValue, - getDeviceIdValue, -} from "@/helpers/heritage-integration/cookie-helper"; +import { getSessionKeyValue, getUserIdValue, getDeviceIdValue } from "@/helpers/heritage-integration/cookie-helper"; import { settleAllPromises } from "@/helpers/layout-helper"; import { Form, defineRule } from "vee-validate"; import { required } from "@/helpers/validation-rules"; @@ -192,10 +188,10 @@ export default { userId: getUserIdValue(), deviceId: getDeviceIdValue(), sessionKey: getSessionKeyValue(), - pageName: "vehicle-logExposure", //to.query.fmgPage, + pageName: to.query.fmgPage, experiment: experimentForLogging, }, - "vehicle-logExposure", + "vehicle", false ); } diff --git a/src/router/index.js b/src/router/index.js index 918688a3c..76d1203b7 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -810,7 +810,7 @@ async function runExperiments(nextPage) { { deviceId: getDeviceIdValue(), triggerEvent: experimentTriggers.PAGE_ENTRY, - triggerValue: nextPage == "vehicle" ? "vehicle-pageEntry" : nextPage, + triggerValue: nextPage, }, nextPage ); From 53d08f0724332d3ef2f67240519adfc740ce2848 Mon Sep 17 00:00:00 2001 From: Chris Redelinghuys Date: Wed, 5 Feb 2025 14:28:33 -0500 Subject: [PATCH 03/14] CASH-69: MSR for ITAC. Remove Vehicle MSR Check. --- src/constants/store-mutations.js | 2 - .../service-location/service-location.spec.js | 3 -- .../service-location/service-location.vue | 11 ++---- src/layouts/vehicle/vehicle.vue | 8 ---- src/store/index.js | 37 +++---------------- 5 files changed, 9 insertions(+), 52 deletions(-) diff --git a/src/constants/store-mutations.js b/src/constants/store-mutations.js index 1ebf39b8d..0836beb06 100644 --- a/src/constants/store-mutations.js +++ b/src/constants/store-mutations.js @@ -16,8 +16,6 @@ const storeMutations = { UPDATE_VEHICLE_IMAGE_COLOR: "updateVehicleImageColor", UPDATE_VEHICLE_VIN: "updateVehicleVin", UPDATE_VEHICLE: "updateVehicle", - UPDATE_VEHICLE_MOBILE_STATIC_RECALIBRATION_APPLICABLE: - "updateIsMobileStaticRecalibrationApplicable", UPDATE_IS_REPAIR: "updateIsRepair", UPDATE_NUMBER_OF_CHIPS: "updateNumberOfChips", diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js index 54f28a89c..68d2e948f 100644 --- a/src/layouts/service-location/service-location.spec.js +++ b/src/layouts/service-location/service-location.spec.js @@ -182,9 +182,6 @@ beforeEach(() => { zipCode: "43235", state: "OH", }, - vehicle: { - isMobileStaticRecalibrationApplicable: true, - }, }, damage: { isRepair: false, diff --git a/src/layouts/service-location/service-location.vue b/src/layouts/service-location/service-location.vue index 9addea705..ef7a5491f 100644 --- a/src/layouts/service-location/service-location.vue +++ b/src/layouts/service-location/service-location.vue @@ -191,8 +191,6 @@ export default { isRecalibrationServiceableInshop: null, isGlassServiceableMobile: null, isRecalibrationServiceableMobile: null, - isVehicleMobileStaticRecalibrationApplicable: - this.getIsVehicleMobileStaticRecalibrationApplicableFromStore(), selectedAppointmentType: this.getSelectedAppointmentType(), selectedProvider: this.getSelectedProvider(), mobileFeePart: null, @@ -322,9 +320,8 @@ export default { isMobileStaticRecalibrationApplicable() { return ( this.displayMSR && - this.isVehicleMobileStaticRecalibrationApplicable && this.mobileFeePart?.partNumber == partNumberStrings.MOBILE_STATIC_RECAL_FEE && - (this.isInsurance ? this.mobileFeePart?.isInsurable : true) + (this.isInsurance && !this.isITAC ? this.mobileFeePart?.isInsurable : true) ); }, displayMSR() { @@ -401,6 +398,9 @@ export default { isInsurance() { return store.getters.payment.isInsurance; }, + isITAC() { + return store.getters.order.policy.isItac; + }, }, methods: { arePagePrerequisitesValid() { @@ -509,9 +509,6 @@ export default { getSelectedProvider() { return store.getters.order.serviceLocation.provider; }, - getIsVehicleMobileStaticRecalibrationApplicableFromStore() { - return store.getters.order.vehicle.isMobileStaticRecalibrationApplicable; - }, resetMobileLocation() { this.streetAddress = ""; this.apartmentNumberOrBusinessName = ""; diff --git a/src/layouts/vehicle/vehicle.vue b/src/layouts/vehicle/vehicle.vue index fa7f5c036..728e1dcfd 100644 --- a/src/layouts/vehicle/vehicle.vue +++ b/src/layouts/vehicle/vehicle.vue @@ -121,7 +121,6 @@ export default { modelOptions: [], styleOptions: [], displayNoServiceAlert: false, - isMobileStaticRecalibrationApplicable: this.getIsMobileStaticRecalibrationApplicable(), }; }, @@ -444,8 +443,6 @@ export default { this.imageVifNumber = result?.data.imageVifNumber; this.imageVifColor = result?.data.imageVifColor; this.displayNoServiceAlert = !result?.data.canSafeliteService; - this.isMobileStaticRecalibrationApplicable = - result?.data.isMobileStaticRecalibrationApplicable; }, resetAlert() { this.displayNoServiceAlert = false; @@ -464,8 +461,6 @@ export default { imageUrl: this.imageUrl, imageVifNumber: this.imageVifNumber, imageVifColor: this.imageVifColor, - isMobileStaticRecalibrationApplicable: - this.isMobileStaticRecalibrationApplicable, }, false ); @@ -541,9 +536,6 @@ export default { getImageVifColorfromStore() { return store.getters.vehicle.imageVifColor; }, - getIsMobileStaticRecalibrationApplicable() { - return store.getters.vehicle.isMobileStaticRecalibrationApplicable; - }, }, components: { diff --git a/src/store/index.js b/src/store/index.js index c591d493d..c07fffbd3 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -68,7 +68,6 @@ const getDefaultState = () => { registration: { licensePlate: null, }, - isMobileStaticRecalibrationApplicable: false, }, serviceLocation: { address: null, @@ -226,10 +225,6 @@ export const mutations = { updateVehicleVin(state, vin) { state.order.vehicle.vin = vin; }, - updateIsMobileStaticRecalibrationApplicable(state, isMobileStaticRecalibrationApplicable) { - state.order.vehicle.isMobileStaticRecalibrationApplicable = - isMobileStaticRecalibrationApplicable; - }, updateIsRepair(state, isRepair) { state.order.damage.isRepair = isRepair; }, @@ -358,8 +353,6 @@ export const mutations = { state.order.vehicle.imageUrl = vehicleInfo.imageUrl; state.order.vehicle.imageVifNumber = vehicleInfo.imageVifNumber; state.order.vehicle.imageColor = vehicleInfo.imageVifColor; - state.order.vehicle.isMobileStaticRecalibrationApplicable = - vehicleInfo.isMobileStaticRecalibrationApplicable; }, updateRegistration(state, registrationInfo) { state.order.vehicle.registration.licensePlate = registrationInfo?.licensePlate; @@ -552,7 +545,6 @@ export const mutations = { state.order.vehicle.imageUrl = null; state.order.vehicle.imageVifNumber = null; state.order.vehicle.imageColor = null; - state.order.vehicle.isMobileStaticRecalibrationApplicable = false; }, resetDamageState(state) { state.order.damage.isRepair = null; @@ -1656,8 +1648,6 @@ export const actions = { const coverageStatus = coverageStatusEnum(order.payment?.insuranceCoverage?.coverageStatus); const coverageType = coverageTypeEnum(order.payment?.insuranceCoverage?.coverageType); const isItacOptimized = order.policy?.isItac ?? false; - const isMobileStaticRecalibrationApplicable = - order.vehicle?.isMobileStaticRecalibrationApplicable; const zipCode = serviceZipCode ?? order.serviceLocation?.provider?.address?.zipCode ?? @@ -1673,12 +1663,10 @@ export const actions = { var endPoint = `${endpoints.GetMobileFeePart.url}/?serviceType=${serviceType}&facilityType=${facilityType}&parentAccountNumber=${parentAccountNumber}&billToAccountNumber=${billToAccountNumber}&providerNumber=${providerNumber}&isItacOptimized=${isItacOptimized}&zipCode=${zipCode}`; - if (isMobileStaticRecalibrationApplicable) { - const recalPartNumber = getRecalPartNumber(order.lineItems?.glassParts[0]); - const carId = order.vehicle?.carId; - if (recalPartNumber && carId) { - endPoint = `${endPoint}&partNumbers=${recalPartNumber}&carId=${carId}`; - } + const recalPartNumber = getRecalPartNumber(order.lineItems?.glassParts[0]); + const carId = order.vehicle?.carId; + if (recalPartNumber && carId) { + endPoint = `${endPoint}&partNumbers=${recalPartNumber}&carId=${carId}`; } if (coverageStatus) { @@ -2281,18 +2269,7 @@ export const actions = { // Vehicle saveVehicle( context, - { - year, - make, - model, - style, - carId, - category, - imageUrl, - imageVifNumber, - imageVifColor, - isMobileStaticRecalibrationApplicable, - } + { year, make, model, style, carId, category, imageUrl, imageVifNumber, imageVifColor } ) { if ( context.state.order.vehicle.year != year || @@ -2313,10 +2290,6 @@ export const actions = { context.commit(storeMutations.UPDATE_VEHICLE_IMAGE_URL, imageUrl); context.commit(storeMutations.UPDATE_VEHICLE_IMAGE_VIF_NUMBER, imageVifNumber); context.commit(storeMutations.UPDATE_VEHICLE_IMAGE_COLOR, imageVifColor); - context.commit( - storeMutations.UPDATE_VEHICLE_MOBILE_STATIC_RECALIBRATION_APPLICABLE, - isMobileStaticRecalibrationApplicable - ); } }, From 6881ff35ec8cc27b1dc6e424f615099bf4b9bffb Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Mon, 10 Feb 2025 18:44:16 -0500 Subject: [PATCH 04/14] CASH-153: duplicate date-picker and begin styling --- .../date-picker/date-picker-2.vue | 1093 +++++++++++++++++ src/layouts/schedule/schedule.vue | 9 +- 2 files changed, 1098 insertions(+), 4 deletions(-) create mode 100644 src/digital-components/date-picker/date-picker-2.vue diff --git a/src/digital-components/date-picker/date-picker-2.vue b/src/digital-components/date-picker/date-picker-2.vue new file mode 100644 index 000000000..a1af80723 --- /dev/null +++ b/src/digital-components/date-picker/date-picker-2.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index 7800876cd..6c06cf727 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -10,6 +10,7 @@
+ selectedDate: {{ selectedDate }} - Date: Tue, 11 Feb 2025 04:27:52 -0500 Subject: [PATCH 05/14] CASH-240 CASH-240 make sure to save phone and sms optin before navigating --- src/layouts/service-zip/service-zip.vue | 52 ++++++++++++------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/layouts/service-zip/service-zip.vue b/src/layouts/service-zip/service-zip.vue index b01f99c06..717880553 100644 --- a/src/layouts/service-zip/service-zip.vue +++ b/src/layouts/service-zip/service-zip.vue @@ -133,36 +133,36 @@ export default { vm.setCmsContent(resultMap.cmsContent); if (store.getters.externalParameterState?.isExternalParameter) { + if (store.getters.externalParameterServiceZip.zipCode) { + await baseMixin.methods.dispatchStoreAction( + storeActions.SAVE_SERVICE_ZIP_CODE_INFO, + { + zipCode: store.getters.externalParameterServiceZip.zipCode, + state: null, + zipCodeCtu: null, + }, + false + ); + } + + if (store.getters.externalParameterCustomer?.phoneNumber) { + await baseMixin.methods.dispatchStoreAction( + storeActions.SAVE_PHONE_NUMBER, + store.getters.externalParameterCustomer.phoneNumber, + false + ); + + await baseMixin.methods.dispatchStoreAction( + storeActions.SAVE_IS_SMS_OPT_IN, + true, + false + ); + } + const isValid = await baseMixin.methods.isFormValid(vm.$refs.theForm); if (isValid) { vm.forwardButtonAction(); } else { - if (store.getters.externalParameterServiceZip.zipCode) { - await baseMixin.methods.dispatchStoreAction( - storeActions.SAVE_SERVICE_ZIP_CODE_INFO, - { - zipCode: store.getters.externalParameterServiceZip.zipCode, - state: null, - zipCodeCtu: null, - }, - false - ); - } - - if (store.getters.externalParameterCustomer?.phoneNumber) { - await baseMixin.methods.dispatchStoreAction( - storeActions.SAVE_PHONE_NUMBER, - store.getters.externalParameterCustomer.phoneNumber, - false - ); - - await baseMixin.methods.dispatchStoreAction( - storeActions.SAVE_IS_SMS_OPT_IN, - true, - false - ); - } - baseMixin.methods.ResetExternalParamsAndHideModal(); } } From 80caabf5efdabba4ab37d51169c46666e99f9199 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Tue, 11 Feb 2025 09:10:00 -0500 Subject: [PATCH 06/14] CASH-201 | Add "Pay on my own" link Add the link to insurance-company Make cash auto selected on quote when this link is used --- .../insurance-company/insurance-company.vue | 16 +++++++++++++++- src/layouts/quote/quote.vue | 4 ++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/layouts/insurance-company/insurance-company.vue b/src/layouts/insurance-company/insurance-company.vue index 79e238d47..ddfffe177 100644 --- a/src/layouts/insurance-company/insurance-company.vue +++ b/src/layouts/insurance-company/insurance-company.vue @@ -16,6 +16,13 @@ v-model="parentAccountNumber" :originalList="originalList" />
+ diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue index 4428f6e40..99b75c9a7 100644 --- a/src/layouts/quote/quote.vue +++ b/src/layouts/quote/quote.vue @@ -328,6 +328,10 @@ export default { } const getIsInsuranceSelectedValue = (availableLineItems, insuranceThreshold) => { + // routeParam checked here is set on insurance-selection "Pay on my own" link click + if (from.params.forceCashSelection) { + return false; + } const serviceLocationState = store.getters.order.serviceLocation.state; // usually true when returning from heritage but can be false when returning from heritage on a save quote From 37cd5f01bfb92d5eaa07a4a50ac977a048e4a15b Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Tue, 11 Feb 2025 09:20:48 -0500 Subject: [PATCH 07/14] CASH-201 | Update unit test Fixed broken tests, haven't added new ones yet --- src/layouts/quote/quote.spec.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/layouts/quote/quote.spec.js b/src/layouts/quote/quote.spec.js index deca0d6d1..42e3aecd0 100644 --- a/src/layouts/quote/quote.spec.js +++ b/src/layouts/quote/quote.spec.js @@ -293,7 +293,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - undefined, + {params:{}}, (c) => c(wrapper.vm) ); @@ -345,7 +345,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - undefined, + {params:{}}, (c) => c(wrapper.vm) ); //Assert @@ -388,7 +388,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - undefined, + {params:{}}, (c) => c(wrapper.vm) ); @@ -432,7 +432,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote", isInsurance: false } }, - undefined, + {params:{}}, (c) => c(wrapper.vm) ); @@ -478,7 +478,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - undefined, + {params:{}}, (c) => c(wrapper.vm) ); @@ -523,7 +523,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - undefined, + {params:{}}, (c) => c(wrapper.vm) ); @@ -570,7 +570,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - undefined, + {params:{}}, (c) => c(wrapper.vm) ); @@ -618,7 +618,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - undefined, + {params:{}}, (c) => c(wrapper.vm) ); @@ -662,7 +662,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - undefined, + {params:{}}, (c) => c(wrapper.vm) ); //Assert @@ -783,7 +783,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - undefined, + {params:{}}, nextFunction ); await nextTick(); From 738e6a108d025e812cda4f68986e9cfdd26f3aa5 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Tue, 11 Feb 2025 10:20:34 -0500 Subject: [PATCH 08/14] CASH-201 | Switch to query parameter --- .../insurance-company/insurance-company.vue | 9 ++++++--- src/layouts/quote/quote.spec.js | 20 +++++++++---------- src/layouts/quote/quote.vue | 4 ++-- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/layouts/insurance-company/insurance-company.vue b/src/layouts/insurance-company/insurance-company.vue index ddfffe177..452484e48 100644 --- a/src/layouts/insurance-company/insurance-company.vue +++ b/src/layouts/insurance-company/insurance-company.vue @@ -101,7 +101,7 @@ export default { return !!this.parentAccountNumber; }, payWithCashButtonCopy() { - return "Pay on my own"; + return this.getCmsContent("PayWithCashWidget", "Text"); } }, methods: { @@ -122,8 +122,11 @@ export default { }, backButtonAction(forceCashSelectionOnQuote) { // Go back to Quote page - if (forceCashSelectionOnQuote) - this.$route.params['forceCashSelection'] = true; + if (forceCashSelectionOnQuote) { + this.$router.navigateWithoutSaving(this.navigationScenarios.CLICKED_BACK, this.$route, {"isCashSelected": true}); + return; + } + this.$router.navigateWithoutSaving(this.navigationScenarios.CLICKED_BACK, this.$route); }, async forwardButtonAction() { diff --git a/src/layouts/quote/quote.spec.js b/src/layouts/quote/quote.spec.js index 42e3aecd0..deca0d6d1 100644 --- a/src/layouts/quote/quote.spec.js +++ b/src/layouts/quote/quote.spec.js @@ -293,7 +293,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - {params:{}}, + undefined, (c) => c(wrapper.vm) ); @@ -345,7 +345,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - {params:{}}, + undefined, (c) => c(wrapper.vm) ); //Assert @@ -388,7 +388,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - {params:{}}, + undefined, (c) => c(wrapper.vm) ); @@ -432,7 +432,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote", isInsurance: false } }, - {params:{}}, + undefined, (c) => c(wrapper.vm) ); @@ -478,7 +478,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - {params:{}}, + undefined, (c) => c(wrapper.vm) ); @@ -523,7 +523,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - {params:{}}, + undefined, (c) => c(wrapper.vm) ); @@ -570,7 +570,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - {params:{}}, + undefined, (c) => c(wrapper.vm) ); @@ -618,7 +618,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - {params:{}}, + undefined, (c) => c(wrapper.vm) ); @@ -662,7 +662,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - {params:{}}, + undefined, (c) => c(wrapper.vm) ); //Assert @@ -783,7 +783,7 @@ describe("quote.vue", () => { await quote.beforeRouteEnter.call( wrapper.vm, { query: { fmgPage: "quote" } }, - {params:{}}, + undefined, nextFunction ); await nextTick(); diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue index 99b75c9a7..20dc16304 100644 --- a/src/layouts/quote/quote.vue +++ b/src/layouts/quote/quote.vue @@ -328,8 +328,8 @@ export default { } const getIsInsuranceSelectedValue = (availableLineItems, insuranceThreshold) => { - // routeParam checked here is set on insurance-selection "Pay on my own" link click - if (from.params.forceCashSelection) { + // query param checked here is set on insurance-selection "Pay on my own" link click + if (to.query?.isCashSelected || to.query?.iscashselected) { return false; } const serviceLocationState = store.getters.order.serviceLocation.state; From 8b2b22b86846854765f6a5943e3041cf03516243 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Tue, 11 Feb 2025 10:33:52 -0500 Subject: [PATCH 09/14] CASH-201 | Add unit test --- src/layouts/quote/quote.spec.js | 50 +++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/layouts/quote/quote.spec.js b/src/layouts/quote/quote.spec.js index deca0d6d1..522bc4f2e 100644 --- a/src/layouts/quote/quote.spec.js +++ b/src/layouts/quote/quote.spec.js @@ -577,6 +577,56 @@ describe("quote.vue", () => { //Assert expect(wrapper.vm.isInsuranceSelected).toBe(false); }); + test("should default to cash if isCashSelected is true, despite all other checks pointing to insurance selection", async () => { + // Also needs no query parameter or previous selection in store to be present + //Arrange + + store.getters = { + lineItems: { + glassParts: ["item", "item2"], + }, + applicationUser: { + experiments: [], + }, + order: { + lineItems: { + glassParts: ["item", "item2"], + }, + payment: { + isInsurance: true, + }, + customer: { + emailAddress: "test@test.com", + }, + serviceLocation: { + state: null, + }, + }, + vehicle: { + cardId: "123", + }, + experimentSettings: { + settingName: "SERVICE_PACKAGE_DISCOUNT", + }, + }; + mockTierOnePrice = 505; + const { wrapper } = setupMocks({}); + + + //Act + await quote.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "quote", + isInsuranceSelected: true, + isCashSelected: true, + } }, + undefined, + (c) => c(wrapper.vm) + ); + + //Assert + expect(wrapper.vm.isInsuranceSelected).toBe(false); + }); test("should default to insurance if total economy package price is over $500", async () => { // Also needs no query parameter or previous selection in store to be present //Arrange From 3e75513993a64cd893419c41a605b376dbed08a5 Mon Sep 17 00:00:00 2001 From: CarlNation Date: Tue, 11 Feb 2025 15:01:59 -0500 Subject: [PATCH 10/14] CASH-240 CASH-240 save phone and sms optin when other damage type passed in on quickquote --- .../molding-questions/molding-questions.vue | 14 ++++++++++++++ src/layouts/part-questions/part-questions.vue | 15 +++++++++++++++ src/layouts/vehicle-damage/vehicle-damage.vue | 14 ++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/src/layouts/molding-questions/molding-questions.vue b/src/layouts/molding-questions/molding-questions.vue index 1bcc3d7a8..2c5f5a7c3 100644 --- a/src/layouts/molding-questions/molding-questions.vue +++ b/src/layouts/molding-questions/molding-questions.vue @@ -78,6 +78,20 @@ export default { ); } + if (store.getters.externalParameterCustomer?.phoneNumber) { + await baseMixin.methods.dispatchStoreAction( + storeActions.SAVE_PHONE_NUMBER, + store.getters.externalParameterCustomer.phoneNumber, + false + ); + + await baseMixin.methods.dispatchStoreAction( + storeActions.SAVE_IS_SMS_OPT_IN, + true, + false + ); + } + baseMixin.methods.ResetExternalParamsAndHideModal(); } }); diff --git a/src/layouts/part-questions/part-questions.vue b/src/layouts/part-questions/part-questions.vue index f905e86c7..d60ddbb70 100644 --- a/src/layouts/part-questions/part-questions.vue +++ b/src/layouts/part-questions/part-questions.vue @@ -79,6 +79,21 @@ export default { false ); } + + if (store.getters.externalParameterCustomer?.phoneNumber) { + await baseMixin.methods.dispatchStoreAction( + storeActions.SAVE_PHONE_NUMBER, + store.getters.externalParameterCustomer.phoneNumber, + false + ); + + await baseMixin.methods.dispatchStoreAction( + storeActions.SAVE_IS_SMS_OPT_IN, + true, + false + ); + } + baseMixin.methods.ResetExternalParamsAndHideModal(); } }); diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue index 6e9c4b198..46efb4728 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.vue +++ b/src/layouts/vehicle-damage/vehicle-damage.vue @@ -152,6 +152,20 @@ export default { if (isValid) { vm.forwardButtonAction(); } else { + if (store.getters.externalParameterCustomer?.phoneNumber) { + await baseMixin.methods.dispatchStoreAction( + storeActions.SAVE_PHONE_NUMBER, + store.getters.externalParameterCustomer.phoneNumber, + false + ); + + await baseMixin.methods.dispatchStoreAction( + storeActions.SAVE_IS_SMS_OPT_IN, + true, + false + ); + } + if (store.getters.externalParameterServiceZip.zipCode) { await baseMixin.methods.dispatchStoreAction( storeActions.SAVE_SERVICE_ZIP_CODE_INFO, From 7caadb88808ae69c50ae12fbb04179d1615c3af3 Mon Sep 17 00:00:00 2001 From: CarlNation Date: Wed, 12 Feb 2025 12:50:23 -0500 Subject: [PATCH 11/14] CASH-250 CASH-250 clear phone / email when user clears the field --- src/layouts/service-zip/service-zip.vue | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/layouts/service-zip/service-zip.vue b/src/layouts/service-zip/service-zip.vue index 717880553..ae7609da8 100644 --- a/src/layouts/service-zip/service-zip.vue +++ b/src/layouts/service-zip/service-zip.vue @@ -202,11 +202,18 @@ export default { async forwardButtonAction() { const zipCodeData = await this.getZipCodeData(this.serviceZipCode); - if (vinPagesMixin.methods.isPhoneNumber(this.emailOrSms)) { - const phone = this.emailOrSms.replace(/[()]/g, ""); - await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, phone, false); - } else { - await this.dispatchStoreAction(storeActions.SAVE_EMAIL, this.emailOrSms, false); + // if no value due to field being optional, blank both phone and email address + if (!this.emailOrSms) { + await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, "", false); + await this.dispatchStoreAction(storeActions.SAVE_EMAIL, "", false); + } + else { + if (vinPagesMixin.methods.isPhoneNumber(this.emailOrSms)) { + const phone = this.emailOrSms.replace(/[()]/g, ""); + await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, phone, false); + } else { + await this.dispatchStoreAction(storeActions.SAVE_EMAIL, this.emailOrSms, false); + } } await this.dispatchStoreAction( From e201944b7726d7b278b7ccdd9a0881b259538040 Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Thu, 13 Feb 2025 19:33:12 -0500 Subject: [PATCH 12/14] CASH-153 - new styling --- .../date-picker/date-picker-2.vue | 92 +++++-------------- 1 file changed, 24 insertions(+), 68 deletions(-) diff --git a/src/digital-components/date-picker/date-picker-2.vue b/src/digital-components/date-picker/date-picker-2.vue index a1af80723..7a0f4e0cf 100644 --- a/src/digital-components/date-picker/date-picker-2.vue +++ b/src/digital-components/date-picker/date-picker-2.vue @@ -750,8 +750,7 @@ export default { .grid-item { text-align: center; - // margin: 10px 3px; - margin: 0; + margin: 0; font-size: 0.875rem; line-height: 1.5; @@ -810,50 +809,27 @@ export default { position: relative; display: flex; justify-content: center; - // align-items: center; - align-items: flex-start; + align-items: flex-start; outline: none; - // height: 1.5rem; - width: 100%; - height: 2.5rem; + width: 100%; opacity: 1; - transition: + transition: height ease 250ms, opacity ease 250ms; - color: $gray-500; - background-color: $gray-100; - + color: $gray-500; + background-color: $gray-100; input[type="radio"] { position: absolute; //override bootstrap height: 0; opacity: 0; - &:focus-visible + label { - box-shadow: 0 0 0 2.5px $blue; - } - - &:focus + label, - &:checked:focus + label { - box-shadow: - 0 0 0 3px #fff, - 0 0 0 5.5px #1574a1; - background-color: $blue; - color: $white; - &.current-day { - &:after { - background-color: $white; - } - .first-day { - color: $white; - } - } - } - &:checked + label { - color: $white; - background: $blue; + background: $blue-100; + border: 2px solid $blue; + border-radius: 4px; + &:after { background-color: $white; } @@ -882,29 +858,25 @@ export default { position: relative; cursor: pointer; display: flex; - flex-direction: column; + flex-direction: column; justify-content: center; align-items: center; min-width: 2.5rem; - // width: 2.5rem; - // height: 2.5rem; - min-height: 2.5rem; - width: 100%; - font-size: .75rem; - line-height: 1.2; - justify-content: flex-start; - padding: .25rem; - + height: 3rem; + width: 100%; + font-size: 0.75rem; + line-height: 1.2; + justify-content: flex-start; + padding: 0.25rem; span { - margin-top: .25rem; + margin-top: 0.25rem; &.small { font-size: 0.75rem; color: $gray-550; } } - // &:hover, &:checked { @include media-breakpoint-up(sm) { box-shadow: 0 0 0 4px transparent; @@ -930,30 +902,16 @@ export default { } &.selectable-day { - background-color: $white; + background-color: $white; label { color: $blue; - // background-color: $blue-100; - // border: 1px solid $blue; - // min-width: 2.5rem; - // width: 2.5rem; - // border-radius: 50%; - - span { - // text-underline-offset: 4px; - text-decoration: underline; - } + span { + text-decoration: underline; + } } } - // &.unavailable-day { - // label { - // color: $gray-500; - // background-color: $gray-100; - // border: none; - // pointer-events: none; - // } - // } + &.unavailable-day:not(&.sunday) { label { &::before { @@ -974,13 +932,11 @@ export default { &:after { content: ""; - margin-top: .2rem; + margin-top: 0.2rem; width: 0.25rem; height: 0.25rem; border-radius: 50%; background-color: $black; - // position: absolute; - // top: 28px; } .first-day { color: $blue; From 881ad6345824e0969f15ada65a98522a171572b4 Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Thu, 13 Feb 2025 19:46:26 -0500 Subject: [PATCH 13/14] CASH-153 - cleanup and more css tweaks --- src/digital-components/date-picker/date-picker-2.vue | 6 +++--- src/layouts/schedule/schedule.vue | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/digital-components/date-picker/date-picker-2.vue b/src/digital-components/date-picker/date-picker-2.vue index 7a0f4e0cf..50ea6f0fb 100644 --- a/src/digital-components/date-picker/date-picker-2.vue +++ b/src/digital-components/date-picker/date-picker-2.vue @@ -39,7 +39,6 @@ date.dayClasses, date.isSelectable ? 'selectable-day' : '', ]"> -
- selectedDate: {{ selectedDate }} diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue index e21a5037a..c4a8e4900 100644 --- a/src/fmg-components/cart/cart.vue +++ b/src/fmg-components/cart/cart.vue @@ -10,9 +10,9 @@ href="javascript:void(0)" class="col d-flex justify-content-between py-0"> {{ OrderDetailsText }} - {{ - getLineItemAmount(amountDue, showCoverageAsPending) - }} + + {{ getLineItemAmount(amountDue, showCoverageAsPending) }} +
@@ -48,11 +48,11 @@ v-for="(cartItem, i) in packageCartItems" :key="i" class="packaged-cart-item"> - {{ - cartItem.name - }} + + + {{ cartItem.name }} + + {{ - getLineItemAmount(cartItem.subTotal, null, cartItem.category) - }} + "> + {{ getLineItemAmount(cartItem.subTotal, null, cartItem.category) }} +
@@ -143,8 +141,10 @@ class="my-2 lh-1 applied-promo-tag" v-for="(promoCode, i) in getPromoCodeList" :key="i"> - Promo code {{ promoCode }} applied + + Promo code + {{ promoCode }} + applied
diff --git a/src/fmg-components/promo-modal-question/promo-modal-question.vue b/src/fmg-components/promo-modal-question/promo-modal-question.vue index 656aeaa38..8efad6f3e 100644 --- a/src/fmg-components/promo-modal-question/promo-modal-question.vue +++ b/src/fmg-components/promo-modal-question/promo-modal-question.vue @@ -54,8 +54,10 @@ class="mt-4 d-flex align-items-center justify-content-between" v-for="(promoCode, i) in this.getPromoCodeList()" :key="i"> - Promo code {{ promoCode }} applied + + Promo code + {{ promoCode }} + applied - Add to calendar + Add to calendar + - + v-model="selectedCalendarOption">