From bb5b200d303032f95f5378a2e31671223db5f9e7 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Wed, 2 Apr 2025 09:54:34 -0400 Subject: [PATCH 01/18] More cleanup --- src/fmg-components/cart/cart.vue | 18 +++++++++--------- src/layouts/confirmation/confirmation.vue | 4 +--- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue index 1cc1bb484..a4a0e0243 100644 --- a/src/fmg-components/cart/cart.vue +++ b/src/fmg-components/cart/cart.vue @@ -401,11 +401,15 @@ export default { if (!this.lineItems || this.lineItems.length < 1) { return []; } + let supportingItemsToAdd = []; + if (this.lineItems.supportingItems) { + supportingItemsToAdd = this.lineItems.supportingItems.filter( + (item) => item.partType !== partTypeStrings.DONATION + ) + } return [ ...(this.lineItems.glassParts ?? []), - ...(this.lineItems.supportingItems.filter( - (item) => item.partType !== partTypeStrings.DONATION - ) ?? []), + ...supportingItemsToAdd, ...(this.availableVaps ?? []), ]; }, @@ -1074,11 +1078,7 @@ export default { const donationLineItem = this.lineItems.supportingItems.find( (item) => item.partType === partTypeStrings.DONATION ); - if (donationLineItem?.sellingPrice !== 0) { - return true; - } else { - return false; - } + return !!donationLineItem; }, donationCartItemName() { return this.getCmsContent("DonationCartTextWidget", "Text"); @@ -1092,7 +1092,7 @@ export default { (item) => item.partType === partTypeStrings.DONATION ); - if (donationLineItem?.sellingPrice > 0) { + if (donationLineItem) { return { name: this.donationCartItemName, category: cartItemCategories.SUPPORTING_ITEMS, diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue index 12415226b..8e49f298d 100644 --- a/src/layouts/confirmation/confirmation.vue +++ b/src/layouts/confirmation/confirmation.vue @@ -63,9 +63,7 @@ :isExpandedOnLoad="false" :isItac="isItac" :isNoComp="isNoComp" - :isMSRFeeApplicable="isMSRFeeApplicable" - :donationAmount="donationAmount" - @update-donation-amount="updateDonationAmount" /> + :isMSRFeeApplicable="isMSRFeeApplicable" />
Date: Wed, 2 Apr 2025 10:04:44 -0400 Subject: [PATCH 02/18] Formatting --- src/fmg-components/cart/cart.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue index a4a0e0243..2a715bc93 100644 --- a/src/fmg-components/cart/cart.vue +++ b/src/fmg-components/cart/cart.vue @@ -405,7 +405,7 @@ export default { if (this.lineItems.supportingItems) { supportingItemsToAdd = this.lineItems.supportingItems.filter( (item) => item.partType !== partTypeStrings.DONATION - ) + ); } return [ ...(this.lineItems.glassParts ?? []), From 958c6cc6ece2b344cdc266447b866c95dc5de667 Mon Sep 17 00:00:00 2001 From: hiteshkumar87 Date: Thu, 3 Apr 2025 14:43:52 +0530 Subject: [PATCH 03/18] CASH-134 spacing before footer text --- src/experiment-components/donation-block.vue | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/experiment-components/donation-block.vue b/src/experiment-components/donation-block.vue index c90e6af14..1710440d6 100644 --- a/src/experiment-components/donation-block.vue +++ b/src/experiment-components/donation-block.vue @@ -62,11 +62,11 @@
-
+
-

+

@@ -261,6 +261,8 @@ export default { } .alert { border: 1px solid $red; + margin-top: 0.5rem; + margin-bottom: 0.5rem; } .btn-success { background: $green-100; From e894522acbdd29d1e032b7940da54a1b1e653ad0 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 3 Apr 2025 10:12:02 -0400 Subject: [PATCH 04/18] CASH-462 | First look at order changes --- src/global-methods.js | 2 +- src/helpers/pricing-helper.js | 2 +- src/layouts/confirmation/confirmation.vue | 92 +++++++++++------------ src/store/index.js | 6 +- 4 files changed, 53 insertions(+), 49 deletions(-) diff --git a/src/global-methods.js b/src/global-methods.js index ba6cec1ec..01d0c9488 100644 --- a/src/global-methods.js +++ b/src/global-methods.js @@ -61,7 +61,7 @@ export default { const cfDistroUrl = applicationConfig.CONSUMER_CF_DISTRO; const submittedOrder = baseMixin.methods.getSubmittedOrder(); const hasSubmittedOrder = baseMixin.methods.hasSubmittedOrder(); - const order = hasSubmittedOrder ? submittedOrder : store.getters.order; + const order = hasSubmittedOrder ? submittedOrder.order : store.getters.order; const payloadAndAnalyticsData = Object.assign({}, payload, { AppName: "FixMyGlass" }); const headers = { [headerKeys.EXPERIMENT]: JSON.stringify(store.getters.experimentSettings), diff --git a/src/helpers/pricing-helper.js b/src/helpers/pricing-helper.js index fda5b3b9c..4c87b8cf4 100644 --- a/src/helpers/pricing-helper.js +++ b/src/helpers/pricing-helper.js @@ -12,7 +12,7 @@ export function getDisplayAmountDue(lineItemsObject, includeTax = true) { export function getAmountDue(lineItemsObject, includeTax = true) { let amountDue = 0; const order = baseMixin?.methods?.hasSubmittedOrder() - ? baseMixin?.methods?.getSubmittedOrder() + ? baseMixin?.methods?.getSubmittedOrder().order : store.getters.order; if (lineItemsObject?.glassParts) { diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue index 8e49f298d..0aadfdf5c 100644 --- a/src/layouts/confirmation/confirmation.vue +++ b/src/layouts/confirmation/confirmation.vue @@ -173,8 +173,8 @@ export default { const wipersPromise = baseMixin.methods.dispatchStoreActionWithLogging( storeActions.GET_WIPERS, { - serviceZipCode: submittedOrder.serviceLocation.zipCode, - carId: submittedOrder.vehicle.carId, + serviceZipCode: submittedOrder.order.serviceLocation.zipCode, + carId: submittedOrder.order.vehicle.carId, }, "confirmation" ); @@ -203,10 +203,10 @@ export default { const resultMap = await settleAllPromises(promiseResultMap); const availableVaps = [resultMap.rainDefense, ...resultMap.wipers]; - const lineItemsFromSubmittedOrder = deepClone(submittedOrder.lineItems); + const lineItemsFromSubmittedOrder = deepClone(submittedOrder.order.lineItems); - const isNoComp = submittedOrder?.policy?.isNoComp; - const isItac = submittedOrder?.policy?.isItac; + const isNoComp = submittedOrder?.order?.policy?.isNoComp; + const isItac = submittedOrder?.order?.policy?.isItac; const isRecalibrationOnOrder = containsRecalParts(lineItemsFromSubmittedOrder); const shouldHideRecalibration = () => { @@ -254,7 +254,7 @@ export default { return containsRecalParts(this?.lineItems); }, ShowCart() { - if (this.isPia && this.submittedOrder?.settledTenderAmount == 0) { + if (this.isPia && this.submittedOrder?.order?.settledTenderAmount == 0) { // settleTenderAmount always shows 0 via localhost or dev. // Temporarily set return true to see cart in localhost or dev environment return false; @@ -269,13 +269,13 @@ export default { return this.getCmsContent("ScheduleConfirmationWidget", "Image"); }, CustomerPortalLoginToken() { - return this.submittedOrder?.customerPortalLoginToken; + return this.submittedOrder?.order.customerPortalLoginToken; }, ConfirmationEmailText() { return this.getCmsContent("ConfirmationEmailWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.customer.emailAddress}", - this.submittedOrder?.customer?.emailAddress + this.submittedOrder?.order.customer?.emailAddress ) ?.replaceAll("{custom:MY_ACCOUNT_URL}", applicationConfig.MY_ACCOUNT) ?.replaceAll("{custom:CUSTOMER_PORTAL_LOGIN_TOKEN}", this.CustomerPortalLoginToken) @@ -283,88 +283,88 @@ export default { ?.replaceAll(">", ">"); }, ScheduleDate() { - return this.submittedOrder?.schedule?.date; + return this.submittedOrder?.order.schedule?.date; }, AppointmentType() { - return this.submittedOrder?.serviceLocation?.appointmentType; + return this.submittedOrder?.order.serviceLocation?.appointmentType; }, ScheduleStartTime() { - return this.submittedOrder?.schedule?.startTime; + return this.submittedOrder?.order.schedule?.startTime; }, ScheduleEndTime() { - return this.submittedOrder?.schedule?.endTime; + return this.submittedOrder?.order.schedule?.endTime; }, InShopWordingText() { return this.getCmsContent("InShopWordingWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.vehicle.year}", - this.submittedOrder?.vehicle?.year + this.submittedOrder?.order?.vehicle?.year ) ?.replaceAll( "{custom:submittedOrder.vehicle.make}", - this.submittedOrder?.vehicle?.make + this.submittedOrder?.order?.vehicle?.make ) ?.replaceAll( "{custom:submittedOrder.vehicle.model}", - this.submittedOrder?.vehicle?.model + this.submittedOrder?.order?.vehicle?.model ); }, MobileWordingText() { return this.getCmsContent("MobileWordingWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.vehicle.year}", - this.submittedOrder?.vehicle?.year + this.submittedOrder?.order?.vehicle?.year ) ?.replaceAll( "{custom:submittedOrder.vehicle.make}", - this.submittedOrder?.vehicle?.make + this.submittedOrder?.order?.vehicle?.make ) ?.replaceAll( "{custom:submittedOrder.vehicle.model}", - this.submittedOrder?.vehicle?.model + this.submittedOrder?.order?.vehicle?.model ); }, DropOffWordingText() { return this.getCmsContent("DropOffWordingWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.vehicle.year}", - this.submittedOrder?.vehicle?.year + this.submittedOrder?.order?.vehicle?.year ) ?.replaceAll( "{custom:submittedOrder.vehicle.make}", - this.submittedOrder?.vehicle?.make + this.submittedOrder?.order?.vehicle?.make ) ?.replaceAll( "{custom:submittedOrder.vehicle.model}", - this.submittedOrder?.vehicle?.model + this.submittedOrder?.order?.vehicle?.model ); }, ServiceLocationAddress() { - return this.submittedOrder?.serviceLocation?.address; + return this.submittedOrder?.order?.serviceLocation?.address; }, ServiceLocationAddress2() { - return this.submittedOrder?.serviceLocation?.address2; + return this.submittedOrder?.order?.serviceLocation?.address2; }, ServiceLocationCity() { - return this.submittedOrder?.serviceLocation?.city; + return this.submittedOrder?.order?.serviceLocation?.city; }, ServiceLocationState() { - return this.submittedOrder?.serviceLocation?.state; + return this.submittedOrder?.order?.serviceLocation?.state; }, ServiceLocationZipCode() { - return this.submittedOrder?.serviceLocation?.zipCode; + return this.submittedOrder?.order?.serviceLocation?.zipCode; }, ProviderAddress() { - return this.submittedOrder?.serviceLocation?.provider?.address?.streetAddress; + return this.submittedOrder?.order?.serviceLocation?.provider?.address?.streetAddress; }, ProviderCity() { - return this.submittedOrder?.serviceLocation?.provider?.address?.city; + return this.submittedOrder?.order?.serviceLocation?.provider?.address?.city; }, ProviderState() { - return this.submittedOrder?.serviceLocation?.provider?.address?.state; + return this.submittedOrder?.order?.serviceLocation?.provider?.address?.state; }, ProviderZipCode() { - return this.submittedOrder?.serviceLocation?.provider?.address?.zipCode; + return this.submittedOrder?.order?.serviceLocation?.provider?.address?.zipCode; }, AppointmentWordingText() { if (this.AppointmentType == AppointmentTypeStrings.MOBILE) { @@ -408,7 +408,7 @@ export default { } if (this.AppointmentType == AppointmentTypeStrings.DROP_OFF) { if ( - this.submittedOrder?.schedule?.routeCode.includes( + this.submittedOrder?.order?.schedule?.routeCode.includes( RouteCodeFlags.OVERNIGHT_DROP_OFF ) ) { @@ -420,22 +420,22 @@ export default { return `at ${get12HourTimeFormat(this.ScheduleStartTime)}`; }, vehicleBannerImageUrl() { - return this.submittedOrder?.vehicle.imageUrl; + return this.submittedOrder?.order?.vehicle.imageUrl; }, damageInfo() { - return this.submittedOrder?.damage; + return this.submittedOrder?.order?.damage; }, isMSRFeeApplicable() { - return this.submittedOrder?.isMSRFeeApplicable; + return this.submittedOrder?.order?.isMSRFeeApplicable; }, isInsurance() { - return this.submittedOrder?.payment?.isInsurance; + return this.submittedOrder?.order?.payment?.isInsurance; }, isNoComp() { - return this.submittedOrder?.policy?.isNoComp; + return this.submittedOrder?.order?.policy?.isNoComp; }, isItac() { - return this.submittedOrder?.policy?.isItac; + return this.submittedOrder?.order?.policy?.isItac; }, hasVapsInCart() { if (this.lineItems?.vaps?.length > 0) { @@ -448,28 +448,28 @@ export default { if (this.isNoComp || this.isItac) { return coverageStatus.NOCOMP; } else { - return this.submittedOrder?.payment?.insuranceCoverage?.coverageStatus; + return this.submittedOrder?.order?.payment?.insuranceCoverage?.coverageStatus; } }, currentDeductible() { - return this.submittedOrder?.policy?.currentDeductible; + return this.submittedOrder?.order?.policy?.currentDeductible; }, insuranceCompanyName() { - return this.submittedOrder?.policy?.insuranceCompanyName; + return this.submittedOrder?.order?.policy?.insuranceCompanyName; }, isPia() { - return this.submittedOrder?.payment?.isPia; + return this.submittedOrder?.order?.payment?.isPia; }, AppointmentDuration() { - const durationMaximum = this.submittedOrder?.schedule?.jobMaxMinutes; - const durationMinimum = this.submittedOrder?.schedule?.jobMinMinutes; + const durationMaximum = this.submittedOrder?.order?.schedule?.jobMaxMinutes; + const durationMinimum = this.submittedOrder?.order?.schedule?.jobMinMinutes; const durationLengthString = "Duration: "; if ( - this.submittedOrder?.schedule?.routeCode.includes(RouteCodeFlags.ALL_DAY_DROP_OFF) + this.submittedOrder?.order?.schedule?.routeCode.includes(RouteCodeFlags.ALL_DAY_DROP_OFF) ) { return durationLengthString.concat("All Day"); } else if ( - this.submittedOrder?.schedule?.routeCode.includes(RouteCodeFlags.OVERNIGHT_DROP_OFF) + this.submittedOrder?.order?.schedule?.routeCode.includes(RouteCodeFlags.OVERNIGHT_DROP_OFF) ) { return durationLengthString.concat("Overnight"); } else { @@ -541,7 +541,7 @@ export default { parseInt(this.donationAmount), false ); - this.lineItems = deepClone(this.getSubmittedOrder().lineItems); + this.lineItems = deepClone(this.getSubmittedOrder().order.lineItems); } else { this.showDonationError = true; this.showDonationSuccess = false; diff --git a/src/store/index.js b/src/store/index.js index 032660c6f..05cb572e1 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1854,6 +1854,7 @@ export const actions = { if (windshieldPartWithRecal) { url += `/${windshieldPartWithRecal.partNumber}`; } + url += "/false"; return globalMethods.callHttpClient({ method: endpoints.GetProviders.method, @@ -3263,7 +3264,10 @@ export const actions = { } // create a submitted order object from vuex. - const submittedOrder = context.state.order; + const submittedOrder = { + order: context.state.order, + applicationUser: context.state.applicationUser, + }; const experiments = context.state.applicationUser.experiments; const affiliateCookies = context.state.applicationUser.affiliateCookies; From d38cc5f2e65f298120af51c53778ca74176fc77d Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 3 Apr 2025 10:31:52 -0400 Subject: [PATCH 05/18] Revert "CASH-462 | First look at order changes" This reverts commit e894522acbdd29d1e032b7940da54a1b1e653ad0. --- src/global-methods.js | 2 +- src/helpers/pricing-helper.js | 2 +- src/layouts/confirmation/confirmation.vue | 92 +++++++++++------------ src/store/index.js | 6 +- 4 files changed, 49 insertions(+), 53 deletions(-) diff --git a/src/global-methods.js b/src/global-methods.js index 01d0c9488..ba6cec1ec 100644 --- a/src/global-methods.js +++ b/src/global-methods.js @@ -61,7 +61,7 @@ export default { const cfDistroUrl = applicationConfig.CONSUMER_CF_DISTRO; const submittedOrder = baseMixin.methods.getSubmittedOrder(); const hasSubmittedOrder = baseMixin.methods.hasSubmittedOrder(); - const order = hasSubmittedOrder ? submittedOrder.order : store.getters.order; + const order = hasSubmittedOrder ? submittedOrder : store.getters.order; const payloadAndAnalyticsData = Object.assign({}, payload, { AppName: "FixMyGlass" }); const headers = { [headerKeys.EXPERIMENT]: JSON.stringify(store.getters.experimentSettings), diff --git a/src/helpers/pricing-helper.js b/src/helpers/pricing-helper.js index 4c87b8cf4..fda5b3b9c 100644 --- a/src/helpers/pricing-helper.js +++ b/src/helpers/pricing-helper.js @@ -12,7 +12,7 @@ export function getDisplayAmountDue(lineItemsObject, includeTax = true) { export function getAmountDue(lineItemsObject, includeTax = true) { let amountDue = 0; const order = baseMixin?.methods?.hasSubmittedOrder() - ? baseMixin?.methods?.getSubmittedOrder().order + ? baseMixin?.methods?.getSubmittedOrder() : store.getters.order; if (lineItemsObject?.glassParts) { diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue index 0aadfdf5c..8e49f298d 100644 --- a/src/layouts/confirmation/confirmation.vue +++ b/src/layouts/confirmation/confirmation.vue @@ -173,8 +173,8 @@ export default { const wipersPromise = baseMixin.methods.dispatchStoreActionWithLogging( storeActions.GET_WIPERS, { - serviceZipCode: submittedOrder.order.serviceLocation.zipCode, - carId: submittedOrder.order.vehicle.carId, + serviceZipCode: submittedOrder.serviceLocation.zipCode, + carId: submittedOrder.vehicle.carId, }, "confirmation" ); @@ -203,10 +203,10 @@ export default { const resultMap = await settleAllPromises(promiseResultMap); const availableVaps = [resultMap.rainDefense, ...resultMap.wipers]; - const lineItemsFromSubmittedOrder = deepClone(submittedOrder.order.lineItems); + const lineItemsFromSubmittedOrder = deepClone(submittedOrder.lineItems); - const isNoComp = submittedOrder?.order?.policy?.isNoComp; - const isItac = submittedOrder?.order?.policy?.isItac; + const isNoComp = submittedOrder?.policy?.isNoComp; + const isItac = submittedOrder?.policy?.isItac; const isRecalibrationOnOrder = containsRecalParts(lineItemsFromSubmittedOrder); const shouldHideRecalibration = () => { @@ -254,7 +254,7 @@ export default { return containsRecalParts(this?.lineItems); }, ShowCart() { - if (this.isPia && this.submittedOrder?.order?.settledTenderAmount == 0) { + if (this.isPia && this.submittedOrder?.settledTenderAmount == 0) { // settleTenderAmount always shows 0 via localhost or dev. // Temporarily set return true to see cart in localhost or dev environment return false; @@ -269,13 +269,13 @@ export default { return this.getCmsContent("ScheduleConfirmationWidget", "Image"); }, CustomerPortalLoginToken() { - return this.submittedOrder?.order.customerPortalLoginToken; + return this.submittedOrder?.customerPortalLoginToken; }, ConfirmationEmailText() { return this.getCmsContent("ConfirmationEmailWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.customer.emailAddress}", - this.submittedOrder?.order.customer?.emailAddress + this.submittedOrder?.customer?.emailAddress ) ?.replaceAll("{custom:MY_ACCOUNT_URL}", applicationConfig.MY_ACCOUNT) ?.replaceAll("{custom:CUSTOMER_PORTAL_LOGIN_TOKEN}", this.CustomerPortalLoginToken) @@ -283,88 +283,88 @@ export default { ?.replaceAll(">", ">"); }, ScheduleDate() { - return this.submittedOrder?.order.schedule?.date; + return this.submittedOrder?.schedule?.date; }, AppointmentType() { - return this.submittedOrder?.order.serviceLocation?.appointmentType; + return this.submittedOrder?.serviceLocation?.appointmentType; }, ScheduleStartTime() { - return this.submittedOrder?.order.schedule?.startTime; + return this.submittedOrder?.schedule?.startTime; }, ScheduleEndTime() { - return this.submittedOrder?.order.schedule?.endTime; + return this.submittedOrder?.schedule?.endTime; }, InShopWordingText() { return this.getCmsContent("InShopWordingWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.vehicle.year}", - this.submittedOrder?.order?.vehicle?.year + this.submittedOrder?.vehicle?.year ) ?.replaceAll( "{custom:submittedOrder.vehicle.make}", - this.submittedOrder?.order?.vehicle?.make + this.submittedOrder?.vehicle?.make ) ?.replaceAll( "{custom:submittedOrder.vehicle.model}", - this.submittedOrder?.order?.vehicle?.model + this.submittedOrder?.vehicle?.model ); }, MobileWordingText() { return this.getCmsContent("MobileWordingWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.vehicle.year}", - this.submittedOrder?.order?.vehicle?.year + this.submittedOrder?.vehicle?.year ) ?.replaceAll( "{custom:submittedOrder.vehicle.make}", - this.submittedOrder?.order?.vehicle?.make + this.submittedOrder?.vehicle?.make ) ?.replaceAll( "{custom:submittedOrder.vehicle.model}", - this.submittedOrder?.order?.vehicle?.model + this.submittedOrder?.vehicle?.model ); }, DropOffWordingText() { return this.getCmsContent("DropOffWordingWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.vehicle.year}", - this.submittedOrder?.order?.vehicle?.year + this.submittedOrder?.vehicle?.year ) ?.replaceAll( "{custom:submittedOrder.vehicle.make}", - this.submittedOrder?.order?.vehicle?.make + this.submittedOrder?.vehicle?.make ) ?.replaceAll( "{custom:submittedOrder.vehicle.model}", - this.submittedOrder?.order?.vehicle?.model + this.submittedOrder?.vehicle?.model ); }, ServiceLocationAddress() { - return this.submittedOrder?.order?.serviceLocation?.address; + return this.submittedOrder?.serviceLocation?.address; }, ServiceLocationAddress2() { - return this.submittedOrder?.order?.serviceLocation?.address2; + return this.submittedOrder?.serviceLocation?.address2; }, ServiceLocationCity() { - return this.submittedOrder?.order?.serviceLocation?.city; + return this.submittedOrder?.serviceLocation?.city; }, ServiceLocationState() { - return this.submittedOrder?.order?.serviceLocation?.state; + return this.submittedOrder?.serviceLocation?.state; }, ServiceLocationZipCode() { - return this.submittedOrder?.order?.serviceLocation?.zipCode; + return this.submittedOrder?.serviceLocation?.zipCode; }, ProviderAddress() { - return this.submittedOrder?.order?.serviceLocation?.provider?.address?.streetAddress; + return this.submittedOrder?.serviceLocation?.provider?.address?.streetAddress; }, ProviderCity() { - return this.submittedOrder?.order?.serviceLocation?.provider?.address?.city; + return this.submittedOrder?.serviceLocation?.provider?.address?.city; }, ProviderState() { - return this.submittedOrder?.order?.serviceLocation?.provider?.address?.state; + return this.submittedOrder?.serviceLocation?.provider?.address?.state; }, ProviderZipCode() { - return this.submittedOrder?.order?.serviceLocation?.provider?.address?.zipCode; + return this.submittedOrder?.serviceLocation?.provider?.address?.zipCode; }, AppointmentWordingText() { if (this.AppointmentType == AppointmentTypeStrings.MOBILE) { @@ -408,7 +408,7 @@ export default { } if (this.AppointmentType == AppointmentTypeStrings.DROP_OFF) { if ( - this.submittedOrder?.order?.schedule?.routeCode.includes( + this.submittedOrder?.schedule?.routeCode.includes( RouteCodeFlags.OVERNIGHT_DROP_OFF ) ) { @@ -420,22 +420,22 @@ export default { return `at ${get12HourTimeFormat(this.ScheduleStartTime)}`; }, vehicleBannerImageUrl() { - return this.submittedOrder?.order?.vehicle.imageUrl; + return this.submittedOrder?.vehicle.imageUrl; }, damageInfo() { - return this.submittedOrder?.order?.damage; + return this.submittedOrder?.damage; }, isMSRFeeApplicable() { - return this.submittedOrder?.order?.isMSRFeeApplicable; + return this.submittedOrder?.isMSRFeeApplicable; }, isInsurance() { - return this.submittedOrder?.order?.payment?.isInsurance; + return this.submittedOrder?.payment?.isInsurance; }, isNoComp() { - return this.submittedOrder?.order?.policy?.isNoComp; + return this.submittedOrder?.policy?.isNoComp; }, isItac() { - return this.submittedOrder?.order?.policy?.isItac; + return this.submittedOrder?.policy?.isItac; }, hasVapsInCart() { if (this.lineItems?.vaps?.length > 0) { @@ -448,28 +448,28 @@ export default { if (this.isNoComp || this.isItac) { return coverageStatus.NOCOMP; } else { - return this.submittedOrder?.order?.payment?.insuranceCoverage?.coverageStatus; + return this.submittedOrder?.payment?.insuranceCoverage?.coverageStatus; } }, currentDeductible() { - return this.submittedOrder?.order?.policy?.currentDeductible; + return this.submittedOrder?.policy?.currentDeductible; }, insuranceCompanyName() { - return this.submittedOrder?.order?.policy?.insuranceCompanyName; + return this.submittedOrder?.policy?.insuranceCompanyName; }, isPia() { - return this.submittedOrder?.order?.payment?.isPia; + return this.submittedOrder?.payment?.isPia; }, AppointmentDuration() { - const durationMaximum = this.submittedOrder?.order?.schedule?.jobMaxMinutes; - const durationMinimum = this.submittedOrder?.order?.schedule?.jobMinMinutes; + const durationMaximum = this.submittedOrder?.schedule?.jobMaxMinutes; + const durationMinimum = this.submittedOrder?.schedule?.jobMinMinutes; const durationLengthString = "Duration: "; if ( - this.submittedOrder?.order?.schedule?.routeCode.includes(RouteCodeFlags.ALL_DAY_DROP_OFF) + this.submittedOrder?.schedule?.routeCode.includes(RouteCodeFlags.ALL_DAY_DROP_OFF) ) { return durationLengthString.concat("All Day"); } else if ( - this.submittedOrder?.order?.schedule?.routeCode.includes(RouteCodeFlags.OVERNIGHT_DROP_OFF) + this.submittedOrder?.schedule?.routeCode.includes(RouteCodeFlags.OVERNIGHT_DROP_OFF) ) { return durationLengthString.concat("Overnight"); } else { @@ -541,7 +541,7 @@ export default { parseInt(this.donationAmount), false ); - this.lineItems = deepClone(this.getSubmittedOrder().order.lineItems); + this.lineItems = deepClone(this.getSubmittedOrder().lineItems); } else { this.showDonationError = true; this.showDonationSuccess = false; diff --git a/src/store/index.js b/src/store/index.js index 05cb572e1..032660c6f 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1854,7 +1854,6 @@ export const actions = { if (windshieldPartWithRecal) { url += `/${windshieldPartWithRecal.partNumber}`; } - url += "/false"; return globalMethods.callHttpClient({ method: endpoints.GetProviders.method, @@ -3264,10 +3263,7 @@ export const actions = { } // create a submitted order object from vuex. - const submittedOrder = { - order: context.state.order, - applicationUser: context.state.applicationUser, - }; + const submittedOrder = context.state.order; const experiments = context.state.applicationUser.experiments; const affiliateCookies = context.state.applicationUser.affiliateCookies; From 77c007c4447ff5a05db4614605269ea9cb1db4cb Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 3 Apr 2025 13:19:44 -0400 Subject: [PATCH 06/18] CASH-462 | Rename and restructure submittedOrder Rename to submittedState Add an applicationUser attribute --- src/constants/store-actions.js | 6 +-- .../add-to-calendar/add-to-calendar.vue | 2 +- src/layouts/confirmation/confirmation.vue | 7 +--- .../payment-pia-return/payment-pia-return.vue | 2 +- src/layouts/payment/payment.vue | 2 +- src/layouts/vehicle/vehicle.vue | 2 +- src/mixins/analytics-mixin.js | 2 +- src/mixins/analytics-mixin.spec.js | 2 +- src/mixins/base-mixin.js | 12 +++++- src/router/index.js | 4 +- src/store/index.js | 39 ++++++++++++------- 11 files changed, 47 insertions(+), 33 deletions(-) diff --git a/src/constants/store-actions.js b/src/constants/store-actions.js index e7cb38953..1e8945c49 100644 --- a/src/constants/store-actions.js +++ b/src/constants/store-actions.js @@ -109,9 +109,9 @@ const storeActions = { SAVE_IS_RECAL_ACK_OPT_IN: "saveIsRecalAckOptIn", SAVE_IS_MSR_FEE_APPLICABLE: "saveIsMSRFeeApplicable", - CREATE_SUBMITTED_ORDER: "createSubmittedOrder", - RESET_SUBMITTED_ORDER: "resetSubmittedOrder", - ADD_DONATION_TO_SUBMITTED_ORDER: "addDonationToSubmittedOrder", + CREATE_SUBMITTED_STATE: "createSubmittedState", + RESET_SUBMITTED_STATE: "resetSubmittedState", + ADD_DONATION_TO_SUBMITTED_STATE: "addDonationToSubmittedState", RESET_EXTERNAL_PARAMETER_STATE: "resetExternalParameterState", UPDATE_EXTERNAL_PARAMETER_MMS: "updateExternalParameterMMS", diff --git a/src/layouts/confirmation/add-to-calendar/add-to-calendar.vue b/src/layouts/confirmation/add-to-calendar/add-to-calendar.vue index 1fef02247..c986e0366 100644 --- a/src/layouts/confirmation/add-to-calendar/add-to-calendar.vue +++ b/src/layouts/confirmation/add-to-calendar/add-to-calendar.vue @@ -115,7 +115,7 @@ export default { }, ServiceType() { const isRepair = this.getSubmittedOrder()?.damage.isRepair; - const funnelHasRecalibrationPart = store.getters.isRecalibrationOnSubmittedOrder; + const funnelHasRecalibrationPart = store.getters.isRecalibrationOnSubmittedState; if (!isRepair) { if (funnelHasRecalibrationPart) { return serviceType.REPLACEMENT_AND_RECALIBRATION; diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue index 8e49f298d..7e9cfe71e 100644 --- a/src/layouts/confirmation/confirmation.vue +++ b/src/layouts/confirmation/confirmation.vue @@ -164,7 +164,7 @@ export default { } // Create order - await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_ORDER); // This nulls the Store order + await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_STATE); // This nulls the Store order // Call APIs const submittedOrder = baseMixin.methods.getSubmittedOrder(); @@ -255,11 +255,8 @@ export default { }, ShowCart() { if (this.isPia && this.submittedOrder?.settledTenderAmount == 0) { - // settleTenderAmount always shows 0 via localhost or dev. - // Temporarily set return true to see cart in localhost or dev environment return false; } - return true; }, ScheduleConfirmationText() { @@ -537,7 +534,7 @@ export default { this.showDonationSuccess = true; this.showDonationError = false; await baseMixin.methods.dispatchStoreAction( - storeActions.ADD_DONATION_TO_SUBMITTED_ORDER, + storeActions.ADD_DONATION_TO_SUBMITTED_STATE, parseInt(this.donationAmount), false ); diff --git a/src/layouts/payment-pia-return/payment-pia-return.vue b/src/layouts/payment-pia-return/payment-pia-return.vue index b9f19f64a..f0b4433ea 100644 --- a/src/layouts/payment-pia-return/payment-pia-return.vue +++ b/src/layouts/payment-pia-return/payment-pia-return.vue @@ -192,7 +192,7 @@ export default { } this.$refs.loadingModal.isModalVisible = false; - await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_ORDER); + await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_STATE); this.$router.navigateWithoutSaving(this.navigationScenarios.PIA_SUCCESS, this.$route); }, }, diff --git a/src/layouts/payment/payment.vue b/src/layouts/payment/payment.vue index abf06927b..3c87f85f2 100644 --- a/src/layouts/payment/payment.vue +++ b/src/layouts/payment/payment.vue @@ -683,7 +683,7 @@ export default { submitAfterSave: true, }); - await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_ORDER); + await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_STATE); window.location = applicationConfig.CONFIRMATION_URL; } catch (error) { console.log("error: response from submit work order(payment pg):" + error.message); diff --git a/src/layouts/vehicle/vehicle.vue b/src/layouts/vehicle/vehicle.vue index 12e7268fa..5f769b9b7 100644 --- a/src/layouts/vehicle/vehicle.vue +++ b/src/layouts/vehicle/vehicle.vue @@ -448,7 +448,7 @@ export default { this.displayNoServiceAlert = false; }, async forwardButtonAction() { - await this.dispatchStoreAction(storeActions.RESET_SUBMITTED_ORDER); + await this.dispatchStoreAction(storeActions.RESET_SUBMITTED_STATE); this.dispatchStoreAction( storeActions.SAVE_VEHICLE, { diff --git a/src/mixins/analytics-mixin.js b/src/mixins/analytics-mixin.js index e59ec5039..d6e608d4b 100644 --- a/src/mixins/analytics-mixin.js +++ b/src/mixins/analytics-mixin.js @@ -337,7 +337,7 @@ export default { // Recalibration if (hasSubmittedOrder) { - payload.isRecalibrationOnOrder = store.getters.isRecalibrationOnSubmittedOrder; + payload.isRecalibrationOnOrder = store.getters.isRecalibrationOnSubmittedState; } else { payload.isRecalibrationOnOrder = store.getters.isRecalibrationOnOrder; } diff --git a/src/mixins/analytics-mixin.spec.js b/src/mixins/analytics-mixin.spec.js index a4b4672bb..711702c4a 100644 --- a/src/mixins/analytics-mixin.spec.js +++ b/src/mixins/analytics-mixin.spec.js @@ -425,7 +425,7 @@ describe("analyticsMixin.js", () => { workOrderId: "222222222222", }; store.getters.isRecalibrationOnOrder = true; - store.getters.isRecalibrationOnSubmittedOrder = false; + store.getters.isRecalibrationOnSubmittedState = false; }); test("Pushes to data layer if nominal", () => { diff --git a/src/mixins/base-mixin.js b/src/mixins/base-mixin.js index 151d17dd9..1c33640f8 100644 --- a/src/mixins/base-mixin.js +++ b/src/mixins/base-mixin.js @@ -198,10 +198,18 @@ export default { } }, getSubmittedOrder() { - return JSON.parse(window.sessionStorage.getItem("submittedOrder")); + return JSON.parse(window.sessionStorage.getItem("submittedState"))?.order; }, hasSubmittedOrder() { - return window.sessionStorage.getItem("submittedOrder") !== null; + const submittedState = window.sessionStorage.getItem("submittedState"); + return submittedState !== null && submittedState.order !== null; + }, + getSubmittedApplicationUser() { + return JSON.parse(window.sessionStorage.getItem("submittedState"))?.applicationUser; + }, + hasSubmittedApplicationUser() { + const submittedState = window.sessionStorage.getItem("submittedState"); + return submittedState !== null && submittedState.applicationUser !== null; }, }, computed: { diff --git a/src/router/index.js b/src/router/index.js index 345790734..e2263b32d 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -93,10 +93,10 @@ const routes = [ log(" --to.query.fmgPage ", to.query?.fmgPage); // Intercept all navigation if a submitted order exists in storage - if (window.sessionStorage.getItem("submittedOrder") !== null) { + if (window.sessionStorage.getItem("submittedState") !== null) { if (to.query.fmgPage !== funnelStartPageName) { to.query.fmgPage = fmgPageValues.CONFIRMATION; - log(" --has submittedOrder go to confirmation"); + log(" --has submittedState go to confirmation"); } } // On entering the funnel "fresh", read cookie information, decide what to do next. diff --git a/src/store/index.js b/src/store/index.js index 032660c6f..cdd81d164 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -822,8 +822,8 @@ export const getters = { }, coverageIsVerified: (state) => { let order; - if (window.sessionStorage.getItem("submittedOrder") !== null) { - order = JSON.parse(window.sessionStorage.getItem("submittedOrder")); + if (window.sessionStorage.getItem("submittedState") !== null) { + order = JSON.parse(window.sessionStorage.getItem("submittedState")).order; } else { order = state.order; } @@ -850,10 +850,10 @@ export const getters = { isRecalibrationOnOrder: (state) => { return getHasRecalibrationPart(state); }, - isRecalibrationOnSubmittedOrder: (state) => { - if (window.sessionStorage.getItem("submittedOrder") !== null) { + isRecalibrationOnSubmittedState: (state) => { + if (window.sessionStorage.getItem("submittedState") !== null) { return getHasRecalibrationPart({ - order: JSON.parse(window.sessionStorage.getItem("submittedOrder")), + order: JSON.parse(window.sessionStorage.getItem("submittedState")).order, }); } @@ -861,8 +861,8 @@ export const getters = { }, shouldHideRecalibration: (state) => { var order; - if (window.sessionStorage.getItem("submittedOrder") !== null) { - order = JSON.parse(window.sessionStorage.getItem("submittedOrder")); + if (window.sessionStorage.getItem("submittedState") !== null) { + order = JSON.parse(window.sessionStorage.getItem("submittedState")).order; } else { order = state.order; } @@ -3257,19 +3257,22 @@ export const actions = { return false; }, - createSubmittedOrder(context) { - if (window.sessionStorage.getItem("submittedOrder") !== null) { + createSubmittedState(context) { + if (window.sessionStorage.getItem("submittedState") !== null) { return; } // create a submitted order object from vuex. - const submittedOrder = context.state.order; + const submittedState = { + order: context.state.order, + applicationUser: context.state.applicationUser + }; const experiments = context.state.applicationUser.experiments; const affiliateCookies = context.state.applicationUser.affiliateCookies; // set to local storage - window.sessionStorage.setItem("submittedOrder", JSON.stringify(submittedOrder)); + window.sessionStorage.setItem("submittedState", JSON.stringify(submittedState)); window.sessionStorage.setItem("createNewSessionForHeritage", true); // clear vuex @@ -3288,10 +3291,11 @@ export const actions = { context.commit(storeMutations.UPDATE_AFFILIATE_COOKIES, affiliateCookies); }, - addDonationToSubmittedOrder(context, donationAmount) { + addDonationToSubmittedState(context, donationAmount) { console.log("running addDonationToSubmittedOrder()... donationAmount: ", donationAmount); const submittedOrder = deepClone(baseMixin.methods.getSubmittedOrder()); + const submittedApplicationUser = deepClone(baseMixin.methods.getSubmittedApplicationUser()); if (donationAmount > 0) { console.log( @@ -3320,13 +3324,18 @@ export const actions = { }); submittedOrder.lineItems.supportingItems = nonDonationItems; } + + const submittedState = { + order: submittedOrder, + applicationUser: submittedApplicationUser + } // set to local storage - window.sessionStorage.setItem("submittedOrder", JSON.stringify(submittedOrder)); + window.sessionStorage.setItem("submittedState", JSON.stringify(submittedState)); }, - resetSubmittedOrder(context) { + resetSubmittedState(context) { // clear from local storage - window.sessionStorage.removeItem("submittedOrder"); + window.sessionStorage.removeItem("submittedState"); }, resetExternalParameterState(context) { if (context.getters.isExternalParameter) { From b90c3644d6e7151fec00b41eb0c1df320b4717c8 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 3 Apr 2025 13:20:25 -0400 Subject: [PATCH 07/18] CASH-462 | Styling --- 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 cdd81d164..4d079056e 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -3265,7 +3265,7 @@ export const actions = { // create a submitted order object from vuex. const submittedState = { order: context.state.order, - applicationUser: context.state.applicationUser + applicationUser: context.state.applicationUser, }; const experiments = context.state.applicationUser.experiments; @@ -3327,8 +3327,8 @@ export const actions = { const submittedState = { order: submittedOrder, - applicationUser: submittedApplicationUser - } + applicationUser: submittedApplicationUser, + }; // set to local storage window.sessionStorage.setItem("submittedState", JSON.stringify(submittedState)); }, From 43d1353e52776e9832dc826e691305c4967cbc99 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 3 Apr 2025 14:15:39 -0400 Subject: [PATCH 08/18] CASH-462 | Add constant for submittedState --- src/constants/session-storage.js | 3 +++ src/mixins/base-mixin.js | 9 +++++---- src/router/index.js | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 src/constants/session-storage.js diff --git a/src/constants/session-storage.js b/src/constants/session-storage.js new file mode 100644 index 000000000..577fa4c0f --- /dev/null +++ b/src/constants/session-storage.js @@ -0,0 +1,3 @@ +export const sessionStorageKeyConstants = { + SUBMITTED_STATE: "submittedState" +} \ No newline at end of file diff --git a/src/mixins/base-mixin.js b/src/mixins/base-mixin.js index 1c33640f8..73677726a 100644 --- a/src/mixins/base-mixin.js +++ b/src/mixins/base-mixin.js @@ -1,6 +1,7 @@ import store from "@/store"; import { storeActions } from "@/constants/store-actions.js"; import { storeMutations } from "@/constants/store-mutations.js"; +import { sessionStorageKeyConstants } from "@/constants/session-storage.js"; import { navigationScenarios } from "@/router/router-constants/navigation-scenarios"; import { vehicleCategories } from "@/constants/vehicle-categories.js"; import { routerParams } from "@/router/router-constants/router-params"; @@ -198,17 +199,17 @@ export default { } }, getSubmittedOrder() { - return JSON.parse(window.sessionStorage.getItem("submittedState"))?.order; + return JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE))?.order; }, hasSubmittedOrder() { - const submittedState = window.sessionStorage.getItem("submittedState"); + const submittedState = window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE); return submittedState !== null && submittedState.order !== null; }, getSubmittedApplicationUser() { - return JSON.parse(window.sessionStorage.getItem("submittedState"))?.applicationUser; + return JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE))?.applicationUser; }, hasSubmittedApplicationUser() { - const submittedState = window.sessionStorage.getItem("submittedState"); + const submittedState = window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE); return submittedState !== null && submittedState.applicationUser !== null; }, }, diff --git a/src/router/index.js b/src/router/index.js index e2263b32d..95aca54d8 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -2,6 +2,7 @@ import { createWebHistory, createRouter } from "vue-router"; import { storeActions } from "@/constants/store-actions"; import { storeMutations } from "../constants/store-mutations"; +import { sessionStorageKeyConstants } from "@/constants/session-storage.js"; import { lazyLoadComponent } from "@/router/dynamic-routing/component-loader.js"; import { routingTable } from "@/router/router-constants/routing-table.js"; import { globalEvents, globalEventTypes } from "@/constants/events"; @@ -39,6 +40,7 @@ import { shouldStripPromoQueryString } from "@/helpers/promotions-helper"; import bailout from "@/layouts/bailout/bailout"; import { nextTick } from "vue"; import { getBoolFromString } from "@/helpers/boolean-helper"; +import { sessionStorageKeyConstants } from "../constants/session-storage"; const routes = [ { @@ -93,10 +95,10 @@ const routes = [ log(" --to.query.fmgPage ", to.query?.fmgPage); // Intercept all navigation if a submitted order exists in storage - if (window.sessionStorage.getItem("submittedState") !== null) { + if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { if (to.query.fmgPage !== funnelStartPageName) { to.query.fmgPage = fmgPageValues.CONFIRMATION; - log(" --has submittedState go to confirmation"); + log(` --has ${sessionStorageKeyConstants.SUBMITTED_STATE} go to confirmation`); } } // On entering the funnel "fresh", read cookie information, decide what to do next. From af9775aa3b8e470f1360b1160448b3a408e65a24 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 3 Apr 2025 14:17:31 -0400 Subject: [PATCH 09/18] CASH-462 | Prettier changes --- src/constants/session-storage.js | 6 +++--- src/mixins/base-mixin.js | 16 ++++++++++++---- src/router/index.js | 10 +++++++--- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/constants/session-storage.js b/src/constants/session-storage.js index 577fa4c0f..589dd6b71 100644 --- a/src/constants/session-storage.js +++ b/src/constants/session-storage.js @@ -1,3 +1,3 @@ -export const sessionStorageKeyConstants = { - SUBMITTED_STATE: "submittedState" -} \ No newline at end of file +export const sessionStorageKeyConstants = { + SUBMITTED_STATE: "submittedState", +}; diff --git a/src/mixins/base-mixin.js b/src/mixins/base-mixin.js index 73677726a..b29eae8c1 100644 --- a/src/mixins/base-mixin.js +++ b/src/mixins/base-mixin.js @@ -199,17 +199,25 @@ export default { } }, getSubmittedOrder() { - return JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE))?.order; + return JSON.parse( + window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) + )?.order; }, hasSubmittedOrder() { - const submittedState = window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE); + const submittedState = window.sessionStorage.getItem( + sessionStorageKeyConstants.SUBMITTED_STATE + ); return submittedState !== null && submittedState.order !== null; }, getSubmittedApplicationUser() { - return JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE))?.applicationUser; + return JSON.parse( + window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) + )?.applicationUser; }, hasSubmittedApplicationUser() { - const submittedState = window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE); + const submittedState = window.sessionStorage.getItem( + sessionStorageKeyConstants.SUBMITTED_STATE + ); return submittedState !== null && submittedState.applicationUser !== null; }, }, diff --git a/src/router/index.js b/src/router/index.js index 95aca54d8..5ec909f97 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -40,7 +40,6 @@ import { shouldStripPromoQueryString } from "@/helpers/promotions-helper"; import bailout from "@/layouts/bailout/bailout"; import { nextTick } from "vue"; import { getBoolFromString } from "@/helpers/boolean-helper"; -import { sessionStorageKeyConstants } from "../constants/session-storage"; const routes = [ { @@ -95,10 +94,15 @@ const routes = [ log(" --to.query.fmgPage ", to.query?.fmgPage); // Intercept all navigation if a submitted order exists in storage - if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { + if ( + window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== + null + ) { if (to.query.fmgPage !== funnelStartPageName) { to.query.fmgPage = fmgPageValues.CONFIRMATION; - log(` --has ${sessionStorageKeyConstants.SUBMITTED_STATE} go to confirmation`); + log( + ` --has ${sessionStorageKeyConstants.SUBMITTED_STATE} go to confirmation` + ); } } // On entering the funnel "fresh", read cookie information, decide what to do next. From fe666f381abce1e3c9ce945010e1335c2b6656f3 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 3 Apr 2025 14:23:09 -0400 Subject: [PATCH 10/18] CASH-462 | Utilize new constant in the store --- src/store/index.js | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index 4d079056e..673bf36ee 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1,6 +1,7 @@ import { createStore } from "vuex"; import { endpoints } from "@/constants/endpoints.js"; import { storeMutations } from "@/constants/store-mutations"; +import { sessionStorageKeyConstants } from "@/constants/session-storage.js"; import { getDateForSavedSessionTimeout } from "@/helpers/heritage-integration/session-helper"; import createPersistedState from "vuex-persistedstate"; import globalMethods from "@/global-methods"; @@ -822,8 +823,8 @@ export const getters = { }, coverageIsVerified: (state) => { let order; - if (window.sessionStorage.getItem("submittedState") !== null) { - order = JSON.parse(window.sessionStorage.getItem("submittedState")).order; + if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { + order = JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)).order; } else { order = state.order; } @@ -851,9 +852,9 @@ export const getters = { return getHasRecalibrationPart(state); }, isRecalibrationOnSubmittedState: (state) => { - if (window.sessionStorage.getItem("submittedState") !== null) { + if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { return getHasRecalibrationPart({ - order: JSON.parse(window.sessionStorage.getItem("submittedState")).order, + order: JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)).order, }); } @@ -861,8 +862,8 @@ export const getters = { }, shouldHideRecalibration: (state) => { var order; - if (window.sessionStorage.getItem("submittedState") !== null) { - order = JSON.parse(window.sessionStorage.getItem("submittedState")).order; + if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { + order = JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)).order; } else { order = state.order; } @@ -3258,7 +3259,7 @@ export const actions = { }, createSubmittedState(context) { - if (window.sessionStorage.getItem("submittedState") !== null) { + if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { return; } @@ -3272,7 +3273,7 @@ export const actions = { const affiliateCookies = context.state.applicationUser.affiliateCookies; // set to local storage - window.sessionStorage.setItem("submittedState", JSON.stringify(submittedState)); + window.sessionStorage.setItem(sessionStorageKeyConstants.SUBMITTED_STATE, JSON.stringify(submittedState)); window.sessionStorage.setItem("createNewSessionForHeritage", true); // clear vuex @@ -3330,12 +3331,12 @@ export const actions = { applicationUser: submittedApplicationUser, }; // set to local storage - window.sessionStorage.setItem("submittedState", JSON.stringify(submittedState)); + window.sessionStorage.setItem(sessionStorageKeyConstants.SUBMITTED_STATE, JSON.stringify(submittedState)); }, resetSubmittedState(context) { // clear from local storage - window.sessionStorage.removeItem("submittedState"); + window.sessionStorage.removeItem(sessionStorageKeyConstants.SUBMITTED_STATE); }, resetExternalParameterState(context) { if (context.getters.isExternalParameter) { From 14165f72fdde93c7822870c5dbdc72d813fcb56a Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Mon, 7 Apr 2025 10:45:35 -0400 Subject: [PATCH 11/18] CASH-462 | Add applicationUser information to submittedState Refactor experiment mixin --- src/helpers/experiment-helper.js | 20 +++++++++++ src/layouts/confirmation/confirmation.vue | 22 ++++++------ src/mixins/experiment-mixin.js | 32 ++++++++++++----- src/store/index.js | 43 +++++++++++++---------- 4 files changed, 80 insertions(+), 37 deletions(-) create mode 100644 src/helpers/experiment-helper.js diff --git a/src/helpers/experiment-helper.js b/src/helpers/experiment-helper.js new file mode 100644 index 000000000..c0c094529 --- /dev/null +++ b/src/helpers/experiment-helper.js @@ -0,0 +1,20 @@ +export function getExperimentSettingsFromExperimentList(experimentList) { + return ( + experimentList + .filter((x) => !!x.isActive) + .map((x) => x.settings) + .reduce((r, c) => Object.assign(r, c), {}) ?? {} + ); +} + +export function getSettingValue(settingName, experimentSettings) { + return hasSetting(settingName, experimentSettings) ? experimentSettings[settingName] : null; +} + +export function hasSettingEqualTo(settingName, settingValue, experimentSettings) { + return experimentSettings[settingName] == settingValue; +} + +export function hasSetting(settingName, experimentSettings) { + return Object.hasOwn(experimentSettings, settingName); +} diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue index 7e9cfe71e..40fa73dbe 100644 --- a/src/layouts/confirmation/confirmation.vue +++ b/src/layouts/confirmation/confirmation.vue @@ -65,7 +65,7 @@ :isNoComp="isNoComp" :isMSRFeeApplicable="isMSRFeeApplicable" /> -
+
{ let order; if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { - order = JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)).order; + order = JSON.parse( + window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) + ).order; } else { order = state.order; } @@ -854,29 +860,24 @@ export const getters = { isRecalibrationOnSubmittedState: (state) => { if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { return getHasRecalibrationPart({ - order: JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)).order, + order: JSON.parse( + window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) + ).order, }); } - return false; }, shouldHideRecalibration: (state) => { - var order; if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { - order = JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)).order; - } else { - order = state.order; + state = JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)); } - + let order = state.order; + let applicationUser = state.applicationUser; if (order.payment.isInsurance) { return false; } - return ( - experimentMixin.methods - .getSettingValue(experimentSettings.RECAL_PRICE_REMOVE) - ?.toLowerCase() === "true" && getters.isRecalibrationOnOrder(state) - ); + return (hasSettingEqualTo(experimentSettings.RECAL_PRICE_REMOVE, "true", getExperimentSettingsFromExperimentList(applicationUser.experiments)) && getters.isRecalibrationOnOrder(state)) }, areRearWipersOnOrder: (state) => { return !!state.order.lineItems.vaps?.some( @@ -975,10 +976,7 @@ export const getters = { }; }, experimentSettings: (state) => - state.applicationUser.experiments - .filter((x) => !!x.isActive) - .map((x) => x.settings) - .reduce((r, c) => Object.assign(r, c), {}) ?? {}, + getExperimentSettingsFromExperimentList(state.applicationUser.experiments), isVerifiedAndDeductibleZeroConfirmed: (state) => { // used in CMS on /payment-method in Header Sub Text, for FunnelSubHeaderWidget on cart pages @@ -1855,6 +1853,7 @@ export const actions = { if (windshieldPartWithRecal) { url += `/${windshieldPartWithRecal.partNumber}`; } + url += "/false"; return globalMethods.callHttpClient({ method: endpoints.GetProviders.method, @@ -3273,7 +3272,10 @@ export const actions = { const affiliateCookies = context.state.applicationUser.affiliateCookies; // set to local storage - window.sessionStorage.setItem(sessionStorageKeyConstants.SUBMITTED_STATE, JSON.stringify(submittedState)); + window.sessionStorage.setItem( + sessionStorageKeyConstants.SUBMITTED_STATE, + JSON.stringify(submittedState) + ); window.sessionStorage.setItem("createNewSessionForHeritage", true); // clear vuex @@ -3331,7 +3333,10 @@ export const actions = { applicationUser: submittedApplicationUser, }; // set to local storage - window.sessionStorage.setItem(sessionStorageKeyConstants.SUBMITTED_STATE, JSON.stringify(submittedState)); + window.sessionStorage.setItem( + sessionStorageKeyConstants.SUBMITTED_STATE, + JSON.stringify(submittedState) + ); }, resetSubmittedState(context) { From 23e16f02f4e25dbd35dc64b734893e221c463527 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Mon, 7 Apr 2025 10:46:35 -0400 Subject: [PATCH 12/18] CASH-462 | lnter changes --- src/mixins/experiment-mixin.js | 9 ++++++--- src/store/index.js | 14 +++++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/mixins/experiment-mixin.js b/src/mixins/experiment-mixin.js index 079c5fe53..474945a54 100644 --- a/src/mixins/experiment-mixin.js +++ b/src/mixins/experiment-mixin.js @@ -14,7 +14,8 @@ export default { settingValue, experimentList = store.getters.applicationUser.experiments ) { - const experimentSettings = experimentHelper.getExperimentSettingsFromExperimentList(experimentList); + const experimentSettings = + experimentHelper.getExperimentSettingsFromExperimentList(experimentList); return experimentHelper.hasSettingEqualTo( settingName, settingValue, @@ -22,11 +23,13 @@ export default { ); }, hasSetting(settingName, experimentList = store.getters.applicationUser.experiments) { - const experimentSettings = experimentHelper.getExperimentSettingsFromExperimentList(experimentList); + const experimentSettings = + experimentHelper.getExperimentSettingsFromExperimentList(experimentList); return experimentHelper.hasSetting(settingName, experimentSettings); }, getSettingValue(settingName, experimentList = store.getters.applicationUser.experiments) { - const experimentSettings = experimentHelper.getExperimentSettingsFromExperimentList(experimentList); + const experimentSettings = + experimentHelper.getExperimentSettingsFromExperimentList(experimentList); return experimentHelper.getSettingValue(settingName, experimentSettings); }, }, diff --git a/src/store/index.js b/src/store/index.js index 0257d8b1f..26b7c3286 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -23,7 +23,7 @@ import { getQuerystringParameter } from "@/helpers/querystring-helper"; import { deepClone } from "@/helpers/object-helper"; import { getExperimentSettingsFromExperimentList, - hasSettingEqualTo + hasSettingEqualTo, } from "../helpers/experiment-helper"; import { queryStrings } from "@/constants/query-strings"; import { partTypeStrings } from "@/constants/part-type-strings"; @@ -869,7 +869,9 @@ export const getters = { }, shouldHideRecalibration: (state) => { if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { - state = JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)); + state = JSON.parse( + window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) + ); } let order = state.order; let applicationUser = state.applicationUser; @@ -877,7 +879,13 @@ export const getters = { return false; } - return (hasSettingEqualTo(experimentSettings.RECAL_PRICE_REMOVE, "true", getExperimentSettingsFromExperimentList(applicationUser.experiments)) && getters.isRecalibrationOnOrder(state)) + return ( + hasSettingEqualTo( + experimentSettings.RECAL_PRICE_REMOVE, + "true", + getExperimentSettingsFromExperimentList(applicationUser.experiments) + ) && getters.isRecalibrationOnOrder(state) + ); }, areRearWipersOnOrder: (state) => { return !!state.order.lineItems.vaps?.some( From 565c9408f63024948756e66162bbf7d3278bfe84 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Mon, 7 Apr 2025 11:27:52 -0400 Subject: [PATCH 13/18] CASH-462 | remove heavy truck work around --- src/store/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/store/index.js b/src/store/index.js index 26b7c3286..36a459d80 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1861,7 +1861,6 @@ export const actions = { if (windshieldPartWithRecal) { url += `/${windshieldPartWithRecal.partNumber}`; } - url += "/false"; return globalMethods.callHttpClient({ method: endpoints.GetProviders.method, From 2d9b59eab4609f590fbf08dfcec1c71b6896dc5b Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Mon, 7 Apr 2025 13:11:55 -0400 Subject: [PATCH 14/18] CASH-462 | Update unit tests --- src/layouts/schedule/schedule.spec.js | 4 +++- src/layouts/service-location/service-location.spec.js | 1 + src/layouts/service-zip/service-zip.spec.js | 5 +++++ src/mixins/experiment-mixin.spec.js | 10 ++++++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/layouts/schedule/schedule.spec.js b/src/layouts/schedule/schedule.spec.js index 3344e3d27..0e519742a 100644 --- a/src/layouts/schedule/schedule.spec.js +++ b/src/layouts/schedule/schedule.spec.js @@ -7,7 +7,6 @@ import { getMountOptions } from "@/helpers/unit-test-helper.js"; import store from "@/store"; import router from "@/router"; import baseMixin from "../../mixins/base-mixin"; -import { experimentSettings } from "../../constants/experiments"; // Mock basemixin jest.mock("@/mixins/base-mixin.js", () => ({ @@ -147,6 +146,9 @@ beforeEach(() => { jest.restoreAllMocks(); jest.clearAllMocks(); store.getters = { + applicationUser: { + experiments: [] + }, order: { schedule: { date: "2019-01-01", diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js index fb34f3921..e0caf3694 100644 --- a/src/layouts/service-location/service-location.spec.js +++ b/src/layouts/service-location/service-location.spec.js @@ -174,6 +174,7 @@ const mockMixin = { beforeEach(() => { store.getters = { + applicationUser: {experiments: []}, lineItems: { supportingItems: [ { diff --git a/src/layouts/service-zip/service-zip.spec.js b/src/layouts/service-zip/service-zip.spec.js index 773157980..cb1406ce5 100644 --- a/src/layouts/service-zip/service-zip.spec.js +++ b/src/layouts/service-zip/service-zip.spec.js @@ -173,9 +173,14 @@ function resetMockStoreData() { }; } +const applicationUser = { + experiments: [] +}; + function applyMockStoreDataToGetters() { store.getters = { experimentSettings: mockExperimentSettings, + applicationUser: applicationUser, order: mockStoreData, damage: mockStoreData.damage, payment: mockStoreData.payment, diff --git a/src/mixins/experiment-mixin.spec.js b/src/mixins/experiment-mixin.spec.js index 1b2bff2f5..2031d63ef 100644 --- a/src/mixins/experiment-mixin.spec.js +++ b/src/mixins/experiment-mixin.spec.js @@ -135,6 +135,16 @@ function setupMocks({ experimentSettings }) { store.getters = { experimentSettings: experimentSettings ?? testExperimentSettings, + applicationUser: { + experiments: [ + { + isActive: true, + isExposed: true, + settings: experimentSettings ?? testExperimentSettings + } + + ] + } }; const mockComponent = { From d461576ddbae56a604fa37e1ab87bd67d9b6bfd5 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Mon, 7 Apr 2025 13:12:39 -0400 Subject: [PATCH 15/18] CASH-462 | Pretter --- src/layouts/schedule/schedule.spec.js | 2 +- src/layouts/service-location/service-location.spec.js | 2 +- src/layouts/service-zip/service-zip.spec.js | 2 +- src/mixins/experiment-mixin.spec.js | 9 ++++----- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/layouts/schedule/schedule.spec.js b/src/layouts/schedule/schedule.spec.js index 0e519742a..3a389aec5 100644 --- a/src/layouts/schedule/schedule.spec.js +++ b/src/layouts/schedule/schedule.spec.js @@ -147,7 +147,7 @@ beforeEach(() => { jest.clearAllMocks(); store.getters = { applicationUser: { - experiments: [] + experiments: [], }, order: { schedule: { diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js index e0caf3694..7dccc1b1e 100644 --- a/src/layouts/service-location/service-location.spec.js +++ b/src/layouts/service-location/service-location.spec.js @@ -174,7 +174,7 @@ const mockMixin = { beforeEach(() => { store.getters = { - applicationUser: {experiments: []}, + applicationUser: { experiments: [] }, lineItems: { supportingItems: [ { diff --git a/src/layouts/service-zip/service-zip.spec.js b/src/layouts/service-zip/service-zip.spec.js index cb1406ce5..3346970cf 100644 --- a/src/layouts/service-zip/service-zip.spec.js +++ b/src/layouts/service-zip/service-zip.spec.js @@ -174,7 +174,7 @@ function resetMockStoreData() { } const applicationUser = { - experiments: [] + experiments: [], }; function applyMockStoreDataToGetters() { diff --git a/src/mixins/experiment-mixin.spec.js b/src/mixins/experiment-mixin.spec.js index 2031d63ef..8dc3df2b6 100644 --- a/src/mixins/experiment-mixin.spec.js +++ b/src/mixins/experiment-mixin.spec.js @@ -140,11 +140,10 @@ function setupMocks({ experimentSettings }) { { isActive: true, isExposed: true, - settings: experimentSettings ?? testExperimentSettings - } - - ] - } + settings: experimentSettings ?? testExperimentSettings, + }, + ], + }, }; const mockComponent = { From 9083ffbaed34b1e527f19b8d6c358ef5992a922e Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Mon, 7 Apr 2025 15:59:57 -0400 Subject: [PATCH 16/18] CASH-484: add logic to make sure insurance orders won't keep the upcharge part item --- src/layouts/schedule/schedule.vue | 40 +++++++++++++++---------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index 63e4a3775..d00f2dff2 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -269,14 +269,16 @@ export default { const priceString = getAmountDue(lineItemsToBePriced, false); // pass the IncludeTax param as false const priceStringIntegerRoundedDown = priceString?.split(".")[0]; // same method used as getDisplayPrice() in service-package-radio used on /quote const pricingByDayBasePrice = parseInt(priceStringIntegerRoundedDown); + const payment = store.getters.order.payment; + const isInsurance = payment?.isInsurance; // Check to see if includePricingByDayUpcharge should already be set (based on order lineItems) let includePricingByDayUpcharge = false; if (supportingItemsFromStore) { const pricingByDayUpchargeFeeIndex = supportingItemsFromStore?.findIndex( (item) => item.partType == PRICING_BY_DAY_PART_TYPE - ); - if (pricingByDayUpchargeFeeIndex > -1) { + ); + if (pricingByDayUpchargeFeeIndex > -1 && !isInsurance) { includePricingByDayUpcharge = true; } } @@ -630,26 +632,24 @@ export default { const supportingItems = this.getSupportingItems(); // if we have a pricing by day upcharge, then save/update supporting items with it - if (this.showPricingByDay) { - const pricingByDayUpchargeFeeIndex = supportingItems?.findIndex( - (item) => item.partType == PRICING_BY_DAY_PART_TYPE - ); + const pricingByDayUpchargeFeeIndex = supportingItems?.findIndex( + (item) => item.partType == PRICING_BY_DAY_PART_TYPE + ); - if (this.includePricingByDayUpcharge) { - if (pricingByDayUpchargeFeeIndex > -1) { - supportingItems[pricingByDayUpchargeFeeIndex].laborAmount = - this.pricingByDayUpchargeLineItem.laborAmount; - supportingItems[pricingByDayUpchargeFeeIndex].sellingPrice = - this.pricingByDayUpchargeLineItem.sellingPrice; - supportingItems[pricingByDayUpchargeFeeIndex].kitPrice = - this.pricingByDayUpchargeLineItem.kitPrice; - } else { - supportingItems.push(this.pricingByDayUpchargeLineItem); - } + if (this.includePricingByDayUpcharge && this.showPricingByDay) { + if (pricingByDayUpchargeFeeIndex && pricingByDayUpchargeFeeIndex > -1) { + supportingItems[pricingByDayUpchargeFeeIndex].laborAmount = + this.pricingByDayUpchargeLineItem.laborAmount; + supportingItems[pricingByDayUpchargeFeeIndex].sellingPrice = + this.pricingByDayUpchargeLineItem.sellingPrice; + supportingItems[pricingByDayUpchargeFeeIndex].kitPrice = + this.pricingByDayUpchargeLineItem.kitPrice; } else { - if (pricingByDayUpchargeFeeIndex >= 0) { - supportingItems.splice(pricingByDayUpchargeFeeIndex, 1); - } + supportingItems.push(this.pricingByDayUpchargeLineItem); + } + } else { + if (pricingByDayUpchargeFeeIndex >= 0) { // remove pricing by day upcharge if it already was in store + supportingItems.splice(pricingByDayUpchargeFeeIndex, 1); } } From f71de530af85653f4daa4c2e5b96139c09393e89 Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Mon, 7 Apr 2025 16:17:11 -0400 Subject: [PATCH 17/18] CASH-484: prettier changes --- src/layouts/schedule/schedule.vue | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index d00f2dff2..318ff0aa5 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -277,7 +277,7 @@ export default { if (supportingItemsFromStore) { const pricingByDayUpchargeFeeIndex = supportingItemsFromStore?.findIndex( (item) => item.partType == PRICING_BY_DAY_PART_TYPE - ); + ); if (pricingByDayUpchargeFeeIndex > -1 && !isInsurance) { includePricingByDayUpcharge = true; } @@ -636,7 +636,7 @@ export default { (item) => item.partType == PRICING_BY_DAY_PART_TYPE ); - if (this.includePricingByDayUpcharge && this.showPricingByDay) { + if (this.includePricingByDayUpcharge && this.showPricingByDay) { if (pricingByDayUpchargeFeeIndex && pricingByDayUpchargeFeeIndex > -1) { supportingItems[pricingByDayUpchargeFeeIndex].laborAmount = this.pricingByDayUpchargeLineItem.laborAmount; @@ -648,7 +648,8 @@ export default { supportingItems.push(this.pricingByDayUpchargeLineItem); } } else { - if (pricingByDayUpchargeFeeIndex >= 0) { // remove pricing by day upcharge if it already was in store + if (pricingByDayUpchargeFeeIndex >= 0) { + // remove pricing by day upcharge if it already was in store supportingItems.splice(pricingByDayUpchargeFeeIndex, 1); } } From b2f6528aeae73be66028d12352a695d7385cff73 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Tue, 8 Apr 2025 09:58:54 -0400 Subject: [PATCH 18/18] CASH-374 | Remove mocking, clean up code --- src/constants/endpoints.js | 4 + src/store/index.js | 154 +++++++++++-------------------------- 2 files changed, 49 insertions(+), 109 deletions(-) diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js index 594227f7b..f99ea660d 100644 --- a/src/constants/endpoints.js +++ b/src/constants/endpoints.js @@ -192,6 +192,10 @@ const endpoints = { url: "/account/api/v1/account/bill-to-account-number", method: "GET", }, + AddDonationPart: { + url: "/order/api/v1/order/add-donation-part", + method: "POST", + }, }; export { endpoints }; diff --git a/src/store/index.js b/src/store/index.js index 36a459d80..97a31068e 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1899,96 +1899,48 @@ export const actions = { pageNameToLog: pageNameToLog, }); }, - submitDonationPartToSV2( + async submitDonationPartToSV2( context, { payload: { donationAmount, submittedOrder }, pageNameToLog } ) { - donationAmount = parseInt(donationAmount); - /* Request contract - { - "donationAmount": 5, - "savedSessionId": "96b1a16e-410a-4d08-8421-fe36e82b2275", - "paymentInfo": { - "parentAccountNumber": 167132, - "billToAccountNumber": 87291, - "providerNumber": "005819", - "carId": "CR00069266", - "make": "Acura", - "model": "MDX", - "year": 2020, - "eon": "S1820397", - "zipCode": "43015", - "state": "OH", - "referralNumber": "1821895", - "referralDate": "2025-03-20T16:27:38.93", - "referralSequenceNumber": "1821895", - "serviceZipCode": "43015", - "isReplacement": true, - "deductible": 0, - "coverageStatus": null, - "coverageSubStatus": null, - "serverData": "ZtCNOF1tCLQBAx2NRKHE/n/fqD8zUxRfYtDuTu7uUiPpeg7i6TmwXwggssX5KsXVQbeft+PN+vXYfBFJytLVYgbafNDR0JH3izVTIOh7KGTeB6YaPuCJmodF4SfgVVDHD9LEmEH9wNzM9j3pFjgfXehOFH11SH9dNwTkXIbsGzAeu64DRyJsDdpamM/BPOxlJj60S/R8vnUM8mjyM7B9a63NskFI6BCVIh5mxDE4cSMUgb4zFtwvDgTPxJSwXqKShtoY6ryB8n5UPNkG/Z5tjVuJ7/8RV7WrURM7PN7xLfp6pVEeipWyeFnVEK33G9JOuB6yH75jPO6vMCYRNi0p0pg6laasFDy3hmfuy2W/N0qtcJLVa5N0bUMFFuPQusyEeqsEZ/zx1Srlvsk7i0DF8pTyBcm3JTF5BOWm60wg3ntEOqfRuQqzFc5updILwLAIp39CwJG/fs5Mj3HCDcUKwYlK70fAARtJwFu7wI0vqW5bUSUvJkvm1JRPlyWJ8JNY4Oq1apYqhZS9bps5ofgiOYJbBhPEboEnVukoTkQiYjgbMtBwVGKGL2nNEd77osoEg1KXhEQS+0KD3PoUu/bZkGub6FNGE6iKeFPt9gDSs+S21s22rVSaZkgaoC6SkufPpN6aV78Jx69nMIDd4go4pj2IJX4kS1pD1NEOSWjN4bgVKAtV6/bxBvhNJwnqUE+mE8eAmULsezub4LMhPqA58y/ZlO44jt/qkAw9nuVDRPBve+TdJTotID5dIqJJd6/vkDoHTVaSrbkCBbdG6d9By8AEbKuVrQS/+VurUnYEd2TGahPbOyRdNlud8RB4+4af0ZRFmiKkr6ppa5IbHbTIZ2qtyeOSbIOkv8O7xK/GL6e6Iaaz0wDHaQZC4Ea8FczjpFOlQgixfYcYJBb/W2db+uRvZ3lftVyJ/d082CGbYplOa+aTxymVcQSjBRbXzs6GZ2ytDqRYcRe94F9x/XSVj7g+mih7VS+YH0eOEp0ViTuWP8B1dVnOV5yTkdMbr8n9Q82G4v5brtQdiMDMY3HS6mxPb1IiKiqFX6Jgju8sIMxkJFZQ3iIkAJuOqUYkG1ZW7s4uI6hT46bRqzYaQA18CFu56qaMblOBFuxlJIsYsnMePh2xAH89oay5Kc88xwT2T/4+dzYQ0CqhQ4MTBB7nXelav2rMCjaLQ/V/a5r1TnLr2n0GbvODQeNl97qzi5lDYKlnuF8nOfOqZNOsPSsrsk3UZJJYZwNxDZaweHIeeg5P2ZW5agswPx/U5DkU1MzE1VAQ+DQAenaE2SLo4dSPBHMmt2gLpgu0LaCuzTR2IL/EM+Tpdn/Pcv1E7lPJIycIIwO7QGJcVkwCx8CJ/WCo6xDMq+9zjSVbqAaL5MzySZCeFCMyZxvEk7qXig6rflB3K3Jay4qSFjBxBXhOEuT6zKXyhR41IXRtZRmtPkscypFEUXvR5nJV7AQUIbljGEcikOLmSiCEnl8dI2Ny9xCHLOro8UXqVUy8dHGmTRGTE/mS1JNZ3y4XaZSyHcABVWbZcR3KIXVxd6rtUA/pBvWpbq8nH3WWlJGqkoxUVEridtXqcBuzTKg3/i6vLs0/pHGwdM38XizKcIxykvJrur3vEQ==" - } - } - */ + const state = JSON.parse( + window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) + ); + const order = state.order; + const payload = { + donationAmount: parseInt(donationAmount), + savedSessionId: state.applicationUser.savedSessionId, + paymentInfo: { + parentAccountNumber: order.payment.parentAccountNumber, + billToAccountNumber: order.payment.billToAccountNumber, + providerNumber: order.serviceLocation.provider.providerNumber, + carId: order.vehicle.carId, + make: order.vehicle.make, + model: order.vehicle.model, + year: order.vehicle.year, + eon: order.eon, + zipCode: order.serviceLocation.zipCode, + state: order.serviceLocation.state, + referralNumber: order.referralNumber, + referralDate: order.referralDate, + referralSequenceNumber: order.referralSequenceNumber, + serviceZipCode: order.serviceLocation.zipCode, + isReplacement: !order.damage.isRepair, + deductible: order.policy.currentDeductible, + coverageStatus: order.payment.insuranceCoverage.coverageStatus, + coverageSubStatus: order.payment.insuranceCoverage.coverageSubStatus, + serverData: order.lineItems.serverData, + }, + }; - /* Uncomment and use when endpoint integration is finalized - return globalMethods.callHttpClient({ + const response = await globalMethods.callHttpClient({ method: endpoints.AddDonationPart.method, endpoint: endpoints.AddDonationPart.url, - payload: { - donationAmount: donationAmount, - savedSessionId: "96b1a16e-410a-4d08-8421-fe36e82b2275", - paymentInfo: { - parentAccountNumber: submittedSessionData.parentAccountNumber, - billToAccountNumber: submittedSessionData.billToAccountNumber, - providerNumber: submittedSessionData.providerNumber, - carId: "CR00069266", - make: "Acura", - model: "MDX", - year: 2020, - eon: "S1820397", - zipCode: "43015", - state: "OH", - referralNumber: "1821895", - referralDate: "2025-03-20T16:27:38.93", - referralSequenceNumber: "1821895", - serviceZipCode: "43015", - isReplacement: true, - deductible: 0, - coverageStatus: null, - coverageSubStatus: null, - serverData: "ZtCNOF1tCLQBAx2NRKHE/n/fqD8zUxRfYtDuTu7uUiPpeg7i6TmwXwggssX5KsXVQbeft+PN+vXYfBFJytLVYgbafNDR0JH3izVTIOh7KGTeB6YaPuCJmodF4SfgVVDHD9LEmEH9wNzM9j3pFjgfXehOFH11SH9dNwTkXIbsGzAeu64DRyJsDdpamM/BPOxlJj60S/R8vnUM8mjyM7B9a63NskFI6BCVIh5mxDE4cSMUgb4zFtwvDgTPxJSwXqKShtoY6ryB8n5UPNkG/Z5tjVuJ7/8RV7WrURM7PN7xLfp6pVEeipWyeFnVEK33G9JOuB6yH75jPO6vMCYRNi0p0pg6laasFDy3hmfuy2W/N0qtcJLVa5N0bUMFFuPQusyEeqsEZ/zx1Srlvsk7i0DF8pTyBcm3JTF5BOWm60wg3ntEOqfRuQqzFc5updILwLAIp39CwJG/fs5Mj3HCDcUKwYlK70fAARtJwFu7wI0vqW5bUSUvJkvm1JRPlyWJ8JNY4Oq1apYqhZS9bps5ofgiOYJbBhPEboEnVukoTkQiYjgbMtBwVGKGL2nNEd77osoEg1KXhEQS+0KD3PoUu/bZkGub6FNGE6iKeFPt9gDSs+S21s22rVSaZkgaoC6SkufPpN6aV78Jx69nMIDd4go4pj2IJX4kS1pD1NEOSWjN4bgVKAtV6/bxBvhNJwnqUE+mE8eAmULsezub4LMhPqA58y/ZlO44jt/qkAw9nuVDRPBve+TdJTotID5dIqJJd6/vkDoHTVaSrbkCBbdG6d9By8AEbKuVrQS/+VurUnYEd2TGahPbOyRdNlud8RB4+4af0ZRFmiKkr6ppa5IbHbTIZ2qtyeOSbIOkv8O7xK/GL6e6Iaaz0wDHaQZC4Ea8FczjpFOlQgixfYcYJBb/W2db+uRvZ3lftVyJ/d082CGbYplOa+aTxymVcQSjBRbXzs6GZ2ytDqRYcRe94F9x/XSVj7g+mih7VS+YH0eOEp0ViTuWP8B1dVnOV5yTkdMbr8n9Q82G4v5brtQdiMDMY3HS6mxPb1IiKiqFX6Jgju8sIMxkJFZQ3iIkAJuOqUYkG1ZW7s4uI6hT46bRqzYaQA18CFu56qaMblOBFuxlJIsYsnMePh2xAH89oay5Kc88xwT2T/4+dzYQ0CqhQ4MTBB7nXelav2rMCjaLQ/V/a5r1TnLr2n0GbvODQeNl97qzi5lDYKlnuF8nOfOqZNOsPSsrsk3UZJJYZwNxDZaweHIeeg5P2ZW5agswPx/U5DkU1MzE1VAQ+DQAenaE2SLo4dSPBHMmt2gLpgu0LaCuzTR2IL/EM+Tpdn/Pcv1E7lPJIycIIwO7QGJcVkwCx8CJ/WCo6xDMq+9zjSVbqAaL5MzySZCeFCMyZxvEk7qXig6rflB3K3Jay4qSFjBxBXhOEuT6zKXyhR41IXRtZRmtPkscypFEUXvR5nJV7AQUIbljGEcikOLmSiCEnl8dI2Ny9xCHLOro8UXqVUy8dHGmTRGTE/mS1JNZ3y4XaZSyHcABVWbZcR3KIXVxd6rtUA/pBvWpbq8nH3WWlJGqkoxUVEridtXqcBuzTKg3/i6vLs0/pHGwdM38XizKcIxykvJrur3vEQ==" - } - }, + payload: payload, logApiCall: true, pageNameToLog: pageNameToLog, }); - */ - - /* Response contract - { - "wasSuccessful": true, - "wasLocked": true - } - */ - let result; - - switch (donationAmount) { - case 1: - result = { wasSuccessful: true, wasLocked: false }; - break; - case 3: - result = { wasSuccessful: false, wasLocked: true }; - break; - case 5: - result = { wasSuccessful: false, wasLocked: false }; - break; - default: - result = { wasSuccessful: null, wasLocked: null }; // Default case if amount doesn't match - } - - return result; + return response.data; }, getPartFromCapabilityQuestionAnswer(context, { payload, pageNameToLog }) { @@ -3302,38 +3254,22 @@ export const actions = { }, addDonationToSubmittedState(context, donationAmount) { - console.log("running addDonationToSubmittedOrder()... donationAmount: ", donationAmount); - const submittedOrder = deepClone(baseMixin.methods.getSubmittedOrder()); const submittedApplicationUser = deepClone(baseMixin.methods.getSubmittedApplicationUser()); - if (donationAmount > 0) { - console.log( - "running addDonationToSubmittedOrder()... adding donation to supportingItems in session storage " - ); - submittedOrder.lineItems.supportingItems.push({ - partNumber: `DONATION_${donationAmount}`, - description: `DONATION $${donationAmount}`, - partType: partTypeStrings.DONATION, - isInsurable: false, - isChildPart: false, - laborAmount: 0, - sellingPrice: donationAmount, - kitPrice: 0, - salesTax: 0, - id: `donation-${donationAmount}`, - }); - } else { - // filter out all donations - console.log( - "running addDonationToSubmittedOrder()... removing all donation items in supportingItems in session storage " - ); + submittedOrder.lineItems.supportingItems.push({ + partNumber: `DONATION_${donationAmount}`, + description: `DONATION $${donationAmount}`, + partType: partTypeStrings.DONATION, + isInsurable: false, + isChildPart: false, + laborAmount: 0, + sellingPrice: donationAmount, + kitPrice: 0, + salesTax: 0, + }); - const nonDonationItems = submittedOrder.lineItems.supportingItems.filter((item) => { - return item.partType !== "DONATION"; - }); - submittedOrder.lineItems.supportingItems = nonDonationItems; - } + addGuidToLineItemsIfNotAlreadyThere(submittedOrder.lineItems.supportingItems); const submittedState = { order: submittedOrder,