From 5e3fe3341463bd6092239f2b8b48a87862358bb1 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 11 Apr 2024 16:34:04 -0400 Subject: [PATCH 01/12] order-confirmation cart WIP --- .../cart-dropdown/cart-dropdown.vue | 113 +++++++++++++++++- .../order-confirmation/order-confirmation.vue | 34 +++++- 2 files changed, 140 insertions(+), 7 deletions(-) diff --git a/src/iss-components/cart-dropdown/cart-dropdown.vue b/src/iss-components/cart-dropdown/cart-dropdown.vue index c1d148bd..4e7163b1 100644 --- a/src/iss-components/cart-dropdown/cart-dropdown.vue +++ b/src/iss-components/cart-dropdown/cart-dropdown.vue @@ -171,6 +171,11 @@ export default { recyclingModalCmsWidgetName: String, availableVaps: Array }, + setup() { + const mainStore = useMainStore(); + const { submittedOrder } = mainStore; + return { mainStore, submittedOrder }; + }, data() { return { isExpanded: false, @@ -191,16 +196,35 @@ export default { computed: { deductible() { // Note: added as computed so it can be used in the template. + if (this.submittedOrder) { + return this.submittedOrder.currentDeductible; + } return useMainStore().order.currentDeductible; }, showDeductibleCartItem() { + if (this.submittedOrder) { + return this.submittedOrder.policy.noCoverage === false && this.submittedOrder.policy.isITAC === false; + } return !useMainStore().isNoComp && !useMainStore().isITAC; }, recycleFeeLineItem() { + if (this.submittedOrder) { + return this.submittedOrder.lineItems.supportingItems + ?.find((lineItem) => lineItem.partNumber === partNumberStrings.RECYCLE_FEE); + } return useMainStore().lineItems.supportingItems ?.find((lineItem) => lineItem.partNumber === partNumberStrings.RECYCLE_FEE); }, baseServiceLineItems() { + if (this.submittedOrder) { + const { supportingItems, glassParts, otherParts } = this.submittedOrder.lineItems; + const parts = [ + ...(supportingItems ?? []), + ...(glassParts ?? []), + ...(otherParts ?? []) + ]; + return parts.filter((part) => part !== this.recycleFeeLineItem); + } const { supportingItems, glassParts, otherParts } = useMainStore().lineItems; const parts = [ ...(supportingItems ?? []), @@ -213,10 +237,27 @@ export default { return getPriceOfLineItems(this.baseServiceLineItems) ?? 0; }, isUnverified() { - return !useMainStore().isNoComp && !useMainStore().isITAC - && (this.deductible == null || !useMainStore().isVerifiedCoverageStatus); + if (this.submittedOrder) { + return this.submittedOrder.policy.noCoverage === false && this.submittedOrder.policy.isITAC === false + && (this.submittedOrder.currentDeductible == null || this.submittedOrder.payment.isVerified === false); + } return !useMainStore().isNoComp && !useMainStore().isITAC + && (this.deductible == null || !useMainStore().isVerifiedCoverageStatus); }, subTotal() { + if (this.submittedOrder) { + const { supportingItems, glassParts, otherParts, vaps, mobileFee } = this.submittedOrder.lineItems; + const allLineItems = [ + ...(supportingItems ?? []), + ...(glassParts ?? []), + ...(otherParts ?? []), + ...(vaps ?? []), + mobileFee + ]; + return this.submittedOrder.policy.noCoverage === false && this.submittedOrder.policy.isITAC === false + ? this.deductible + getPriceOfLineItems([...this.feeLineItems, ...(vaps ?? [])]) + : getPriceOfLineItems(allLineItems); + } + const { supportingItems, glassParts, otherParts, vaps, mobileFee } = useMainStore().lineItems; const allLineItems = [ ...(supportingItems ?? []), @@ -230,6 +271,17 @@ export default { : getPriceOfLineItems(allLineItems); }, feeLineItems() { + if (this.submittedOrder) { + const { mobileFee } = this.submittedOrder.lineItems; + const result = []; + if (mobileFee) { + result.push(mobileFee); + } + if (this.recycleFeeLineItem) { + result.push(this.recycleFeeLineItem); + } + return result; + } const { mobileFee } = useMainStore().lineItems; const result = []; if (mobileFee) { @@ -247,6 +299,19 @@ export default { let result = 0; + if (this.submittedOrder) { + if (this.submittedOrder.payment.insuranceCoverage.isVerified) { + if (this.submittedOrder.policy.isITAC || this.submittedOrder.policy.noCoverage) { + result += sumTax(this.baseServiceLineItems); + } else { + // deductible-case need to show tax for Recycle Fee + result += this.recycleFeeLineItem?.salesTax ?? 0; + } + } + result += sumTax(this.submittedOrder.lineItems.vaps ?? []); + + return result; + } if (useMainStore().payment.insuranceCoverage.isVerified) { if (useMainStore().isITAC || useMainStore().isNoComp) { result += sumTax(this.baseServiceLineItems); @@ -266,6 +331,19 @@ export default { : this.subTotal + this.salesTax; }, availableLineItems() { + if (this.submittedOrder) { + const { supportingItems, glassParts, otherParts, mobileFee } = this.submittedOrder.lineItems; + const result = [ + ...(supportingItems ?? []), + ...(glassParts ?? []), + ...(otherParts ?? []), + ...(this.availableVaps ?? []) + ]; + if (mobileFee) { + result.push(mobileFee); + } + return result; + } const { supportingItems, glassParts, otherParts, mobileFee } = useMainStore().lineItems; const result = [ ...(supportingItems ?? []), @@ -279,6 +357,16 @@ export default { return result; }, servicePackageTier() { + if (this.submittedOrder) { + const { glassToReplace, isRepair } = this.submittedOrder.damage; + const { vaps } = this.submittedOrder.lineItems; + return getHighestFullySatisfiedTier( + glassToReplace ?? [], + this.availableLineItems, + isRepair, + vaps ?? [] + ); + } const { glassToReplace, isRepair } = useMainStore().damage; const { vaps } = useMainStore().lineItems; return getHighestFullySatisfiedTier( @@ -367,10 +455,16 @@ export default { return this.getCmsContent(this.widget.salesTax, widgetFields.TEXT_BLOCK_WIDGET.TEXT); }, servicePackageNames() { - return this.getCmsContent( + const test = this.getCmsContent( this.widget.servicePackage, widgetFields.INPUT_QUESTION_WIDGET.ANSWERS ); + console.log(test); + return test; + // return this.getCmsContent( + // this.widget.servicePackage, + // widgetFields.INPUT_QUESTION_WIDGET.ANSWERS + // ); }, servicePackageLabelWidget() { if (!this.servicePackageNames) { @@ -411,6 +505,13 @@ export default { this.isExpanded = !this.isExpanded; }, getDisplayed(amount) { + if (this.submittedOrder) { + return this.isUnverified + && this.submittedOrder.policy.noCoverage === false + && this.submittedOrder.policy.isITAC === false + ? VERIFYING_COVERAGE + : formatAmountInDollars(amount); + } return this.isUnverified && !useMainStore().isNoComp && !useMainStore().isITAC @@ -436,6 +537,12 @@ export default { return cartItem; }, getCartItemForVapsPart(partType) { + if (this.submittedOrder) { + const label = this.getCmsContentForVapsType(partType); + const lineItems = this.submittedOrder.lineItems.vaps + ?.filter((vapsLineItem) => vapsLineItem.partType === partType) ?? []; + return this.getCartItem(label, lineItems, cartItemType.VAP, partType); + } const label = this.getCmsContentForVapsType(partType); const lineItems = useMainStore().lineItems.vaps ?.filter((vapsLineItem) => vapsLineItem.partType === partType) ?? []; diff --git a/src/layouts/order-confirmation/order-confirmation.vue b/src/layouts/order-confirmation/order-confirmation.vue index c045f651..573ba695 100644 --- a/src/layouts/order-confirmation/order-confirmation.vue +++ b/src/layouts/order-confirmation/order-confirmation.vue @@ -47,6 +47,14 @@ v-html="appointmentWordingText2"> +
+ +
@@ -69,6 +77,8 @@ import siteHeader from '@/iss-components/site-header/site-header.vue'; import vehicleBanner from '@/iss-components/vehicle-banner/vehicle-banner.vue'; import siteFooter from '@/iss-components/site-footer/site-footer.vue'; import addToCalendar from '@/layouts/order-confirmation/add-to-calendar/add-to-calendar.vue'; +import cartDropdown from '@/iss-components/cart-dropdown/cart-dropdown.vue'; + // Supporting files import { fetchCmsContentForPage, processIfStatements } from '@/helpers/cms-content-helper'; import settleAllPromises from '@/helpers/layout-helper'; @@ -91,22 +101,26 @@ export default { siteHeader, vehicleBanner, siteFooter, - addToCalendar + addToCalendar, + cartDropdown }, mixins: [BaseFormMixin], async beforeRouteEnter(to, from, next) { - console.log('beforeRouteEnter just called'); useMainStore().createSubmittedOrder(); // Call APIs const cmsContentPromise = fetchCmsContentForPage(to.query.issPage); + // Settle promises and get results const promiseResultMap = [ { resultKey: 'cmsContent', promise: cmsContentPromise - }]; - // use resultMap to populate layout content. + } + ]; + + // use resultMap to populate layout content. const resultMap = await settleAllPromises(promiseResultMap); + next((vm) => { vm.setCmsContent(resultMap.cmsContent); }); @@ -116,6 +130,11 @@ export default { const { submittedOrder } = mainStore; return { mainStore, submittedOrder }; }, + data() { + return { + selectedVaps: this.submittedOrder.lineItems.vaps + }; + }, computed: { carrierName() { return this.mainStore.issConfig.clientName; @@ -263,12 +282,16 @@ export default { this.submittedOrder.schedule.jobMaxMinutes ); return inshopDurationTime; + }, + isPayInAdvance() { + return this.submittedOrder.payment.isPayInAdvance; } }, mounted() { if (this.carrierUrl) { this.$refs.siteFooter.updateButtonText(`Go back to ${this.carrierName}`); } + console.log(this.submittedOrder); }, methods: { arePagePrerequisitesValid() { @@ -364,6 +387,9 @@ export default { default: return null; } + }, + setAvailableVaps(vaps) { + this.availableVaps = vaps; } } }; From 4c6cd78e6299cb800fe7da8e9b63b279030bf9cd Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 12 Apr 2024 15:15:16 -0400 Subject: [PATCH 02/12] refactor cart to use submittedOrder values on order-confirmation page --- .../cart-dropdown/cart-dropdown.vue | 163 ++++-------------- 1 file changed, 38 insertions(+), 125 deletions(-) diff --git a/src/iss-components/cart-dropdown/cart-dropdown.vue b/src/iss-components/cart-dropdown/cart-dropdown.vue index 4e7163b1..24d585f3 100644 --- a/src/iss-components/cart-dropdown/cart-dropdown.vue +++ b/src/iss-components/cart-dropdown/cart-dropdown.vue @@ -59,7 +59,7 @@
{{ item?.name ?? '' }} lineItem.partNumber === partNumberStrings.RECYCLE_FEE); - } - return useMainStore().lineItems.supportingItems + return this.lineItems.supportingItems ?.find((lineItem) => lineItem.partNumber === partNumberStrings.RECYCLE_FEE); }, baseServiceLineItems() { - if (this.submittedOrder) { - const { supportingItems, glassParts, otherParts } = this.submittedOrder.lineItems; - const parts = [ - ...(supportingItems ?? []), - ...(glassParts ?? []), - ...(otherParts ?? []) - ]; - return parts.filter((part) => part !== this.recycleFeeLineItem); - } - const { supportingItems, glassParts, otherParts } = useMainStore().lineItems; + const { supportingItems, glassParts, otherParts } = this.lineItems; const parts = [ ...(supportingItems ?? []), ...(glassParts ?? []), @@ -236,29 +220,21 @@ export default { baseServicePrice() { return getPriceOfLineItems(this.baseServiceLineItems) ?? 0; }, + isVerified() { + return this.submittedOrder ? this.submittedOrder.payment.isVerified : useMainStore().isVerifiedCoverageStatus; + }, isUnverified() { - if (this.submittedOrder) { - return this.submittedOrder.policy.noCoverage === false && this.submittedOrder.policy.isITAC === false - && (this.submittedOrder.currentDeductible == null || this.submittedOrder.payment.isVerified === false); - } return !useMainStore().isNoComp && !useMainStore().isITAC - && (this.deductible == null || !useMainStore().isVerifiedCoverageStatus); + return !this.isNoComp && !this.isITAC + && (this.deductible == null || this.isUnverified); + }, + isITAC() { + return this.submittedOrder ? this.submittedOrder.policy.isITAC : useMainStore().isITAC; + }, + isNoComp() { + return this.submittedOrder ? this.submittedOrder.policy.noCoverage : useMainStore().isNoComp; }, subTotal() { - if (this.submittedOrder) { - const { supportingItems, glassParts, otherParts, vaps, mobileFee } = this.submittedOrder.lineItems; - const allLineItems = [ - ...(supportingItems ?? []), - ...(glassParts ?? []), - ...(otherParts ?? []), - ...(vaps ?? []), - mobileFee - ]; - return this.submittedOrder.policy.noCoverage === false && this.submittedOrder.policy.isITAC === false - ? this.deductible + getPriceOfLineItems([...this.feeLineItems, ...(vaps ?? [])]) - : getPriceOfLineItems(allLineItems); - } - - const { supportingItems, glassParts, otherParts, vaps, mobileFee } = useMainStore().lineItems; + const { supportingItems, glassParts, otherParts, vaps, mobileFee } = this.lineItems; const allLineItems = [ ...(supportingItems ?? []), ...(glassParts ?? []), @@ -266,23 +242,12 @@ export default { ...(vaps ?? []), mobileFee ]; - return !useMainStore().isNoComp && !useMainStore().isITAC + return !this.isNoComp && !this.isITAC ? this.deductible + getPriceOfLineItems([...this.feeLineItems, ...(vaps ?? [])]) : getPriceOfLineItems(allLineItems); }, feeLineItems() { - if (this.submittedOrder) { - const { mobileFee } = this.submittedOrder.lineItems; - const result = []; - if (mobileFee) { - result.push(mobileFee); - } - if (this.recycleFeeLineItem) { - result.push(this.recycleFeeLineItem); - } - return result; - } - const { mobileFee } = useMainStore().lineItems; + const { mobileFee } = this.lineItems; const result = []; if (mobileFee) { result.push(mobileFee); @@ -299,21 +264,8 @@ export default { let result = 0; - if (this.submittedOrder) { - if (this.submittedOrder.payment.insuranceCoverage.isVerified) { - if (this.submittedOrder.policy.isITAC || this.submittedOrder.policy.noCoverage) { - result += sumTax(this.baseServiceLineItems); - } else { - // deductible-case need to show tax for Recycle Fee - result += this.recycleFeeLineItem?.salesTax ?? 0; - } - } - result += sumTax(this.submittedOrder.lineItems.vaps ?? []); - - return result; - } - if (useMainStore().payment.insuranceCoverage.isVerified) { - if (useMainStore().isITAC || useMainStore().isNoComp) { + if (this.isVerified) { + if (this.isITAC || this.isNoComp) { result += sumTax(this.baseServiceLineItems); } else { // deductible-case need to show tax for Recycle Fee @@ -321,7 +273,7 @@ export default { } } - result += sumTax(useMainStore().lineItems.vaps ?? []); + result += sumTax(this.lineItems.vaps ?? []); return result; }, @@ -331,20 +283,7 @@ export default { : this.subTotal + this.salesTax; }, availableLineItems() { - if (this.submittedOrder) { - const { supportingItems, glassParts, otherParts, mobileFee } = this.submittedOrder.lineItems; - const result = [ - ...(supportingItems ?? []), - ...(glassParts ?? []), - ...(otherParts ?? []), - ...(this.availableVaps ?? []) - ]; - if (mobileFee) { - result.push(mobileFee); - } - return result; - } - const { supportingItems, glassParts, otherParts, mobileFee } = useMainStore().lineItems; + const { supportingItems, glassParts, otherParts, mobileFee } = this.lineItems; const result = [ ...(supportingItems ?? []), ...(glassParts ?? []), @@ -356,19 +295,12 @@ export default { } return result; }, + vehicleDamage() { + return this.submittedOrder ? this.submittedOrder.damage : useMainStore().damage; + }, servicePackageTier() { - if (this.submittedOrder) { - const { glassToReplace, isRepair } = this.submittedOrder.damage; - const { vaps } = this.submittedOrder.lineItems; - return getHighestFullySatisfiedTier( - glassToReplace ?? [], - this.availableLineItems, - isRepair, - vaps ?? [] - ); - } - const { glassToReplace, isRepair } = useMainStore().damage; - const { vaps } = useMainStore().lineItems; + const { glassToReplace, isRepair } = this.vehicleDamage; + const { vaps } = this.lineItems; return getHighestFullySatisfiedTier( glassToReplace ?? [], this.availableLineItems, @@ -377,7 +309,7 @@ export default { ); }, partTypesInServicePackage() { - const { glassToReplace, isRepair } = useMainStore().damage; + const { glassToReplace, isRepair } = this.vehicleDamage; return getPackageContents( glassToReplace ?? [], this.availableLineItems, @@ -399,7 +331,7 @@ export default { return items; }, nonServicePackageCartItems() { - const vapPartTypesInOrder = Array.from(new Set(useMainStore().lineItems.vaps?.map((vap) => vap.partType) ?? [])); + const vapPartTypesInOrder = Array.from(new Set(this.lineItems.vaps?.map((vap) => vap.partType) ?? [])); const vapPartTypesInOrderButNotPackage = vapPartTypesInOrder .filter((partType) => !this.partTypesInServicePackage.includes(partType)) ?? []; @@ -455,16 +387,10 @@ export default { return this.getCmsContent(this.widget.salesTax, widgetFields.TEXT_BLOCK_WIDGET.TEXT); }, servicePackageNames() { - const test = this.getCmsContent( + return this.getCmsContent( this.widget.servicePackage, widgetFields.INPUT_QUESTION_WIDGET.ANSWERS ); - console.log(test); - return test; - // return this.getCmsContent( - // this.widget.servicePackage, - // widgetFields.INPUT_QUESTION_WIDGET.ANSWERS - // ); }, servicePackageLabelWidget() { if (!this.servicePackageNames) { @@ -486,7 +412,7 @@ export default { : null; }, mobileFeeCartItem() { - const mobileFeeLineItem = useMainStore().lineItems.mobileFee; + const mobileFeeLineItem = this.lineItems.mobileFee; return mobileFeeLineItem ? this.getCartItem( this.getCmsContent(this.widget.mobileFee, widgetFields.TEXT_BLOCK_WIDGET.TEXT), @@ -505,16 +431,9 @@ export default { this.isExpanded = !this.isExpanded; }, getDisplayed(amount) { - if (this.submittedOrder) { - return this.isUnverified - && this.submittedOrder.policy.noCoverage === false - && this.submittedOrder.policy.isITAC === false - ? VERIFYING_COVERAGE - : formatAmountInDollars(amount); - } return this.isUnverified - && !useMainStore().isNoComp - && !useMainStore().isITAC + && !this.isNoComp + && !this.isITAC ? VERIFYING_COVERAGE : formatAmountInDollars(amount); }, @@ -537,14 +456,8 @@ export default { return cartItem; }, getCartItemForVapsPart(partType) { - if (this.submittedOrder) { - const label = this.getCmsContentForVapsType(partType); - const lineItems = this.submittedOrder.lineItems.vaps - ?.filter((vapsLineItem) => vapsLineItem.partType === partType) ?? []; - return this.getCartItem(label, lineItems, cartItemType.VAP, partType); - } const label = this.getCmsContentForVapsType(partType); - const lineItems = useMainStore().lineItems.vaps + const lineItems = this.lineItems.vaps ?.filter((vapsLineItem) => vapsLineItem.partType === partType) ?? []; return this.getCartItem(label, lineItems, cartItemType.VAP, partType); }, From 9f2c7dbddfaef7ca6ab9c26964799137c0af1d29 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 12 Apr 2024 15:15:47 -0400 Subject: [PATCH 03/12] add computed --- src/layouts/order-confirmation/order-confirmation.vue | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/layouts/order-confirmation/order-confirmation.vue b/src/layouts/order-confirmation/order-confirmation.vue index 573ba695..a801ea09 100644 --- a/src/layouts/order-confirmation/order-confirmation.vue +++ b/src/layouts/order-confirmation/order-confirmation.vue @@ -130,11 +130,6 @@ export default { const { submittedOrder } = mainStore; return { mainStore, submittedOrder }; }, - data() { - return { - selectedVaps: this.submittedOrder.lineItems.vaps - }; - }, computed: { carrierName() { return this.mainStore.issConfig.clientName; @@ -285,6 +280,9 @@ export default { }, isPayInAdvance() { return this.submittedOrder.payment.isPayInAdvance; + }, + selectedVaps() { + return this.submittedOrder.lineItems.vaps; } }, mounted() { From 30efde8d39f927dbbccdd2d602eb6f2e62af1502 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Mon, 15 Apr 2024 13:50:55 -0400 Subject: [PATCH 04/12] console logging --- src/layouts/order-confirmation/order-confirmation.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/layouts/order-confirmation/order-confirmation.vue b/src/layouts/order-confirmation/order-confirmation.vue index a801ea09..be6db578 100644 --- a/src/layouts/order-confirmation/order-confirmation.vue +++ b/src/layouts/order-confirmation/order-confirmation.vue @@ -107,6 +107,7 @@ export default { mixins: [BaseFormMixin], async beforeRouteEnter(to, from, next) { useMainStore().createSubmittedOrder(); + console.log('submitted order created'); // Call APIs const cmsContentPromise = fetchCmsContentForPage(to.query.issPage); @@ -128,6 +129,7 @@ export default { setup() { const mainStore = useMainStore(); const { submittedOrder } = mainStore; + console.log('setup called'); return { mainStore, submittedOrder }; }, computed: { @@ -289,7 +291,8 @@ export default { if (this.carrierUrl) { this.$refs.siteFooter.updateButtonText(`Go back to ${this.carrierName}`); } - console.log(this.submittedOrder); + console.log('mounted called'); + // console.log(this.submittedOrder); }, methods: { arePagePrerequisitesValid() { From f68421a65fef9ff27a972cb0ede0844c1fc39dc9 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Tue, 16 Apr 2024 10:14:04 -0400 Subject: [PATCH 05/12] add prop --- src/iss-components/cart-dropdown/cart-dropdown.vue | 8 ++------ src/layouts/order-confirmation/order-confirmation.vue | 5 ++--- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/iss-components/cart-dropdown/cart-dropdown.vue b/src/iss-components/cart-dropdown/cart-dropdown.vue index 24d585f3..aa422d5f 100644 --- a/src/iss-components/cart-dropdown/cart-dropdown.vue +++ b/src/iss-components/cart-dropdown/cart-dropdown.vue @@ -169,12 +169,8 @@ export default { showAsPaid: Boolean, readOnly: Boolean, recyclingModalCmsWidgetName: String, - availableVaps: Array - }, - setup() { - const mainStore = useMainStore(); - const { submittedOrder } = mainStore; - return { mainStore, submittedOrder }; + availableVaps: Array, + submittedOrder: Object }, data() { return { diff --git a/src/layouts/order-confirmation/order-confirmation.vue b/src/layouts/order-confirmation/order-confirmation.vue index be6db578..853e4193 100644 --- a/src/layouts/order-confirmation/order-confirmation.vue +++ b/src/layouts/order-confirmation/order-confirmation.vue @@ -53,7 +53,8 @@ :readOnly="true" recyclingModalCmsWidgetName="RecycleModal" servicePackageTitleWidgetName="ServicePackageTitle" - :availableVaps="selectedVaps" /> + :availableVaps="selectedVaps" + :submittedOrder="submittedOrder" />
+
+ {{ amountPaidLabel }} + {{ getDisplayed(amountPaid) }} +
Date: Tue, 16 Apr 2024 15:11:59 -0400 Subject: [PATCH 07/12] unit test fixes --- .../__snapshots__/cart-dropdown.spec.js.snap | 1 + .../cart-dropdown/cart-dropdown.spec.js | 40 +++++- .../cart-dropdown/cart-dropdown.vue | 10 +- .../order-confirmation.spec.js | 135 ++++++++++++++++-- 4 files changed, 166 insertions(+), 20 deletions(-) diff --git a/src/iss-components/cart-dropdown/__snapshots__/cart-dropdown.spec.js.snap b/src/iss-components/cart-dropdown/__snapshots__/cart-dropdown.spec.js.snap index 9ade738d..dc913570 100644 --- a/src/iss-components/cart-dropdown/__snapshots__/cart-dropdown.spec.js.snap +++ b/src/iss-components/cart-dropdown/__snapshots__/cart-dropdown.spec.js.snap @@ -10,6 +10,7 @@ Object { "isExpanded": false, "widget": Object { "amountDue": "AmountDueTextWidget", + "amountPaid": "AmountPaidTextWidget", "basePrice": "BasePriceWidget", "deductible": "DeductibleWidget", "mobileFee": "MobileServiceWidget", diff --git a/src/iss-components/cart-dropdown/cart-dropdown.spec.js b/src/iss-components/cart-dropdown/cart-dropdown.spec.js index 80ee78d9..5977a501 100644 --- a/src/iss-components/cart-dropdown/cart-dropdown.spec.js +++ b/src/iss-components/cart-dropdown/cart-dropdown.spec.js @@ -225,6 +225,27 @@ describe('cart-dropdown component', () => { // Assert expect(salesTax.exists()).toBeTruthy(); }); + test('amount paid when Pay in Advance', () => { + // Arrange + const reference = '#cart-amount-paid'; + const isExpanded = true; + const showAsPaid = true; + const initialPropsData = { isExpanded, showAsPaid }; + const storeData = { + order: { + payment: { + isPayInAdvance: true + } + } + }; + const { wrapper } = getMountedComponent(storeData, {}, initialPropsData); + + // Act + const amountPaid = wrapper.find(reference); + + // Assert + expect(amountPaid.exists()).toBeTruthy(); + }); test('bottom amount due', () => { // Arrange const reference = '#bottom-amount-due'; @@ -593,7 +614,13 @@ describe('cart-dropdown component', () => { vaps: null }, payment: { - insuranceCoverage: { isVerified: true } + insuranceCoverage: { + coverageStatus: coverageStatuses.VERIFIED + } + }, + policy: { + noCoverage: false, + isITAC: false } }, issConfig: { @@ -629,7 +656,9 @@ describe('cart-dropdown component', () => { ] }, payment: { - insuranceCoverage: { isVerified: true } + insuranceCoverage: { + coverageStatus: coverageStatuses.VERIFIED + } } }, issConfig: { @@ -1744,7 +1773,12 @@ describe('cart-dropdown component', () => { isNoComp: false }, currentDeductible: 321, - policyLookupSuccessful: true + policyLookupSuccessful: true, + payment: { + insuranceCoverage: { + coverageStatus: coverageStatuses.VERIFIED + } + }, } }; const { wrapper } = getMountedComponent(storeData); diff --git a/src/iss-components/cart-dropdown/cart-dropdown.vue b/src/iss-components/cart-dropdown/cart-dropdown.vue index a7c1581d..e956e462 100644 --- a/src/iss-components/cart-dropdown/cart-dropdown.vue +++ b/src/iss-components/cart-dropdown/cart-dropdown.vue @@ -125,7 +125,7 @@
{{ amountPaidLabel }} {{ getDisplayed(amountPaid) }} @@ -224,12 +224,12 @@ export default { baseServicePrice() { return getPriceOfLineItems(this.baseServiceLineItems) ?? 0; }, - isVerified() { - return this.submittedOrder ? this.submittedOrder.payment.isVerified : useMainStore().isVerifiedCoverageStatus; + isVerifiedCoverageStatus() { + return this.submittedOrder ? this.submittedOrder.payment.insuranceCoverage.isVerified : useMainStore().isVerifiedCoverageStatus; }, isUnverified() { return !this.isNoComp && !this.isITAC - && (this.deductible == null || this.isUnverified); + && (this.deductible == null || !this.isVerifiedCoverageStatus); }, isITAC() { return this.submittedOrder ? this.submittedOrder.policy.isITAC : useMainStore().isITAC; @@ -268,7 +268,7 @@ export default { let result = 0; - if (this.isVerified) { + if (!this.isUnverified) { if (this.isITAC || this.isNoComp) { result += sumTax(this.baseServiceLineItems); } else { diff --git a/src/layouts/order-confirmation/order-confirmation.spec.js b/src/layouts/order-confirmation/order-confirmation.spec.js index 2eb8208e..83ae6067 100644 --- a/src/layouts/order-confirmation/order-confirmation.spec.js +++ b/src/layouts/order-confirmation/order-confirmation.spec.js @@ -14,7 +14,8 @@ jest.mock('@/helpers/layout-helper.js', () => jest.fn()); jest.mock('@/helpers/cms-content-helper', () => ({ fetchCmsContentForPage: jest.fn(), - processIfStatements: jest.fn() + processIfStatements: jest.fn(), + splitCopyOnCMSPlaceHolder: jest.fn() })); const wordingText = 'wording text {custom:address}'; @@ -105,7 +106,17 @@ const sessionStorage = { zipCode: '12345' } } - } + }, + payment: { + isPayInAdvance: false + }, + lineItems: { + vaps: [] + }, + policy: { + noCoverage: false + }, + damage: {} }; const sessionStorageMock = (() => { @@ -302,7 +313,17 @@ describe('OrderConfirmation.vue', () => { }, serviceLocation: { appointmentType: 'Mobile' - } + }, + payment: { + isPayInAdvance: false + }, + lineItems: { + vaps: [] + }, + policy: { + noCoverage: false + }, + damage: {} }; window.sessionStorage.setItem('submittedOrder', JSON.stringify(testSessionStorage)); const { wrapper } = getMountedComponent(); @@ -331,7 +352,17 @@ describe('OrderConfirmation.vue', () => { zipCode: '12345' } } - } + }, + payment: { + isPayInAdvance: false + }, + lineItems: { + vaps: [] + }, + policy: { + noCoverage: false + }, + damage: {} }; window.sessionStorage.setItem('submittedOrder', JSON.stringify(testSessionStorage)); const { wrapper } = getMountedComponent(); @@ -368,7 +399,17 @@ describe('OrderConfirmation.vue', () => { state: 'AZ', zipCode: '12345', appointmentType: 'Mobile' - } + }, + payment: { + isPayInAdvance: false + }, + lineItems: { + vaps: [] + }, + policy: { + noCoverage: false + }, + damage: {} }; window.sessionStorage.setItem('submittedOrder', JSON.stringify(testSessionStorage)); const { wrapper } = getMountedComponent(); @@ -397,7 +438,17 @@ describe('OrderConfirmation.vue', () => { } }, appointmentType: 'Dropoff' - } + }, + payment: { + isPayInAdvance: false + }, + lineItems: { + vaps: [] + }, + policy: { + noCoverage: false + }, + damage: {} }; window.sessionStorage.setItem('submittedOrder', JSON.stringify(testSessionStorage)); const { wrapper } = getMountedComponent(); @@ -426,7 +477,17 @@ describe('OrderConfirmation.vue', () => { } }, appointmentType: 'Inshop' - } + }, + payment: { + isPayInAdvance: false + }, + lineItems: { + vaps: [] + }, + policy: { + noCoverage: false + }, + damage: {} }; window.sessionStorage.setItem('submittedOrder', JSON.stringify(testSessionStorage)); const { wrapper } = getMountedComponent(); @@ -452,7 +513,17 @@ describe('OrderConfirmation.vue', () => { state: 'AZ', zipCode: '12345', appointmentType: 'Mobile' - } + }, + payment: { + isPayInAdvance: false + }, + lineItems: { + vaps: [] + }, + policy: { + noCoverage: false + }, + damage: {} }; window.sessionStorage.setItem('submittedOrder', JSON.stringify(testSessionStorage)); const { wrapper } = getMountedComponent(); @@ -481,7 +552,17 @@ describe('OrderConfirmation.vue', () => { } }, appointmentType: 'Inshop' - } + }, + payment: { + isPayInAdvance: false + }, + lineItems: { + vaps: [] + }, + policy: { + noCoverage: false + }, + damage: {} }; window.sessionStorage.setItem('submittedOrder', JSON.stringify(testSessionStorage)); const { wrapper } = getMountedComponent(); @@ -507,7 +588,17 @@ describe('OrderConfirmation.vue', () => { state: 'AZ', zipCode: '12345', appointmentType: 'Mobile' - } + }, + payment: { + isPayInAdvance: false + }, + lineItems: { + vaps: [] + }, + policy: { + noCoverage: false + }, + damage: {} }; window.sessionStorage.setItem('submittedOrder', JSON.stringify(testSessionStorage)); const { wrapper } = getMountedComponent(); @@ -536,7 +627,17 @@ describe('OrderConfirmation.vue', () => { } }, appointmentType: 'Dropoff' - } + }, + payment: { + isPayInAdvance: false + }, + lineItems: { + vaps: [] + }, + policy: { + noCoverage: false + }, + damage: {} }; window.sessionStorage.setItem('submittedOrder', JSON.stringify(testSessionStorage)); const { wrapper } = getMountedComponent(); @@ -566,7 +667,17 @@ describe('OrderConfirmation.vue', () => { } }, appointmentType: 'Inshop' - } + }, + payment: { + isPayInAdvance: false + }, + lineItems: { + vaps: [] + }, + policy: { + noCoverage: false + }, + damage: {} }; window.sessionStorage.setItem('submittedOrder', JSON.stringify(testSessionStorage)); const { wrapper } = getMountedComponent(); From 27b055d39f5994d281d9550ae719618bc15c3e92 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Wed, 17 Apr 2024 13:04:21 -0400 Subject: [PATCH 08/12] remove unneeded code --- src/layouts/order-confirmation/order-confirmation.vue | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/layouts/order-confirmation/order-confirmation.vue b/src/layouts/order-confirmation/order-confirmation.vue index a6f3df49..77113fbb 100644 --- a/src/layouts/order-confirmation/order-confirmation.vue +++ b/src/layouts/order-confirmation/order-confirmation.vue @@ -108,7 +108,6 @@ export default { mixins: [BaseFormMixin], async beforeRouteEnter(to, from, next) { useMainStore().createSubmittedOrder(); - console.log('submitted order created'); // Call APIs const cmsContentPromise = fetchCmsContentForPage(to.query.issPage); @@ -130,7 +129,6 @@ export default { setup() { const mainStore = useMainStore(); const { submittedOrder } = mainStore; - console.log('setup called'); return { mainStore, submittedOrder }; }, computed: { @@ -387,9 +385,6 @@ export default { default: return null; } - }, - setAvailableVaps(vaps) { - this.availableVaps = vaps; } } }; From 86d32b2273aa2ce2d9883a53ec18c1965d3a0d8d Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 18 Apr 2024 11:17:09 -0400 Subject: [PATCH 09/12] unit test fix --- src/iss-components/cart-dropdown/cart-dropdown.spec.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/iss-components/cart-dropdown/cart-dropdown.spec.js b/src/iss-components/cart-dropdown/cart-dropdown.spec.js index 50694fcc..ed02ba8a 100644 --- a/src/iss-components/cart-dropdown/cart-dropdown.spec.js +++ b/src/iss-components/cart-dropdown/cart-dropdown.spec.js @@ -1813,17 +1813,13 @@ describe('cart-dropdown component', () => { isNoComp: false, policyLookupSuccessful: true }, -<<<<<<< HEAD currentDeductible: 321, policyLookupSuccessful: true, payment: { insuranceCoverage: { coverageStatus: coverageStatuses.VERIFIED } - }, -======= - currentDeductible: 321 ->>>>>>> develop + } } }; const { wrapper } = getMountedComponent(storeData); From 3cba89f72832314b50afe9e3cc32f596573c10c1 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 18 Apr 2024 11:42:36 -0400 Subject: [PATCH 10/12] store getters refactor --- src/store/index.js | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index def5b0cc..1034f8b8 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -267,8 +267,18 @@ export const useMainStore = defineStore({ }, hasRecalibrationPart: (storeState) => getHasRecalibrationPart(storeState), vehicle: (storeState) => storeState.order.vehicle, - damage: (storeState) => storeState.order.damage, - lineItems: (state) => state.order.lineItems, + damage: (storeState) => { + if (storeState.submittedOrder) { + return storeState.submittedOrder.damage; + } + return storeState.order.damage; + }, + lineItems: (state) => { + if (state.submittedOrder) { + return state.submittedOrder.lineItems; + } + return state.order.lineItems; + }, payment: (state) => state.order.payment, policy: (state) => state.order.policy, hasExactlyOneChip: () => state.order.damage.numberOfChips === 1, @@ -282,22 +292,36 @@ export const useMainStore = defineStore({ isClaimAlreadyRegistered: (state) => state.order.payment.insuranceCoverage.claimNumber !== null, isBailout: (state) => state.applicationUser.pageData[issPageValues.BAILOUT_PAGE] != null, bailoutCode: (state) => state.applicationUser.pageData[issPageValues.BAILOUT_PAGE]?.bailoutCode, - isNoComp: (s) => !!s.order.policy.noCoverage, - isITAC: (state) => !!state.order.policy.isITAC, + isNoComp: (s) => { + if (s.submittedOrder) { + return !!s.submittedOrder.policy.noCoverage; + } + return !!s.order.policy.noCoverage; + }, + isITAC: (state) => { + if (state.submittedOrder) { + return !!state.submittedOrder.policy.isITAC; + } + return !!state.order.policy.isITAC; + }, isUnverified: (s) => { - const { payment, currentDeductible, policy } = s.order; + let orderToUse = {}; + if (s.submittedOrder) { + orderToUse = s.submittedOrder; + } else orderToUse = s.order; + const { payment, currentDeductible, policy } = orderToUse; const { policyLookupSuccessful } = policy; const registerClaimSuccessful = !!payment.insuranceCoverage.isVerified; if (!policyLookupSuccessful) { return true; } - if (s.isNoComp && !s.issConfig.enableNoCompQuote) { + if (orderToUse.isNoComp && !orderToUse.issConfig.enableNoCompQuote) { return true; } - if (!s.isNoComp && currentDeductible == null) { + if (!orderToUse.isNoComp && currentDeductible == null) { return true; } - if (s.isClaimRegistrationRequired && !registerClaimSuccessful) { + if (orderToUse.isClaimRegistrationRequired && !registerClaimSuccessful) { return true; } return false; From 678b2e1730e9b72376f5dff6e0c711ee8b8bcb8a Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 18 Apr 2024 13:14:40 -0400 Subject: [PATCH 11/12] revert store getters changes --- src/store/index.js | 40 ++++++++-------------------------------- 1 file changed, 8 insertions(+), 32 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index 1034f8b8..def5b0cc 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -267,18 +267,8 @@ export const useMainStore = defineStore({ }, hasRecalibrationPart: (storeState) => getHasRecalibrationPart(storeState), vehicle: (storeState) => storeState.order.vehicle, - damage: (storeState) => { - if (storeState.submittedOrder) { - return storeState.submittedOrder.damage; - } - return storeState.order.damage; - }, - lineItems: (state) => { - if (state.submittedOrder) { - return state.submittedOrder.lineItems; - } - return state.order.lineItems; - }, + damage: (storeState) => storeState.order.damage, + lineItems: (state) => state.order.lineItems, payment: (state) => state.order.payment, policy: (state) => state.order.policy, hasExactlyOneChip: () => state.order.damage.numberOfChips === 1, @@ -292,36 +282,22 @@ export const useMainStore = defineStore({ isClaimAlreadyRegistered: (state) => state.order.payment.insuranceCoverage.claimNumber !== null, isBailout: (state) => state.applicationUser.pageData[issPageValues.BAILOUT_PAGE] != null, bailoutCode: (state) => state.applicationUser.pageData[issPageValues.BAILOUT_PAGE]?.bailoutCode, - isNoComp: (s) => { - if (s.submittedOrder) { - return !!s.submittedOrder.policy.noCoverage; - } - return !!s.order.policy.noCoverage; - }, - isITAC: (state) => { - if (state.submittedOrder) { - return !!state.submittedOrder.policy.isITAC; - } - return !!state.order.policy.isITAC; - }, + isNoComp: (s) => !!s.order.policy.noCoverage, + isITAC: (state) => !!state.order.policy.isITAC, isUnverified: (s) => { - let orderToUse = {}; - if (s.submittedOrder) { - orderToUse = s.submittedOrder; - } else orderToUse = s.order; - const { payment, currentDeductible, policy } = orderToUse; + const { payment, currentDeductible, policy } = s.order; const { policyLookupSuccessful } = policy; const registerClaimSuccessful = !!payment.insuranceCoverage.isVerified; if (!policyLookupSuccessful) { return true; } - if (orderToUse.isNoComp && !orderToUse.issConfig.enableNoCompQuote) { + if (s.isNoComp && !s.issConfig.enableNoCompQuote) { return true; } - if (!orderToUse.isNoComp && currentDeductible == null) { + if (!s.isNoComp && currentDeductible == null) { return true; } - if (orderToUse.isClaimRegistrationRequired && !registerClaimSuccessful) { + if (s.isClaimRegistrationRequired && !registerClaimSuccessful) { return true; } return false; From 5b361e40ec25883fd58962cbcbb9489ea2eda153 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 18 Apr 2024 13:36:32 -0400 Subject: [PATCH 12/12] remove prop, update value --- src/iss-components/cart-dropdown/cart-dropdown.vue | 5 ++--- src/layouts/order-confirmation/order-confirmation.vue | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/iss-components/cart-dropdown/cart-dropdown.vue b/src/iss-components/cart-dropdown/cart-dropdown.vue index e68774fb..e730a4f0 100644 --- a/src/iss-components/cart-dropdown/cart-dropdown.vue +++ b/src/iss-components/cart-dropdown/cart-dropdown.vue @@ -184,13 +184,12 @@ export default { recyclingModalCmsWidgetName: String, showDropdownHeader: Boolean, isInitiallyExpanded: Boolean, - submittedOrder: Object, - selectedVaps: Array + submittedOrder: Object }, data() { return { isExpanded: this.isInitiallyExpanded, - availableVaps: useMainStore().order.availableVaps, + availableVaps: this.submittedOrder ? this.submittedOrder.lineItems.vaps : useMainStore().order.availableVaps, widget: { amountDue: 'AmountDueTextWidget', amountPaid: 'AmountPaidTextWidget', diff --git a/src/layouts/order-confirmation/order-confirmation.vue b/src/layouts/order-confirmation/order-confirmation.vue index 666545f5..7189fab3 100644 --- a/src/layouts/order-confirmation/order-confirmation.vue +++ b/src/layouts/order-confirmation/order-confirmation.vue @@ -53,7 +53,6 @@ :readOnly="true" recyclingModalCmsWidgetName="RecycleModal" servicePackageTitleWidgetName="ServicePackageTitle" - :selectedVaps="selectedVaps" :submittedOrder="submittedOrder" />