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