From 38f7ef333985184d923404c6b9150e35a7f38bbb Mon Sep 17 00:00:00 2001 From: hiteshkumar87 Date: Mon, 28 Aug 2023 12:20:59 +0530 Subject: [PATCH 01/12] CSR-1618 added FirstAvailableAppointment GA event --- src/helpers/date-helper.js | 10 ++++++++++ src/store/index.js | 34 ++++++++++++++++++++++++++++++---- 2 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 src/helpers/date-helper.js diff --git a/src/helpers/date-helper.js b/src/helpers/date-helper.js new file mode 100644 index 000000000..dce497231 --- /dev/null +++ b/src/helpers/date-helper.js @@ -0,0 +1,10 @@ +export function getDateDifferenceInDays(startDate, endDate) { + var date1 = new Date(endDate); + date1.setHours(0, 0, 0, 0); + var date2 = new Date(startDate); + date2.setHours(0, 0, 0, 0); + // To calculate the time difference of two dates + var Difference_In_Time = date1.getTime() - date2.getTime(); + // To calculate the no. of days between two dates + return Difference_In_Time / (1000 * 3600 * 24); +} diff --git a/src/store/index.js b/src/store/index.js index 9b52e08a4..403e784c1 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -15,6 +15,7 @@ import { deepEqual } from "@/helpers/object-helper"; import { AppointmentTypeStrings, PREMIUM_FEE_PART_TYPE } from "@/constants/schedule-constants"; import { getQuerystringParameter } from "@/helpers/querystring-helper"; import { queryStrings } from "@/constants/query-strings"; +import { getDateDifferenceInDays } from "@/helpers/date-helper"; // Export State const getDefaultState = () => { return { @@ -605,8 +606,24 @@ function getNonFalseValuesOfPropertyInArrayOfObjects(array, propertyName) { return (array ?? []).map((x) => x[propertyName]).filter((x) => x); } -function provisionalTriggersToString(provisionalTriggers) { - return "ProvisionalTriggers:" + provisionalTriggers.join(","); +function FirstAvailableAppointment( + provisionalTriggers, + zipCode, + firstAvailableAppointmentDateString, + shopAppointmentType +) { + var numberOfDays = null; + if (firstAvailableAppointmentDateString) + numberOfDays = getDateDifferenceInDays(new Date(), firstAvailableAppointmentDateString); + + if (shopAppointmentType) + return `FirstAvailableAppointment:${numberOfDays},Zip:${zipCode},ShopAppointmentType:${shopAppointmentType},ProvisionalTriggers:${provisionalTriggers.join( + "," + )}`; + else + return `FirstAvailableAppointment:${numberOfDays},Zip:${zipCode},ProvisionalTriggers:${provisionalTriggers.join( + "," + )}`; } // Export Actions @@ -1297,7 +1314,12 @@ export const actions = { endpoint: endpoints.GetShopTimeSlots.url, payload: payload, additionalSuccessEventDataHandler: (response) => - provisionalTriggersToString(response.data.provisionalTriggers), + FirstAvailableAppointment( + response.data.provisionalTriggers, + order.serviceLocation.zipCode, + response.data.days?.[0]?.date, + shopAppointmentType + ), }); }, @@ -1354,7 +1376,11 @@ export const actions = { endpoint: endpoints.GetMobileTimeSlots.url, payload: payload, additionalSuccessEventDataHandler: (response) => - provisionalTriggersToString(response.data.provisionalTriggers), + FirstAvailableAppointment( + response.data.provisionalTriggers, + order.serviceLocation.zipCode, + response.data.days?.[0]?.date + ), }); }, From 8dfa5d80a6944713d267326ef97a8d92491c2223 Mon Sep 17 00:00:00 2001 From: hiteshkumar87 Date: Thu, 31 Aug 2023 18:40:05 +0530 Subject: [PATCH 02/12] Update index.js rename the method FirstAvailableAppointment to getTimeSlotsAdditionalEventData --- src/store/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index 403e784c1..5ab4f971a 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -606,7 +606,7 @@ function getNonFalseValuesOfPropertyInArrayOfObjects(array, propertyName) { return (array ?? []).map((x) => x[propertyName]).filter((x) => x); } -function FirstAvailableAppointment( +function getTimeSlotsAdditionalEventData( provisionalTriggers, zipCode, firstAvailableAppointmentDateString, @@ -1314,7 +1314,7 @@ export const actions = { endpoint: endpoints.GetShopTimeSlots.url, payload: payload, additionalSuccessEventDataHandler: (response) => - FirstAvailableAppointment( + getTimeSlotsAdditionalEventData( response.data.provisionalTriggers, order.serviceLocation.zipCode, response.data.days?.[0]?.date, @@ -1376,7 +1376,7 @@ export const actions = { endpoint: endpoints.GetMobileTimeSlots.url, payload: payload, additionalSuccessEventDataHandler: (response) => - FirstAvailableAppointment( + getTimeSlotsAdditionalEventData( response.data.provisionalTriggers, order.serviceLocation.zipCode, response.data.days?.[0]?.date From 52b54d44dcfd40d688d4cfb45b42f53505eefef4 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Fri, 1 Sep 2023 10:24:47 -0400 Subject: [PATCH 03/12] CSR-1617 | Save quote defect (skip vin-lookup) --- src/helpers/heritage-integration/navigation-helper.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index db7881527..3d1115000 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -68,12 +68,14 @@ export async function navigateToHeritageFunnel({ shouldSaveSession = true, loadi } export async function skipVinLookup() { + if (store.getters.damage.isRepair) { + return true; + } const isVinOptionalVehicle = store.getters.order.vehicle.make ? await store.dispatch(storeActions.IS_VIN_OPTIONAL_VEHICLE) : false; return ( - store.getters.damage.isRepair || isVinOptionalVehicle || !includesWindshieldReplacement() || experimentMixin.methods.hasSettingEqualTo(experimentSettings.SUPPRESS_VIN_CAPTURE, "true") From b14119278e4f7e17a5c342bcc479d6483f852f95 Mon Sep 17 00:00:00 2001 From: CarlNation <32103961+CarlNation@users.noreply.github.com> Date: Fri, 1 Sep 2023 10:58:07 -0400 Subject: [PATCH 04/12] CSR-1623 persist promo code and pass to heritage --- src/constants/query-strings.js | 1 + .../heritage-integration/navigation-helper.js | 13 +++++++++++-- src/router/index.js | 16 ++++++++-------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/constants/query-strings.js b/src/constants/query-strings.js index 5ff1f636c..a0009bae0 100644 --- a/src/constants/query-strings.js +++ b/src/constants/query-strings.js @@ -2,6 +2,7 @@ const queryStrings = { FMG_PAGE: "fmgPage", START_TYPE: "start_type", ZIP_CODE: "zipcode", + PROMO: "promo", }; export { queryStrings }; diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index db7881527..ff651aab5 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -1,4 +1,5 @@ import { queryStrings } from "@/constants/query-strings"; +import { getQuerystringParameter } from "@/helpers/querystring-helper"; import { externalUrls } from "@/router/router-constants/externalUrl-values"; import { lazyLoadComponent } from "@/router/dynamic-routing/component-loader.js"; import { saveSession } from "@/helpers/heritage-integration/order-helper.js"; @@ -59,12 +60,20 @@ export async function navigateToHeritageFunnel({ shouldSaveSession = true, loadi loadingModal.showModal(); } - router.navigateToExternalUrl(externalUrls.HERITAGE_FUNNEL, { + var heritageParms = { corid: store.getters.order.referralCorrelationId, src: "concept-funnel", conceptsqid: store.getters.applicationUser.savedSessionId, isInsurance: store.getters.payment.isInsurance, - }); + }; + + const promo = getQuerystringParameter(queryStrings.PROMO) + + if (promo) { + heritageParms["promo"] = promo; + } + + router.navigateToExternalUrl(externalUrls.HERITAGE_FUNNEL, heritageParms); } export async function skipVinLookup() { diff --git a/src/router/index.js b/src/router/index.js index 11efa6080..424d09dcd 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -6,6 +6,7 @@ import { lazyLoadComponent } from "@/router/dynamic-routing/component-loader.js" import { routingTable } from "@/router/router-constants/routing-table.js"; import { globalEvents, globalEventTypes } from "@/constants/events"; import { queryStrings } from "@/constants/query-strings"; +import { getQuerystringParameter } from "@/helpers/querystring-helper"; import { getDeviceIdValue } from "@/helpers/heritage-integration/cookie-helper"; // Heritage integration @@ -277,14 +278,9 @@ async function navigate( fmgPage: destinationFmgPageValue, }; - const queryString = window.location.search; - const urlParams = new URLSearchParams(queryString); - const lowerCaseParams = new URLSearchParams(); - for (const [name, value] of urlParams) { - lowerCaseParams.append(name.toLowerCase(), value); - } - const hasZip = lowerCaseParams.has(queryStrings.ZIP_CODE); - const zip = lowerCaseParams.get(queryStrings.ZIP_CODE); + const hasZip = getQuerystringParameter(queryStrings.ZIP_CODE) + const zip = getQuerystringParameter(queryStrings.ZIP_CODE) + const promo = getQuerystringParameter(queryStrings.PROMO) if ( hasZip && @@ -296,6 +292,10 @@ async function navigate( queryStringsObject[queryStrings.ZIP_CODE] = zip; } + if (promo) { + queryStringsObject[queryStrings.PROMO] = promo; + } + router.push({ name: "root", query: Object.assign(optionalQuery, queryStringsObject), From c18bdec2abfd5b5e427e110fe26d0a52470e11eb Mon Sep 17 00:00:00 2001 From: CarlNation Date: Fri, 1 Sep 2023 11:04:48 -0400 Subject: [PATCH 05/12] CSR-1623 missed semi-colons prettier --- src/helpers/heritage-integration/navigation-helper.js | 2 +- src/router/index.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index ff651aab5..1769bfa4e 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -67,7 +67,7 @@ export async function navigateToHeritageFunnel({ shouldSaveSession = true, loadi isInsurance: store.getters.payment.isInsurance, }; - const promo = getQuerystringParameter(queryStrings.PROMO) + const promo = getQuerystringParameter(queryStrings.PROMO); if (promo) { heritageParms["promo"] = promo; diff --git a/src/router/index.js b/src/router/index.js index 424d09dcd..58a3059b5 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -278,9 +278,9 @@ async function navigate( fmgPage: destinationFmgPageValue, }; - const hasZip = getQuerystringParameter(queryStrings.ZIP_CODE) - const zip = getQuerystringParameter(queryStrings.ZIP_CODE) - const promo = getQuerystringParameter(queryStrings.PROMO) + const hasZip = getQuerystringParameter(queryStrings.ZIP_CODE); + const zip = getQuerystringParameter(queryStrings.ZIP_CODE); + const promo = getQuerystringParameter(queryStrings.PROMO); if ( hasZip && From 29d3c08b365a255b3b6a87fb32f6f97108b6e650 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Tue, 5 Sep 2023 10:18:47 -0400 Subject: [PATCH 06/12] CSR-1617 | Defect fix - IsVinOptionalNotRepair --- src/helpers/heritage-integration/navigation-helper.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index 3d1115000..b9207e04b 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -83,18 +83,21 @@ export async function skipVinLookup() { } export async function skipVinLookupNotRepair() { + if (store.getters.damage.isRepair) { + return false; + } + const isVinOptionalVehicle = store.getters.order.vehicle.make ? await store.dispatch(storeActions.IS_VIN_OPTIONAL_VEHICLE) : false; return ( - !store.getters.damage.isRepair && - (isVinOptionalVehicle || + isVinOptionalVehicle || !includesWindshieldReplacement() || experimentMixin.methods.hasSettingEqualTo( experimentSettings.SUPPRESS_VIN_CAPTURE, "true" - )) + ) ); } From a6e40db17c7b20f56ac99de65d138beba3ae5cb8 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Tue, 5 Sep 2023 10:19:31 -0400 Subject: [PATCH 07/12] CSR-1617 | Formatting --- src/helpers/heritage-integration/navigation-helper.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index b9207e04b..c52cef86d 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -93,11 +93,8 @@ export async function skipVinLookupNotRepair() { return ( isVinOptionalVehicle || - !includesWindshieldReplacement() || - experimentMixin.methods.hasSettingEqualTo( - experimentSettings.SUPPRESS_VIN_CAPTURE, - "true" - ) + !includesWindshieldReplacement() || + experimentMixin.methods.hasSettingEqualTo(experimentSettings.SUPPRESS_VIN_CAPTURE, "true") ); } From a3dff865ea696d3ca8c03154a413b6768f29172c Mon Sep 17 00:00:00 2001 From: CarlNation <32103961+CarlNation@users.noreply.github.com> Date: Fri, 8 Sep 2023 08:25:44 -0400 Subject: [PATCH 08/12] CSR-1625 router/index.js assumes a load-session successful response should always go to heritage. This may have been true in the initial version of NextGen but now we can load and direct it to the correct page. The incorrect routing to heritage was also failing here for returning users that already had a NextGen cookie. The error caused us to route to the beginning. Fixed that error by removing the default true in the navigateToHeritageFunnel and changing all calls to pass a true or false. --- .../heritage-integration/navigation-helper.js | 13 ++---- .../navigation-helper.spec.js | 42 ++++++------------- src/layouts/estimate/estimate.vue | 5 ++- src/layouts/quote/quote.vue | 5 ++- src/layouts/schedule/schedule.vue | 5 ++- src/mixins/vehicle-questions-mixin.js | 10 ++++- src/router/index.js | 12 +----- 7 files changed, 37 insertions(+), 55 deletions(-) diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index 8d22ee901..78080479e 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -17,15 +17,11 @@ import router from "@/router"; drop them so they don't start at the beginning again. This method will return 'heritage' if the user has an existing order and they come back in from the Safelite.com CTA. */ -export async function getPageToRouteExistingOrderTo(toRoute = {}, existingHeritageOrder = false) { +export async function getPageToRouteExistingOrderTo(toRoute = {}) { // If the user is coming in via the Safelite.Com CTA if (toRoute.query[queryStrings.START_TYPE] === "fmg") { - // If they have an existing order, return 'heritage' for the page name. - if (existingHeritageOrder) { - return fmgPageValues.HERITAGE; - } - - return await getLatestPageForRedirection(); + const latestPageRoute = await getLatestPageForRedirection(); + return latestPageRoute; } // If navigating to a specific page, and that page is not part of the vin pages. @@ -42,7 +38,6 @@ export async function getPageToRouteExistingOrderTo(toRoute = {}, existingHerita // If this is not a direct link to a page using fmgPage, not from Safelite.com CTA or this is a vin related page. // Get the latest page for redirection. const latestPageRoute = await getLatestPageForRedirection(); - return latestPageRoute; } @@ -50,7 +45,7 @@ export async function getPageToRouteExistingOrderTo(toRoute = {}, existingHerita Used to navigate to the heritage funnel with the correct query string and url. */ -export async function navigateToHeritageFunnel({ shouldSaveSession = true, loadingModal }) { +export async function navigateToHeritageFunnel({ shouldSaveSession, loadingModal }) { // Create the order (or save existing order) when navigating to Heritage Funnel. if (shouldSaveSession) { await saveSession({ shouldAwaitSaveSessionQueue: true }); diff --git a/src/helpers/heritage-integration/navigation-helper.spec.js b/src/helpers/heritage-integration/navigation-helper.spec.js index d08ce92ec..c3bafc2da 100644 --- a/src/helpers/heritage-integration/navigation-helper.spec.js +++ b/src/helpers/heritage-integration/navigation-helper.spec.js @@ -35,7 +35,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.VEHICLE_YEAR); @@ -57,7 +57,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.VEHICLE_MAKE); @@ -80,7 +80,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.VEHICLE_MODEL); @@ -104,7 +104,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.VEHICLE_STYLE); @@ -129,7 +129,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.VEHICLE_DAMAGE); @@ -169,7 +169,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.ESTIMATE); @@ -199,7 +199,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.ESTIMATE); @@ -229,7 +229,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.CAPABILITY_QUESTIONS); @@ -259,7 +259,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.MOLDING_QUESTIONS); @@ -289,7 +289,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.VEHICLE_PARTS); @@ -319,29 +319,11 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.PART_QUESTIONS); }); - - test("existing order > should return heritage", async () => { - // Arrange - const toRoute = { - query: { - [queryStrings.START_TYPE]: "fmg", - }, - }; - - store.commit(storeMutations.UPDATE_IS_REPAIR, false); - store.commit(storeMutations.UPDATE_MAKE, "acura"); - - // Act - const result = await getPageToRouteExistingOrderTo(toRoute, true); - - // Assert - expect(result).toBe(fmgPageValues.HERITAGE); - }); }); describe("navigateToHeritageFunnel", () => { @@ -377,7 +359,7 @@ describe("navigateToHeritageFunnel", () => { router.navigateToExternalUrl = jest.fn(); // Act - await navigateToHeritageFunnel({}); + await navigateToHeritageFunnel({loadingModal:null, shouldSaveSession:true}); // Assert expect(saveSessionFunction).toHaveBeenCalled(); diff --git a/src/layouts/estimate/estimate.vue b/src/layouts/estimate/estimate.vue index d18af242c..5ae10cb9c 100644 --- a/src/layouts/estimate/estimate.vue +++ b/src/layouts/estimate/estimate.vue @@ -255,7 +255,10 @@ export default { const vehicleChangedDuringPolicyLookupInHeritage = payment.isInsurance && payment.insuranceCoverage.coverageStatus; if (vehicleChangedDuringPolicyLookupInHeritage) { - navigateToHeritageFunnel({ loadingModal: this.$refs.loadingModal }); + navigateToHeritageFunnel({ + shouldSaveSession: true, + loadingModal: this.$refs.loadingModal, + }); } else if (this.$store.getters.order.referralNumber?.length === 6) { await this.navigateForwardWithSingleCarMatch(); } else if (this.isRepair) { diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue index 99d824af5..30d15ba4c 100644 --- a/src/layouts/quote/quote.vue +++ b/src/layouts/quote/quote.vue @@ -216,7 +216,10 @@ export default { const payment = this.$store.getters.payment; if (payment.isInsurance) { - navigateToHeritageFunnel({ loadingModal: this.$refs.loadingModal }); + navigateToHeritageFunnel({ + shouldSaveSession: true, + loadingModal: this.$refs.loadingModal, + }); } else { this.$router.navigateWithSaving( this.navigationScenarios.CLICKED_FORWARD_WITH_CASH, diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index 1ff1c18e7..3fda3d7e0 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -418,7 +418,10 @@ export default { this.appointmentDateAndTime, false ); - navigateToHeritageFunnel({ loadingModal: this.$refs.loadingModal }); + navigateToHeritageFunnel({ + shouldSaveSession: true, + loadingModal: this.$refs.loadingModal, + }); }, updateSupportingItems() { diff --git a/src/mixins/vehicle-questions-mixin.js b/src/mixins/vehicle-questions-mixin.js index 4b05067ea..fb54c059f 100644 --- a/src/mixins/vehicle-questions-mixin.js +++ b/src/mixins/vehicle-questions-mixin.js @@ -447,9 +447,15 @@ export default { const payment = store.getters.payment; if (store.getters.order.referralNumber?.length === 6) { - navigateToHeritageFunnel({ loadingModal: self.$refs.loadingModal }); + navigateToHeritageFunnel({ + shouldSaveSession: true, + loadingModal: self.$refs.loadingModal, + }); } else if (payment.isInsurance && payment.insuranceCoverage.isVerified) { - navigateToHeritageFunnel({ loadingModal: self.$refs.loadingModal }); + navigateToHeritageFunnel({ + shouldSaveSession: true, + loadingModal: self.$refs.loadingModal, + }); } else { self.$router.navigateWithSaving( self.navigationScenarios.CLICKED_FORWARD_WITH_NO_MORE_QUESTIONS, diff --git a/src/router/index.js b/src/router/index.js index 58a3059b5..76892f76c 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -68,17 +68,7 @@ const routes = [ : null ); - const pageToRedirectTo = await getPageToRouteExistingOrderTo( - to, - loadSessionResponse - ); - - // If getPageToRouteExistingOrderTo determines that the return user needs to - // go back to heritage funnel, send them there and stop our current navigation. - if (pageToRedirectTo === "heritage") { - await navigateToHeritageFunnel(); - return next(false); - } + const pageToRedirectTo = await getPageToRouteExistingOrderTo(to); // Assign our fmgPage so it will load normally like the other pages. to.query.fmgPage = pageToRedirectTo; From 9e3e2a820bf6cad64f3b6225a7f1d067030a61cd Mon Sep 17 00:00:00 2001 From: CarlNation Date: Fri, 8 Sep 2023 08:29:47 -0400 Subject: [PATCH 09/12] CSR-1625 prettier --- src/helpers/heritage-integration/navigation-helper.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/helpers/heritage-integration/navigation-helper.spec.js b/src/helpers/heritage-integration/navigation-helper.spec.js index c3bafc2da..145258c75 100644 --- a/src/helpers/heritage-integration/navigation-helper.spec.js +++ b/src/helpers/heritage-integration/navigation-helper.spec.js @@ -359,7 +359,7 @@ describe("navigateToHeritageFunnel", () => { router.navigateToExternalUrl = jest.fn(); // Act - await navigateToHeritageFunnel({loadingModal:null, shouldSaveSession:true}); + await navigateToHeritageFunnel({ loadingModal: null, shouldSaveSession: true }); // Assert expect(saveSessionFunction).toHaveBeenCalled(); From adaa964a4cc7c2481685d1ef30e0cdcae57aa9cd Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Fri, 8 Sep 2023 16:43:19 -0400 Subject: [PATCH 10/12] CSR-1635 | Move supportingItems save to store to Quote page load --- src/layouts/quote/quote.vue | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue index 30d15ba4c..61287610b 100644 --- a/src/layouts/quote/quote.vue +++ b/src/layouts/quote/quote.vue @@ -121,6 +121,12 @@ export default { false ); + baseMixin.methods.dispatchStoreAction( + storeActions.SAVE_SUPPORTING_ITEMS, + resultMap.supportingItems, + false + ); + // Call the "next" function to complete the transition to this page. next((vm) => { vm.setCmsContent(resultMap.cmsContent); @@ -206,12 +212,6 @@ export default { ); } - this.dispatchStoreAction( - this.storeActions.SAVE_SUPPORTING_ITEMS, - this.supportingItems, - false - ); - this.dispatchStoreAction(this.storeActions.SAVE_VAPS, this.selectedVaps, false); const payment = this.$store.getters.payment; From 2da09b11b7bf07c99233a9e5892057d06ace9f4f Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Tue, 12 Sep 2023 11:20:13 -0400 Subject: [PATCH 11/12] CSR-1642 | Mobile fee not being saved to supporting items fix --- .../service-location/service-location.vue | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/layouts/service-location/service-location.vue b/src/layouts/service-location/service-location.vue index 2c0e0619b..c25826121 100644 --- a/src/layouts/service-location/service-location.vue +++ b/src/layouts/service-location/service-location.vue @@ -116,6 +116,8 @@ import store from "@/store"; import { defineRule } from "vee-validate"; import { errorMessages } from "@/constants/error-messages"; +const MOBILE_FEE_PART_TYPE = "MOBILE FEE"; + // DEFINE VALIDATION RULES defineRule("mobile-location-required", (value) => { if ( @@ -375,6 +377,49 @@ export default { backButtonAction() { this.$router.navigateWithoutSaving(this.navigationScenarios.CLICKED_BACK, this.$route); }, + updateAndSaveSupportingItems() { + const supportingItems = store.getters.lineItems.supportingItems; + // if we have a mobile fee, then save/update supporting items + if ( + this.selectedAppointmentType == "Mobile" + ) { + const mobileFeeIndex = supportingItems.findIndex( + (item) => item.partType == MOBILE_FEE_PART_TYPE + ); + // If it already exists, update the price with latest data + if (mobileFeeIndex >= 0) { + supportingItems[mobileFeeIndex].laborAmount = + this.mobileFeePart.laborAmount; + supportingItems[mobileFeeIndex].selingPrice = + this.mobileFeePart.selingPrice; + supportingItems[mobileFeeIndex].kitPrice = + this.mobileFeePart.kitPrice; + } else { + supportingItems.push(this.mobileFeePart); + } + + this.dispatchStoreAction( + this.storeActions.SAVE_SUPPORTING_ITEMS_SUPPRESSING_STATE_RESETTING, + supportingItems, + false + ); + } else { + + // if it's not a mobile, then make sure we remove any that may have been added + const removeMobileFeeIndex = supportingItems.findIndex( + (item) => item.partType == MOBILE_FEE_PART_TYPE + ); + + if (removeMobileFeeIndex >= 0) { + supportingItems.splice(removeMobileFeeIndex, 1); + this.dispatchStoreAction( + this.storeActions.SAVE_SUPPORTING_ITEMS_SUPPRESSING_STATE_RESETTING, + supportingItems, + false + ); + } + } + }, async forwardButtonAction() { await this.dispatchStoreAction( this.storeActions.SAVE_SERVICE_LOCATION, @@ -401,6 +446,8 @@ export default { false ); + this.updateAndSaveSupportingItems(); + this.$router.navigateWithSaving( this.navigationScenarios.SELECTED_LOCATION, this.$route From b73abadebd2e5dfb623069303c5f0876e039cba3 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Tue, 12 Sep 2023 11:22:00 -0400 Subject: [PATCH 12/12] CSR-1614 | Formatting --- src/layouts/service-location/service-location.vue | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/layouts/service-location/service-location.vue b/src/layouts/service-location/service-location.vue index c25826121..0eaaffbd4 100644 --- a/src/layouts/service-location/service-location.vue +++ b/src/layouts/service-location/service-location.vue @@ -380,20 +380,15 @@ export default { updateAndSaveSupportingItems() { const supportingItems = store.getters.lineItems.supportingItems; // if we have a mobile fee, then save/update supporting items - if ( - this.selectedAppointmentType == "Mobile" - ) { + if (this.selectedAppointmentType == "Mobile") { const mobileFeeIndex = supportingItems.findIndex( (item) => item.partType == MOBILE_FEE_PART_TYPE ); // If it already exists, update the price with latest data if (mobileFeeIndex >= 0) { - supportingItems[mobileFeeIndex].laborAmount = - this.mobileFeePart.laborAmount; - supportingItems[mobileFeeIndex].selingPrice = - this.mobileFeePart.selingPrice; - supportingItems[mobileFeeIndex].kitPrice = - this.mobileFeePart.kitPrice; + supportingItems[mobileFeeIndex].laborAmount = this.mobileFeePart.laborAmount; + supportingItems[mobileFeeIndex].selingPrice = this.mobileFeePart.selingPrice; + supportingItems[mobileFeeIndex].kitPrice = this.mobileFeePart.kitPrice; } else { supportingItems.push(this.mobileFeePart); } @@ -404,7 +399,6 @@ export default { false ); } else { - // if it's not a mobile, then make sure we remove any that may have been added const removeMobileFeeIndex = supportingItems.findIndex( (item) => item.partType == MOBILE_FEE_PART_TYPE