Merge pull request #791 from Safelite/defect/digital/SSR-1412

SSR-1412 Fix pricing issues
This commit is contained in:
Josh Dassinger 2024-07-16 08:39:49 -05:00 committed by GitHub
commit cae761de2d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 49 additions and 2 deletions

View file

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

View file

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

View file

@ -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: {