import store from "@/store"; import { storeActions } from "@/constants/store-actions"; import baseMixin from "@/mixins/base-mixin.js"; import { deepClone } from "@/helpers/object-helper"; 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 (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 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; }