diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue index 3b8e931d2..26fa7866a 100644 --- a/src/fmg-components/cart/cart.vue +++ b/src/fmg-components/cart/cart.vue @@ -82,7 +82,7 @@ import { LineItemUtilities } from "@/store"; import { deepClone } from "@/helpers/object-helper"; export default { - name: "modal", + name: "cart", props: { modelValue: Object, damage: Object, @@ -117,9 +117,8 @@ export default { }, removeItem(cartItem) { cartItem.lineItemIds.forEach((lineItemIdToDelete) => { - console.log(lineItemIdToDelete); this.lineItems[cartItem.category] = this.lineItems[cartItem.category].filter( - (lineItem) => lineItem.id != lineItemIdToDelete + (lineItem) => lineItem.partType != cartItem.cartItemType ); }); @@ -258,10 +257,6 @@ export default { nonpackageCartItems.push(this.rainDefenseCartItem); } - // if (this.packageLevel == "TierOne" && this.rainDefenseCartItem) { - // return this.cartItems.filter((cartItem) => cartItem.cartItemType == "RAIN DEFENSE"); - // } - return nonpackageCartItems; }, frontWipersCartItem() { @@ -274,7 +269,7 @@ export default { if (frontWiperLineItems.length > 0) { cartItem = { name: this.getCmsContentForVapsType("FRONT WIPER"), //"Front Wipers", // TODO: Get from CMS - category: "vaps", + category: "vaps-front-wiper", cartItemType: "FRONT WIPER", subTotal: 0, salesTax: 0, @@ -305,7 +300,7 @@ export default { if (rearWiperLineItems.length > 0) { cartItem = { name: this.getCmsContentForVapsType("REAR WIPER"), // TODO: Get from CMS - category: "vaps", + category: "vaps-rear-wiper", cartItemType: "REAR WIPER", subTotal: 0, salesTax: 0, @@ -499,9 +494,6 @@ export default { salesTaxText() { return this.getCmsContent("SalesTaxTextWidget", "Text"); }, - recycleFee() { - return "$35.00"; - }, amountDueText() { return this.getCmsContent("AmountDueTextWidget", "Text"); }, @@ -529,14 +521,6 @@ export default { return this.subTotal + this.salesTax; }, }, - watch: { - modelValue: { - handler(newValue) { - console.log(newValue); - this.lineItems = deepClone(newValue); - }, - }, - }, components: { textBlock, textLink, diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index ca8b39d32..3e69a25d7 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -27,7 +27,7 @@ @@ -42,7 +42,7 @@ @@ -90,7 +90,8 @@ import { defineRule } from "vee-validate"; import { required } from "@/helpers/validation-rules"; import { errorMessages } from "@/constants/error-messages"; import { AppointmentTypeStrings } from "@/constants/schedule-constants"; -import { deepClone } from "@/helpers/object-helper"; +import { LineItemUtilities, mapTaxedAvailableLineItemsToStoreFormat } from "../../store"; + defineRule("option-required", required(errorMessages.OPTION_REQUIRED)); @@ -141,7 +142,7 @@ export default { const glassParts = store.getters.order.lineItems.glassParts ?? []; - const availableLineItems = [ + let availableLineItems = [ resultMap.rainDefense, ...resultMap.supportingItems, ...resultMap.wipers, @@ -159,7 +160,7 @@ export default { false ); - const taxingResults = await baseMixin.methods.dispatchStoreActionWithLogging( + const taxedAvailableLineItems = await baseMixin.methods.dispatchStoreActionWithLogging( storeActions.TAX_ORDER_ITEMS_AND_SAVE_SERVER_DATA, { billToAccountNumber: "87291", @@ -173,26 +174,27 @@ export default { false ); + const lineItemUtilities = new LineItemUtilities(); + lineItemUtilities.addGuidToLineItemsIfNotAlreadyThere(availableLineItems); + + const cartLineItems = mapTaxedAvailableLineItemsToStoreFormat(availableLineItems, lineItems); + // Call the "next" function to complete the transition to this page. next((vm) => { vm.setCmsContent(resultMap.cmsContent); - vm.availableLineItems = taxingResults; - console.log(lineItems); - vm.lineItems = deepClone(lineItems); + vm.availableLineItems = taxedAvailableLineItems; + vm.cartLineItems = cartLineItems; }); }, data() { return { - lineItems: [], + cartLineItems: [], availableLineItems: [], paymentMethodInternalModel: this.getPaymentMethodFromStore(), displayPiaAlert: this.getPiaAlert(), }; }, methods: { - getLineItemsFromStore() { - return store.getters.order.lineItems; - }, arePagePrerequisitesValid() { // Line Items const packageReqs = !!store.getters.order.lineItems.supportingItems; @@ -358,10 +360,6 @@ export default { customCtaCopy(newValue) { this.$refs.navbar.updateButtonText(newValue); }, - // modelValue(newValue) { - // this.lineItems = newValue; - // console.log(newValue) - // } }, components: { funnelHeader, diff --git a/src/store/index.js b/src/store/index.js index 013d1cdbd..1f03566c2 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1298,6 +1298,7 @@ export const actions = { }); syncLineItemIds(response.data, context.getters.order.lineItems.vaps); + console.log(response.data) return response; }, @@ -2566,9 +2567,30 @@ export class LineItemUtilities { this.getArrayOfAllLineItems = getArrayOfAllLineItems; this.getFlattenedArrayOfLineItemsWithChildParts = getFlattenedArrayOfLineItemsWithChildParts; + this.addGuidToLineItemsIfNotAlreadyThere = addGuidToLineItemsIfNotAlreadyThere; } } +export function mapTaxedAvailableLineItemsToStoreFormat(availableLineItems, storeLineItems) +{ + // clone the lineItems array because what we're passing in is referencing the store directly + const lineItems = deepClone(storeLineItems); + + for (let [category, lineItemsInCategory] of Object.entries(lineItems)) { + lineItemsInCategory = lineItemsInCategory ?? []; + + for (let lineItemIndex = 0; lineItemIndex < lineItemsInCategory.length; lineItemIndex++) { + + const availableLineItem = availableLineItems.find(ali => ali.partNumber == lineItemsInCategory[lineItemIndex].partNumber); + if (availableLineItem) { + lineItemsInCategory[lineItemIndex].salesTax = availableLineItem.salesTax; + } + } + } + + return lineItems; +} + function getArrayOfAllLineItems(lineItems) { let consolidatedLineItemsArray = []; @@ -2641,11 +2663,14 @@ function addGuidToLineItemsIfNotAlreadyThere(lineItems) { } function syncLineItemIds(lineItemsWithoutIds, lineItemsWithIds) { + if (!lineItemsWithIds || !lineItemsWithoutIds) { return; } lineItemsWithoutIds.forEach((noId) => { + debugger; // eslint-disable-line no-debugger lineItemsWithIds.forEach((withId) => { + debugger; // eslint-disable-line no-debugger if (noId.partNumber === withId.partNumber && noId.partType === withId.partType) { noId.id = withId.id; }