diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue index 8f34feb23..51546a97e 100644 --- a/src/layouts/confirmation/confirmation.vue +++ b/src/layouts/confirmation/confirmation.vue @@ -89,22 +89,46 @@ export default { // Call APIs const cmsContentPromise = fetchCmsContentForPage(to.query.fmgPage); + const wipersPromise = baseMixin.methods.dispatchStoreActionWithLogging( + storeActions.GET_WIPERS, + { + serviceZipCode: store.getters.submittedOrder.serviceLocation.zipCode, + carId: store.getters.submittedOrder.vehicle.carId, + }, + "confirmation" + ); + + const rainDefensePromise = baseMixin.methods.dispatchStoreActionWithLogging( + storeActions.GET_RAIN_DEFENSE, + null, + "confirmation" + ); + // Settle promises and get results const promiseResultMap = [ { resultKey: "cmsContent", promise: cmsContentPromise, }, + { + resultKey: "wipers", + promise: wipersPromise, + }, + { + resultKey: "rainDefense", + promise: rainDefensePromise, + }, ]; const resultMap = await settleAllPromises(promiseResultMap); + const availableVaps = [resultMap.rainDefense, ...resultMap.wipers]; const lineItemsFromSubmittedOrder = deepClone(store.getters.submittedOrder.lineItems); // Call the "next" function to complete the transition to this page. next((vm) => { vm.setCmsContent(resultMap.cmsContent); vm.lineItems = lineItemsFromSubmittedOrder; - vm.vaps = lineItemsFromSubmittedOrder.vaps; + vm.vaps = availableVaps; }); }, data() { @@ -231,7 +255,7 @@ export default { return store.getters.submittedOrder?.vehicle.imageUrl; }, damageInfo() { - return store.getters.damage; + return store.getters.submittedOrder.damage; }, isPia() { return store.getters.submittedOrder?.payment.isPia; diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index af0ec86fc..6fa1b02a6 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -123,7 +123,10 @@ export default { const wipersPromise = baseMixin.methods.dispatchStoreActionWithLogging( storeActions.GET_WIPERS, - null, + { + serviceZipCode: store.getters.order.serviceLocation.zipCode, + carId: store.getters.vehicle.carId, + }, "payment-method" ); diff --git a/src/layouts/payment/payment.vue b/src/layouts/payment/payment.vue index 0cd632dc6..b30a587dc 100644 --- a/src/layouts/payment/payment.vue +++ b/src/layouts/payment/payment.vue @@ -25,6 +25,7 @@
{ vm.setCmsContent(resultMap.cmsContent); - vm.fetchSignatureInfo(resultMap.signature); - vm.setIFrameListener(); - vm.availableVaps = taxedVaps; vm.lineItems = lineItems; + + vm.$nextTick(() => { + if (vm.$refs.cart) { + const cartItems = vm.$refs.cart.cartItems; + vm.getPiaLineItems(cartItems); + } + + vm.fetchSignatureInfo(resultMap.signature); + vm.setIFrameListener(); + }); }); }, computed: { @@ -506,27 +517,23 @@ export default { return store.getters.payment.piaType; } }, - getPiaLineItems() { - const itemMap = new Map(); + getPiaLineItems(cartItems) { const glassParts = store.getters.order.lineItems.glassParts; - const supportingItems = store.getters.order.lineItems.supportingItems; - const vaps = store.getters.order.lineItems.vaps; - const items = [...(glassParts ?? []), ...(supportingItems ?? []), ...(vaps ?? [])]; + let lineItems = []; - for (const item of items) { - const amount = item.laborAmount + item.sellingPrice; - const key = `${item.partType}|${amount}`; - - if (itemMap.has(key)) { - itemMap.get(key).quantity++; - } else { - itemMap.set(key, { partType: item.partType, amount, quantity: 1 }); - } + if (glassParts === null) { + lineItems = ["Labor|0|1", "Repair supplies|0|1"]; + } else { + lineItems = ["Parts and labor|0|1"]; } - return Array.from(itemMap.values()) - .map((item) => `${item.partType}|${item.amount}|${item.quantity}`) - .join("||"); + cartItems.forEach((item) => { + if (item.name !== null) { + lineItems.push(`${item.name}|${(item.salesTax + item.subTotal).toFixed(2)}|1`); + } + }); + + this.piaLineItems = lineItems.join("||"); }, getAmountDue() { return baseMixin.methods.getAmountDue(store.getters.order.lineItems); diff --git a/src/layouts/quote/quote.spec.js b/src/layouts/quote/quote.spec.js index a41f73595..dc30985a5 100644 --- a/src/layouts/quote/quote.spec.js +++ b/src/layouts/quote/quote.spec.js @@ -266,6 +266,13 @@ describe("quote.vue", () => { glassParts: ["item", "item2"], }, payment: {}, + serviceLocation: { + zipCode: "12345", + zipCodeCtu: "value", + }, + }, + vehicle: { + cardId: "123", }, }; const { wrapper } = setupMocks({}); @@ -304,6 +311,9 @@ describe("quote.vue", () => { state: null, }, }, + vehicle: { + cardId: "123", + }, }; const { wrapper } = setupMocks({}); wrapper.vm.$route = { query: { isInsurance: "true" } }; @@ -336,6 +346,9 @@ describe("quote.vue", () => { state: null, }, }, + vehicle: { + cardId: "123", + }, }; const { wrapper } = setupMocks({}); wrapper.vm.$route = { query: { isInsurance: "false" } }; @@ -369,6 +382,9 @@ describe("quote.vue", () => { state: null, }, }, + vehicle: { + cardId: "123", + }, }; const { wrapper } = setupMocks({}); // Ensure that query param isn't overriding selection @@ -402,6 +418,9 @@ describe("quote.vue", () => { state: null, }, }, + vehicle: { + cardId: "123", + }, }; const { wrapper } = setupMocks({}); // Ensure that query param isn't overriding selection @@ -436,6 +455,9 @@ describe("quote.vue", () => { state: null, }, }, + vehicle: { + cardId: "123", + }, }; mockTierOnePrice = 200; const { wrapper } = setupMocks({}); @@ -472,6 +494,9 @@ describe("quote.vue", () => { state: null, }, }, + vehicle: { + cardId: "123", + }, }; mockTierOnePrice = 505; const { wrapper } = setupMocks({}); @@ -507,6 +532,9 @@ describe("quote.vue", () => { state: "AZ", }, }, + vehicle: { + cardId: "123", + }, }; const { wrapper } = setupMocks({}); wrapper.vm.$route = { query: null }; diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue index 6f293c43b..1357e5acc 100644 --- a/src/layouts/quote/quote.vue +++ b/src/layouts/quote/quote.vue @@ -96,7 +96,10 @@ export default { const cmsContentPromise = fetchCmsContentForPage(to.query.fmgPage); const wipersPromise = baseMixin.methods.dispatchStoreActionWithLogging( storeActions.GET_WIPERS, - null, + { + serviceZipCode: store.getters.order.serviceLocation.zipCode, + carId: store.getters.vehicle.carId, + }, "quote" ); const rainDefensePromise = baseMixin.methods.dispatchStoreActionWithLogging( diff --git a/src/layouts/review/review-sections/service-package-review/service-package-review.vue b/src/layouts/review/review-sections/service-package-review/service-package-review.vue index 03efb6769..ac6c333ac 100644 --- a/src/layouts/review/review-sections/service-package-review/service-package-review.vue +++ b/src/layouts/review/review-sections/service-package-review/service-package-review.vue @@ -15,6 +15,7 @@ import { import { settleAllPromises } from "@/helpers/layout-helper"; import baseMixin from "@/mixins/base-mixin.js"; import { storeActions } from "@/constants/store-actions"; +import store from "@/store"; export default { name: "service-package-review", @@ -34,7 +35,10 @@ export default { loadInitialData() { const wipersPromise = baseMixin.methods.dispatchStoreActionWithLogging( storeActions.GET_WIPERS, - null, + { + serviceZipCode: store.getters.order.serviceLocation.zipCode, + carId: store.getters.vehicle.carId, + }, "review" ); const rainDefensePromise = baseMixin.methods.dispatchStoreActionWithLogging( diff --git a/src/layouts/service-location/service-location.vue b/src/layouts/service-location/service-location.vue index f8efc8c25..0a74ab21e 100644 --- a/src/layouts/service-location/service-location.vue +++ b/src/layouts/service-location/service-location.vue @@ -12,6 +12,7 @@ + @click-event="openModal"> + + 0) { return this.modelValue.state + ", " + this.modelValue.zipCode; diff --git a/src/store/index.js b/src/store/index.js index d5ae5c4d2..8ffe55058 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1304,9 +1304,10 @@ export const actions = { return response; }, - async getWipers(context, { pageNameToLog }) { - const carId = context.getters.vehicle.carId; - const serviceZipCode = context.getters.order.serviceLocation.zipCode; + async getWipers(context, { payload, pageNameToLog }) { + const carId = payload.carId; + const serviceZipCode = payload.serviceZipCode; + const response = await globalMethods .callHttpClient({ method: endpoints.GetWipers.method,