DigitalConsumer.FixMyGlass/src/helpers/pricing-helper.js
Chris Redelinghuys 9c2968b4f1 CASH-2592: Add Dual Recal to MSR
Co-authored-by: Copilot <copilot@github.com>
2026-04-27 10:00:48 -04:00

144 lines
4.6 KiB
JavaScript

import store from "@/store";
import { storeActions } from "@/constants/store-actions";
import baseMixin from "@/mixins/base-mixin.js";
import { deepClone } from "@/helpers/object-helper";
import { partNumberStrings } from "@/constants/part-number-strings";
export function getDisplayAmountDue(lineItemsObject, includeTax = true) {
return getAmountDue(lineItemsObject, includeTax).toLocaleString("en-US", {
style: "currency",
currency: "USD",
});
}
export function getAmountDue(lineItemsObject, includeTax = true) {
let amountDue = 0;
const order = baseMixin?.methods?.hasSubmittedOrder()
? baseMixin?.methods?.getSubmittedOrder()
: store.getters.order;
if (lineItemsObject?.glassParts) {
amountDue += baseMixin.methods.getTotalPriceOfAllLineItemsAndChildParts(
lineItemsObject.glassParts,
includeTax
);
}
if (lineItemsObject?.supportingItems) {
amountDue += baseMixin?.methods?.getTotalPriceOfAllLineItemsAndChildParts(
lineItemsObject.supportingItems,
includeTax
);
}
if (store.getters.coverageIsVerified && !order.policy.isNoComp && !order.policy.isItac) {
amountDue = order.policy.currentDeductible;
if (order.isMSRFeeApplicable && !order.isMSRFeeCoveredByInsurance) {
amountDue += getMSRFeePartPrice(lineItemsObject?.supportingItems, includeTax);
}
}
if (lineItemsObject?.vaps) {
amountDue += baseMixin?.methods?.getTotalPriceOfAllLineItemsAndChildParts(
lineItemsObject.vaps,
includeTax
);
}
if (lineItemsObject?.promos) {
amountDue += baseMixin?.methods?.getTotalPriceOfAllLineItemsAndChildParts(
lineItemsObject.promos,
includeTax
);
}
return ((amountDue * 100) / 100).toFixed(2);
}
export function getSubTotal(lineItemsObject) {
// this is amountDue without sales tax
return getAmountDue(lineItemsObject, false);
}
export function getSalesTax(lineItemsObject) {
// this is amountDue minus subTotal
return (((getAmountDue(lineItemsObject) - getSubTotal(lineItemsObject)) * 100) / 100).toFixed(
2
);
}
export function getAmountDueWithDonation(lineItemsObject, donationLineItem) {
// this is amount due with Donation added
const lineItemsCloneWithDonation = deepClone(lineItemsObject);
lineItemsCloneWithDonation.supportingItems.push(donationLineItem);
return getAmountDue(lineItemsCloneWithDonation);
}
export async function getPricingByDayPartWithPrice(pageNameToLog) {
// Get the Pricing By Day Part
const basePriceByDayPart = await baseMixin.methods.dispatchStoreActionWithLogging(
storeActions.GET_PRICING_BY_DAY_PART,
null,
pageNameToLog,
false
);
if (
basePriceByDayPart?.data === null ||
basePriceByDayPart?.data === undefined ||
basePriceByDayPart?.data === ""
) {
return null;
}
// Get the Pricing By Day Base Part price
const pricingResults = await baseMixin.methods.dispatchStoreActionWithLogging(
storeActions.PRICE_ORDER_ITEMS_AND_SAVE_SERVER_DATA,
{
availableLineItems: [basePriceByDayPart?.data],
},
pageNameToLog,
false
);
return pricingResults[0];
}
export function getMSRFeePartPrice(supportingItems, includeTax) {
let msrFeePrice = 0;
const msrFeeLineItem = supportingItems?.find(
(lineItem) =>
lineItem.partNumber === partNumberStrings.MOBILE_STATIC_RECAL_FEE ||
lineItem.partNumber === partNumberStrings.MOBILE_DUAL_RECAL_FEE
);
if (msrFeeLineItem) {
msrFeePrice = baseMixin?.methods?.getTotalPriceOfAllLineItemsAndChildParts(
[msrFeeLineItem],
includeTax
);
}
return msrFeePrice;
}
export function addPricesToLineItems(lineItems, pricingLineItems) {
lineItems.forEach((lineItem) => {
const lineItemIndex = pricingLineItems.findIndex(
(pricingLineItem) => pricingLineItem.partNumber === lineItem.partNumber
);
if (lineItem.childParts) {
addPricesToLineItems(lineItem.childParts, pricingLineItems);
}
if (lineItemIndex !== -1) {
const pricedLineItem = pricingLineItems.splice(lineItemIndex, 1)[0];
lineItem.laborAmount = pricedLineItem.laborAmount;
lineItem.sellingPrice = pricedLineItem.sellingPrice;
lineItem.kitPrice = pricedLineItem.kitPrice;
lineItem.salesTax = pricedLineItem.salesTax;
}
});
return lineItems;
}