diff --git a/src/fmg-components/add-vaps-modal-buttons/add-vaps-modal-buttons.vue b/src/fmg-components/add-vaps-modal-buttons/add-vaps-modal-buttons.vue index 4240e3514..337995aba 100644 --- a/src/fmg-components/add-vaps-modal-buttons/add-vaps-modal-buttons.vue +++ b/src/fmg-components/add-vaps-modal-buttons/add-vaps-modal-buttons.vue @@ -41,18 +41,18 @@ export default { isDisplayed() { return this.showAddRainDefense || this.showAddWipers; }, - showAddRainDefense() { - // if not found in the cart - return !this.cartItems.some((vap) => { - return vap.partType === "RAIN DEFENSE"; - }); - }, - showAddWipers() { - // if not found in the cart - return !this.cartItems.some((vap) => { - return vap.partType.includes(" WIPER"); - }); - }, + // showAddRainDefense() { + // // if not found in the cart + // return !this.cartItems.some((vap) => { + // return vap.partType === "RAIN DEFENSE"; + // }); + // }, + // showAddWipers() { + // // if not found in the cart + // return !this.cartItems.some((vap) => { + // return vap.partType.includes(" WIPER"); + // }); + // }, rainDefensePrice() { // const lineItem = this.rainDefenseItem; const lineItem = this.availableLineItems.find((item) => { @@ -92,11 +92,11 @@ export default { answers.push(answer); } - if (this.showAddRainDefense) { - const answer = getAnswer("RainDefenseModal", this.answersCmsData); - answer.SubText = "+$" + this.rainDefensePrice; - answers.push(answer); - } + // if (this.showAddRainDefense) { + // const answer = getAnswer("RainDefenseModal", this.answersCmsData); + // answer.SubText = "+$" + this.rainDefensePrice; + // answers.push(answer); + // } return answers; }, diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue index f974c0d65..91e09af93 100644 --- a/src/fmg-components/cart/cart.vue +++ b/src/fmg-components/cart/cart.vue @@ -17,7 +17,7 @@ }}
{{ lineItem.name }} @@ -71,7 +71,7 @@ import { } from "@/helpers/service-package-helper"; import textLink from "@/ux-components/text-link/text-link"; import textBlock from "@/digital-components/text-block/text-block"; -import { deepClone } from "@/helpers/object-helper"; +import { LineItemUtilities } from "@/store"; export default { name: "modal", @@ -90,6 +90,7 @@ export default { style: "currency", currency: "USD", }), + lineItemUtilities: new LineItemUtilities(), }; }, methods: { @@ -170,46 +171,116 @@ export default { return packagePrice; }, - // cartItems: { - // get: function () { - // return this.answersToDisplay; - // }, - // set: function (newValue) { - - // }, - // }, - displayedPackageLineItems() { - const displayedPackageLineItems = []; - const packageLineItems = this.getVapsLineItemsForSelectedPackage(this.packageLevel); - - // TODO Determine if we could get the same list from this.lineItems? - packageLineItems?.forEach((item) => { - let price = item.sellingPrice + item.kitPrice + item.laborAmount; - const packageLineItem = { - name: item.partType, - price: "$" + parseFloat(price).toFixed(2), - partType: item.partType, - isRemovable: item.isRemovable, + allLineItems() { + return this.lineItemUtilities.getArrayOfAllLineItems(this.lineItems); + }, + flattenedLineItems() { + return this.lineItemUtilities.getFlattenedArrayOfLineItemsWithChildParts(this.allLineItems); + }, + frontWipersCartItem() { + let cartItem = null; + let frontWipers = this.vaps.filter(vapsLineItem => vapsLineItem.partType == "FRONT WIPER"); + if (frontWipers.length > 0) { + cartItem = { + name: "Front Wipers", // TODO: Get from CMS + partNumber: "Multiple", + partType: "Multiple", // TODO: Get from CMS + laborAmount: 0, + sellingPrice: 0, + kitPrice: 0, + salesTax: 0, }; - displayedPackageLineItems.push(packageLineItem); - }); - return displayedPackageLineItems; + frontWipers.forEach((lineItem) => { + cartItem.kitPrice += lineItem.kitPrice ?? 0; + cartItem.laborAmount += lineItem.laborAmount ?? 0; + cartItem.sellingPrice += lineItem.sellingPrice ?? 0; + cartItem.salesTax += lineItem.salesTax ?? 0; + }); + } + + return cartItem; + }, + rearWipersCartItem() { + let cartItem = null; + + let rearWipers = this.vaps.filter(vapsLineItem => vapsLineItem.partType == "REAR WIPER"); + if (rearWipers.length > 0) { + cartItem = { + name: "Rear Wipers", // TODO: Get from CMS + partNumber: "Multiple", + partType: "Multiple", // TODO: Get from CMS + laborAmount: 0, + sellingPrice: 0, + kitPrice: 0, + salesTax: 0, + }; + + rearWipers.forEach((lineItem) => { + cartItem.kitPrice += lineItem.kitPrice ?? 0; + cartItem.laborAmount += lineItem.laborAmount ?? 0; + cartItem.sellingPrice += lineItem.sellingPrice ?? 0; + cartItem.salesTax += lineItem.salesTax ?? 0; + }); + } + + return cartItem; + }, + cartItems: { + get: function () { + const cartItems = []; + + if (this.frontWipersCartItem) { + cartItems.push(this.frontWipersCartItem); + } + + if (this.rearWipersCartItem) { + cartItems.push(this.rearWipersCartItem); + } + + const otherVapsLineItems = this.vaps.filter(vapsLineItem => vapsLineItem.partType != "FRONT WIPER" && vapsLineItem.partType != "REAR WIPER"); + otherVapsLineItems.forEach((lineItem) => { + const cartItem = lineItem; + cartItems.push(cartItem); + }); + console.log(this.lineItems) + console.log(this.lineItems.glassParts) + const glassPartsLineItems = this.lineItemUtilities.getFlattenedArrayOfLineItemsWithChildParts(this.lineItems.glassParts); + console.log(this.glassPartsLineItems) + glassPartsLineItems.forEach((lineItem) => { + const cartItem = lineItem; + cartItems.push(cartItem); + }); + + console.log(cartItems) + return cartItems; + }, + set: function (newValue) { + + }, + }, + packageLineItems() { + const packageLineItems = []; + return packageLineItems; }, displayedNonPackageLineItems() { const displayedNonPackageLineItems = []; const possibleLineItems = [...this.vaps, ...this.supportingItems]; possibleLineItems?.forEach((item) => { let price = item.sellingPrice + item.kitPrice + item.laborAmount; + const isAllowed = this.allowableLineItems?.findIndex((lineItem) => { return lineItem.partType === item.partType; }); + const indexFound = this.displayedPackageLineItems?.findIndex((packageLineItem) => { return packageLineItem.partType === item.partType; }); + const isInPackage = this.displayedPackageLineItems?.findIndex((packageLineItem) => { return packageLineItem.partType === item.partType; }); + if (isInPackage === -1 && isAllowed > -1) { const nonPackageLineItem = { name: item.partType, @@ -217,9 +288,11 @@ export default { partType: item.partType, isRemovable: item.isRemovable, }; + displayedNonPackageLineItems.push(nonPackageLineItem); } }); + return displayedNonPackageLineItems; }, glassToReplace() { @@ -233,7 +306,7 @@ export default { return; } return this.damage.isRepair; - }, + }, vaps() { const vaps = this.lineItems?.vaps; return vaps?.length > 0 ? vaps : []; @@ -263,7 +336,7 @@ export default { subTotal() { let subTotal = 0; - this.lineItems.forEach((lineItem) => { + this.cartItems.forEach((lineItem) => { subTotal += (lineItem.kitPrice ?? 0) + (lineItem.laborAmount ?? 0) + @@ -274,8 +347,8 @@ export default { }, salesTax() { let salesTax = 0; - this.lineItems.forEach((lineItem) => { - salesTax += lineItem.salesTax; + this.cartItems.forEach((lineItem) => { + salesTax += lineItem.salesTax ?? 0; }); return salesTax; diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index 2002f2e10..2bc00ba76 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -144,12 +144,12 @@ export default { const availableLineItems = [ resultMap.rainDefense, - ...resultMap.supportingItems, - ...resultMap.wipers, - ...glassParts, + ... resultMap.supportingItems, + ... resultMap.wipers, + ... glassParts, ]; - const pricedAvailableLineItems = await baseMixin.methods.dispatchStoreActionWithLogging( + const pricingResults = await baseMixin.methods.dispatchStoreActionWithLogging( storeActions.PRICE_ORDER_ITEMS_AND_SAVE_SERVER_DATA, { availableLineItems: availableLineItems, @@ -158,11 +158,7 @@ export default { false ); - const lineItems = store.getters.order.lineItems; - - const combinedLineItems = [...glassParts, ...lineItems.supportingItems, ...lineItems.vaps]; - - const taxedLineItems = await baseMixin.methods.dispatchStoreActionWithLogging( + const taxingResults = await baseMixin.methods.dispatchStoreActionWithLogging( storeActions.TAX_ORDER_ITEMS_AND_SAVE_SERVER_DATA, { billToAccountNumber: "87291", @@ -170,26 +166,21 @@ export default { appointmentType: store.getters.order.serviceLocation.appointmentType, serviceLocationState: store.getters.order.serviceLocation.state, serviceLocationZipCode: store.getters.order.serviceLocation.zipCode, - pricedLineItems: combinedLineItems, + pricedAvailableLineItems: pricingResults, }, "payment-method", false ); - const cartItems = [...glassParts, ...lineItems.supportingItems, ...lineItems.vaps]; // TOBEREMOVED BY AJC IN CSR-1384 - // Call the "next" function to complete the transition to this page. next((vm) => { - vm.cartItems = cartItems; // TOBEREMOVED BY AJC IN CSR-1384 - vm.setCmsContent(resultMap.cmsContent); - vm.availableLineItems = pricedAvailableLineItems; - vm.lineItems = taxedLineItems; + vm.availableLineItems = taxingResults; + vm.lineItems = store.getters.order.lineItems; }); }, data() { return { - cartItems: [], // TOBEREMOVED BY AJC IN CSR-1384 lineItems: [], availableLineItems: [], paymentMethodInternalModel: this.getPaymentMethodFromStore(), diff --git a/src/store/index.js b/src/store/index.js index 852bb1570..c0a8e2685 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -2155,9 +2155,9 @@ export const actions = { context.commit(storeMutations.UPDATE_LINE_ITEMS_SERVER_DATA, response.data.serverData); - const pricedLineItems = addPricesToLineItems(availableLineItems, response.data.lineItems); + availableLineItems = addPricesToLineItems(availableLineItems, response.data.lineItems); - return pricedLineItems; + return availableLineItems; }, // Tax order actions @@ -2170,14 +2170,15 @@ export const actions = { appointmentType, serviceLocationState, serviceLocationZipCode, - pricedLineItems, + pricedAvailableLineItems, }, pageNameToLog, } ) { // const flattenedLineItemsWithChildParts = // getFlattenedArrayOfLineItemsWithChildParts(pricedLineItems); - const lineItemsWithOnlyPriceInfo = pricedLineItems.map((lineItem) => ({ + + const lineItemsWithOnlyPriceInfo = pricedAvailableLineItems.map((lineItem) => ({ partNumber: lineItem.partNumber, laborAmount: lineItem.laborAmount ?? 0, kitPrice: lineItem.kitPrice ?? 0, @@ -2211,14 +2212,22 @@ export const actions = { pageNameToLog: pageNameToLog, }); - context.commit(storeMutations.UPDATE_LINE_ITEMS_SERVER_DATA, response.data.serverData); + //context.commit(storeMutations.UPDATE_LINE_ITEMS_SERVER_DATA, response.data.serverData); - const taxedLineItems = addTaxesToPricedLineItems( - pricedLineItems, + // pricedLineItems.forEach((pricedLineItem) => { + // for (const [key, value] of Object.entries(storeLineItems)) { + // storeLineItems[key] = pricedLineItem; + // } + // }); + + // console.log(pricedLineItems) + + pricedAvailableLineItems = addTaxesToPricedLineItems( + pricedAvailableLineItems, response.data.taxedLineItems ); - return taxedLineItems; + return pricedAvailableLineItems; }, async validateOrderPromoAndSaveServerData( @@ -2516,8 +2525,7 @@ function convertGlassPieceNamingFromApi(glassArray) { } function addPricesToLineItems(lineItems, pricingLineItems) { - const pricedLineItems = deepClone(lineItems); - pricedLineItems.forEach((lineItem) => { + lineItems.forEach((lineItem) => { let lineItemIndex = pricingLineItems.findIndex( (pricingLineItem) => pricingLineItem.partNumber === lineItem.partNumber ); @@ -2533,37 +2541,48 @@ function addPricesToLineItems(lineItems, pricingLineItems) { lineItem.salesTax = pricedLineItem.salesTax; }); - return pricedLineItems; + return lineItems; } -function addTaxesToPricedLineItems(lineItems, taxingLineItems) { - const taxedLineItems = deepClone(lineItems); - taxedLineItems.forEach((lineItem) => { +function addTaxesToPricedLineItems(pricedLineItems, taxingLineItems = []) { + pricedLineItems.forEach((pricedLineItem) => { let lineItemIndex = taxingLineItems.findIndex( - (taxingLineItem) => taxingLineItem.partNumber === lineItem.partNumber + (taxingLineItem) => taxingLineItem.partNumber === pricedLineItem.partNumber ); - if (lineItem.childParts) { - addTaxesToPricedLineItems(lineItem.childParts, taxingLineItems); + if (pricedLineItem.childParts) { + addTaxesToPricedLineItems(pricedLineItem.childParts, taxingLineItems); } let taxedLineItem = taxingLineItems.splice(lineItemIndex, 1)[0]; - lineItem.salesTax = taxedLineItem.salesTax; + pricedLineItem.salesTax = taxedLineItem?.salesTax ?? 0; }); - return taxedLineItems; + return pricedLineItems; +} + +export class LineItemUtilities { + constructor() { + this.getArrayOfAllLineItems = getArrayOfAllLineItems; + this.getFlattenedArrayOfLineItemsWithChildParts = getFlattenedArrayOfLineItemsWithChildParts; + } } function getArrayOfAllLineItems(lineItems) { let consolidatedLineItemsArray = []; + if (lineItems.glassParts != null) - consolidatedLineItemsArray = [...consolidatedLineItemsArray, ...lineItems.glassParts]; + consolidatedLineItemsArray = [... consolidatedLineItemsArray, ... lineItems.glassParts]; + if (lineItems.supportingItems != null) - consolidatedLineItemsArray = [...consolidatedLineItemsArray, ...lineItems.supportingItems]; + consolidatedLineItemsArray = [... consolidatedLineItemsArray, ... lineItems.supportingItems]; + if (lineItems.vaps != null) - consolidatedLineItemsArray = [...consolidatedLineItemsArray, ...lineItems.vaps]; + consolidatedLineItemsArray = [... consolidatedLineItemsArray, ... lineItems.vaps]; + if (lineItems.promos != null) - consolidatedLineItemsArray = [...consolidatedLineItemsArray, ...lineItems.promos]; + consolidatedLineItemsArray = [... consolidatedLineItemsArray, ... lineItems.promos]; + return consolidatedLineItemsArray; } @@ -2578,6 +2597,7 @@ function getFlattenedArrayOfLineItemsWithChildParts(lineItems) { ]; } }); + console.log(flattenedArray) return flattenedArray; }