Merge branch 'develop' into feature/CSR-1809

This commit is contained in:
CarlNation 2023-11-20 14:47:05 -05:00
commit ac20a48504
9 changed files with 110 additions and 31 deletions

View file

@ -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;

View file

@ -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"
);

View file

@ -25,6 +25,7 @@
<hr />
<cart
ref="cart"
:damage="damageInfo"
:availableVaps="availableVaps"
:allowItemRemoval="false"
@ -227,7 +228,7 @@ export default {
invoiceNumber: this.getInvoiceNumber(),
totalAmount: this.getAmountDue(),
displayAmount: this.getDisplayAmountDue(),
piaLineItems: this.getPiaLineItems(),
piaLineItems: "",
paypalPayment: this.isPaypal(),
lineItems: [],
availableVaps: [],
@ -257,7 +258,10 @@ export default {
const wipersPromise = baseMixin.methods.dispatchStoreActionWithLogging(
storeActions.GET_WIPERS,
null,
{
serviceZipCode: store.getters.order.serviceLocation.zipCode,
carId: store.getters.vehicle.carId,
},
"payment"
);
@ -357,11 +361,18 @@ export default {
// Call the "next" function to complete the transition to this page.
next(async (vm) => {
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);

View file

@ -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 };

View file

@ -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(

View file

@ -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(

View file

@ -12,6 +12,7 @@
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" class="mt-5" />
<serviceZipModalQuestion
editScreenReaderTextCmsWidgetName="ScreenReaderZipEditWidget"
v-model="serviceZipCodeQuestion"
ref="serviceZipCodeQuestion"
:mobileFeePart="mobileFeePart"

View file

@ -6,7 +6,11 @@
linkType="text"
:text="serviceZipLinkText"
href="#!"
@click-event="openModal" />
@click-event="openModal">
<template v-slot:after-text v-if="editScreenReaderTextCmsWidgetName">
<span class="sr-only"> {{ screenReaderOnlyText }} </span>
</template>
</textLink>
</div>
</div>
<modal
@ -68,8 +72,12 @@ export default {
},
linkWidgetName: String,
modalWidgetName: String,
editScreenReaderTextCmsWidgetName: String,
},
computed: {
screenReaderOnlyText() {
return this.getCmsContent(this.editScreenReaderTextCmsWidgetName, "Text");
},
serviceZipLinkText() {
if (this.modelValue.zipCode && this.modelValue.zipCode.length > 0) {
return this.modelValue.state + ", " + this.modelValue.zipCode;

View file

@ -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,