diff --git a/src/helpers/price-calculator.js b/src/helpers/price-calculator.js index de4cb7e9..66e2cdd8 100644 --- a/src/helpers/price-calculator.js +++ b/src/helpers/price-calculator.js @@ -12,6 +12,15 @@ export function getPriceOfLineItem(lineItem) { return price; } +export function getSalesTaxOfLineItem(lineItem) { + let price = lineItem.salesTax ?? 0; + if (lineItem.childParts && lineItem.childParts.length !== 0) { + // eslint-disable-next-line no-use-before-define + price += getTaxOfLineItems(lineItem.childParts); + } + return price; +} + /** * Returns the price for the given array of line items. Will include sales tax if includeTax is true * @param {Array} lineItems array of line items to be priced @@ -27,5 +36,5 @@ export function getPriceOfLineItems(lineItems) { * @returns {number} sales tax of the line items */ export function getTaxOfLineItems(lineItems) { - return lineItems?.reduce((accumulator, lineItem) => accumulator + (lineItem.salesTax ?? 0), 0) ?? 0; + return lineItems?.reduce((accumulator, lineItem) => accumulator + getSalesTaxOfLineItem(lineItem), 0) ?? 0; } diff --git a/src/helpers/price-calculator.spec.js b/src/helpers/price-calculator.spec.js index 0150ef96..23e843d1 100644 --- a/src/helpers/price-calculator.spec.js +++ b/src/helpers/price-calculator.spec.js @@ -210,5 +210,42 @@ describe('price-calculator', () => { // Assert expect(result).toBe(expected); }); + + test('Returns expected with child line items', () => { + // Arrange + const lineItems = [ + { + kitPrice: 1, + laborAmount: 2, + sellingPrice: 3, + salesTax: 4, + childParts: [ + { + kitPrice: 10, + laborAmount: 20, + sellingPrice: 30, + salesTax: 40 + } + ] + }, + { + kitPrice: 1, + salesTax: 2 + }, + { + kitPrice: 10, + laborAmount: 100, + sellingPrice: 1000, + salesTax: 50 + } + ]; + const expected = 96; + + // Act + const result = getTaxOfLineItems(lineItems); + + // Assert + expect(result).toBe(expected); + }); }); }); diff --git a/src/store/index.js b/src/store/index.js index 3ba9011f..79eea573 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1286,6 +1286,7 @@ export const useMainStore = defineStore({ const payloadGlassParts = setClearOnSubmit(lineItems.glassParts, shouldClearOnSubmit); const payloadSupportingItems = setClearOnSubmit(lineItems.supportingItems, shouldClearOnSubmit); const payloadVapsItems = setClearOnSubmit(lineItems.vaps, shouldClearOnSubmit); + const payloadFeeItems = setClearOnSubmit(lineItems.feeItems, shouldClearOnSubmit); const payload = { applicationUser: { @@ -1352,7 +1353,7 @@ export const useMainStore = defineStore({ lineItems: { glassParts: payloadGlassParts, serverData: lineItems.serverData, - supportingItems: payloadSupportingItems, + supportingItems: [...payloadSupportingItems, ...payloadFeeItems], vaps: payloadVapsItems }, insuranceCoverage: {