Merge pull request #839 from Safelite/feature/brydon/SSR-1481
Removing stuff
This commit is contained in:
commit
4ae48d524f
4 changed files with 17 additions and 157 deletions
|
|
@ -6,14 +6,3 @@ export function getLineItemsFlattened(lineItems) {
|
||||||
export function findLineItemIndex(lineItems, partNumber, startIndex = 0) {
|
export function findLineItemIndex(lineItems, partNumber, startIndex = 0) {
|
||||||
return lineItems.findIndex((li, index) => index >= startIndex && li.partNumber === partNumber);
|
return lineItems.findIndex((li, index) => index >= startIndex && li.partNumber === partNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
// replaces partNumber, which is initially NAGS format, with the safelite part number
|
|
||||||
export function mapSafelitePartNumberToPartNumberIfExists(lineItems) {
|
|
||||||
return lineItems?.map(({ childParts, ...rest }) => ({
|
|
||||||
...rest,
|
|
||||||
partNumber: rest.safelitePartNumber || rest.partNumber,
|
|
||||||
childParts: childParts?.map((part) => ({
|
|
||||||
partNumber: part.safelitePartNumber || part.partNumber
|
|
||||||
})) ?? []
|
|
||||||
})) ?? [];
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,132 +1,6 @@
|
||||||
import { getLineItemsFlattened, mapSafelitePartNumberToPartNumberIfExists } from '@/helpers/line-items-helper';
|
import { getLineItemsFlattened } from '@/helpers/line-items-helper';
|
||||||
|
|
||||||
describe('getLineItemsFlattened', () => {
|
describe('getLineItemsFlattened', () => {
|
||||||
describe('mapSafelitePartNumberToPartNumberIfExists', () => {
|
|
||||||
test.each([null, undefined, []])('returns empty list when %p passed', (lineItems) => {
|
|
||||||
// Arrange
|
|
||||||
const expected = [];
|
|
||||||
|
|
||||||
// Act
|
|
||||||
const result = mapSafelitePartNumberToPartNumberIfExists(lineItems);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(result).toMatchObject(expected);
|
|
||||||
});
|
|
||||||
test('assigns partNumber to null when safelitePartNumber DNE', () => {
|
|
||||||
// Arrange
|
|
||||||
const lineItems = [
|
|
||||||
{
|
|
||||||
apple: 'a',
|
|
||||||
partNumber: 111
|
|
||||||
}
|
|
||||||
];
|
|
||||||
const expected = [
|
|
||||||
{
|
|
||||||
apple: 'a',
|
|
||||||
partNumber: undefined,
|
|
||||||
childParts: []
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
// Act
|
|
||||||
const result = mapSafelitePartNumberToPartNumberIfExists(lineItems);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(result).toMatchObject(expected);
|
|
||||||
});
|
|
||||||
test('assigns partNumber as expected when multiple line items passed', () => {
|
|
||||||
// Arrange
|
|
||||||
const lineItems = [
|
|
||||||
{
|
|
||||||
apple: 'a',
|
|
||||||
banana: 'b',
|
|
||||||
partNumber: 111,
|
|
||||||
safelitePartNumber: 222,
|
|
||||||
childParts: [
|
|
||||||
{
|
|
||||||
partNumber: 333,
|
|
||||||
safelitePartNumber: 444
|
|
||||||
},
|
|
||||||
{
|
|
||||||
partNumber: 555,
|
|
||||||
safelitePartNumber: 666
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
apple: 'apple',
|
|
||||||
banana: 'banana',
|
|
||||||
partNumber: 123,
|
|
||||||
safelitePartNumber: 321
|
|
||||||
}
|
|
||||||
];
|
|
||||||
const expected = [
|
|
||||||
{
|
|
||||||
apple: 'a',
|
|
||||||
banana: 'b',
|
|
||||||
partNumber: 222,
|
|
||||||
childParts: [
|
|
||||||
{
|
|
||||||
partNumber: 444
|
|
||||||
},
|
|
||||||
{
|
|
||||||
partNumber: 666
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
apple: 'apple',
|
|
||||||
banana: 'banana',
|
|
||||||
partNumber: 321,
|
|
||||||
childParts: []
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
// Act
|
|
||||||
const result = mapSafelitePartNumberToPartNumberIfExists(lineItems);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(result).toMatchObject(expected);
|
|
||||||
});
|
|
||||||
test.only('returns partNumber when no safelitePartNumber', () => {
|
|
||||||
// Arrange
|
|
||||||
const lineItems = [
|
|
||||||
{
|
|
||||||
apple: 'a',
|
|
||||||
partNumber: 111,
|
|
||||||
childParts: [
|
|
||||||
{
|
|
||||||
partNumber: 333
|
|
||||||
},
|
|
||||||
{
|
|
||||||
partNumber: 555,
|
|
||||||
safelitePartNumber: 666
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
];
|
|
||||||
const expected = [
|
|
||||||
{
|
|
||||||
apple: 'a',
|
|
||||||
partNumber: 111,
|
|
||||||
childParts: [
|
|
||||||
{
|
|
||||||
partNumber: 333
|
|
||||||
},
|
|
||||||
{
|
|
||||||
partNumber: 666
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
// Act
|
|
||||||
const result = mapSafelitePartNumberToPartNumberIfExists(lineItems);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(result).toMatchObject(expected);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
describe('getLineItemsFlattened', () => {
|
describe('getLineItemsFlattened', () => {
|
||||||
it('Returns empty array when null is passed', () => {
|
it('Returns empty array when null is passed', () => {
|
||||||
// Arrange
|
// Arrange
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,6 @@ export default {
|
||||||
if (singlePart) {
|
if (singlePart) {
|
||||||
reducedGlassParts.push({
|
reducedGlassParts.push({
|
||||||
partNumber: singlePart.partNumber,
|
partNumber: singlePart.partNumber,
|
||||||
safelitePartNumber: singlePart.safelitePartNumber,
|
|
||||||
description: singlePart.description,
|
description: singlePart.description,
|
||||||
color: singlePart.color,
|
color: singlePart.color,
|
||||||
partType: singlePart.partType,
|
partType: singlePart.partType,
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ import partTypeStrings from '@/constants/part-type-strings';
|
||||||
import bailoutMessage from '@/constants/bailoutMessage';
|
import bailoutMessage from '@/constants/bailoutMessage';
|
||||||
import bailoutCode from '@/constants/bailoutCode';
|
import bailoutCode from '@/constants/bailoutCode';
|
||||||
import partNumberStrings from '@/constants/part-number-strings';
|
import partNumberStrings from '@/constants/part-number-strings';
|
||||||
import { findLineItemIndex, getLineItemsFlattened, mapSafelitePartNumberToPartNumberIfExists } from '@/helpers/line-items-helper';
|
import { findLineItemIndex, getLineItemsFlattened } from '@/helpers/line-items-helper';
|
||||||
import { buildQueryStringParameterFromArrayOfComplexObjects, getLineItemQueryString, getTaxLineItemQueryString } from '@/helpers/querystring-helper';
|
import { buildQueryStringParameterFromArrayOfComplexObjects, getLineItemQueryString, getTaxLineItemQueryString } from '@/helpers/querystring-helper';
|
||||||
import coverageType from '@/constants/coverage-type';
|
import coverageType from '@/constants/coverage-type';
|
||||||
import { getExperimentSettingValue, getFeatureTogglesQueryString } from '@/helpers/experiment-helper';
|
import { getExperimentSettingValue, getFeatureTogglesQueryString } from '@/helpers/experiment-helper';
|
||||||
|
|
@ -1079,16 +1079,14 @@ export const useMainStore = defineStore({
|
||||||
return availableLineItems;
|
return availableLineItems;
|
||||||
},
|
},
|
||||||
|
|
||||||
// NOTE: The endpoint requires that safelite part numbers be used!!
|
|
||||||
async getITACPriceOrderItems(availableLineItems) {
|
async getITACPriceOrderItems(availableLineItems) {
|
||||||
const { policy, vehicle, contactInfo, serviceLocation, insuranceCoverage } = this.order;
|
const { policy, vehicle, contactInfo, serviceLocation, insuranceCoverage } = this.order;
|
||||||
const lineItemsUsingSafelitePartNumber = mapSafelitePartNumberToPartNumberIfExists(availableLineItems);
|
|
||||||
const response = await globalMethods
|
const response = await globalMethods
|
||||||
.callHttpClient({
|
.callHttpClient({
|
||||||
method: endpoints.GetITACPriceOrderItems.method,
|
method: endpoints.GetITACPriceOrderItems.method,
|
||||||
endpoint: endpoints.GetITACPriceOrderItems.url,
|
endpoint: endpoints.GetITACPriceOrderItems.url,
|
||||||
payload: {
|
payload: {
|
||||||
lineItems: getLineItemsFlattened(lineItemsUsingSafelitePartNumber),
|
lineItems: getLineItemsFlattened(availableLineItems),
|
||||||
ServerData: this.order.lineItems.serverData,
|
ServerData: this.order.lineItems.serverData,
|
||||||
Customer: {
|
Customer: {
|
||||||
PhoneNumber: contactInfo.servicePhone,
|
PhoneNumber: contactInfo.servicePhone,
|
||||||
|
|
@ -1130,18 +1128,20 @@ export const useMainStore = defineStore({
|
||||||
throw error;
|
throw error;
|
||||||
});
|
});
|
||||||
|
|
||||||
const { lineItems, serverData, isItac, primaryBillToNumber } = response.data;
|
const { lineItems, serverData, isItac, primaryBillToNumber, partsWerePriced } = response.data;
|
||||||
|
|
||||||
if (serverData) {
|
if (serverData) {
|
||||||
this.order.lineItems.serverData = serverData;
|
this.order.lineItems.serverData = serverData;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isItac) {
|
if (partsWerePriced) {
|
||||||
// if the ITAC Pricing API call returns isItac = true then we should switch to ITAC coverage type
|
if (isItac) {
|
||||||
this.updateCoverageType(coverageType.ITAC);
|
// if the ITAC Pricing API call returns isItac = true then we should switch to ITAC coverage type
|
||||||
} else if (this.isITAC) {
|
this.updateCoverageType(coverageType.ITAC);
|
||||||
// If the ITAC pricing API call returns isItac = false, and we are currently ITAC in the store then we should switch to deductible coverage type
|
} else if (this.isITAC) {
|
||||||
this.updateCoverageType(coverageType.Deductible);
|
// If the ITAC pricing API call returns isItac = false, and we are currently ITAC in the store then we should switch to deductible coverage type
|
||||||
|
this.updateCoverageType(coverageType.Deductible);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (primaryBillToNumber && primaryBillToNumber.length !== 0) {
|
if (primaryBillToNumber && primaryBillToNumber.length !== 0) {
|
||||||
|
|
@ -1151,7 +1151,7 @@ export const useMainStore = defineStore({
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lineItems) {
|
if (lineItems) {
|
||||||
const retAvailableLineItems = addPricesToLineItems(availableLineItems, lineItems, false);
|
const retAvailableLineItems = addPricesToLineItems(availableLineItems, lineItems);
|
||||||
return retAvailableLineItems;
|
return retAvailableLineItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2775,24 +2775,22 @@ function convertGlassPieceNamingFromApi(glassArray) {
|
||||||
return glassArray;
|
return glassArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note this is used for both the insurance and the itac endpoints, so it needs to deal with safelite or nags part numbers
|
function addPricesToLineItems(lineItems, pricingLineItems) {
|
||||||
function addPricesToLineItems(lineItems, pricingLineItems, pricedPartNumberIsNags = true) {
|
|
||||||
const partOffset = {};
|
const partOffset = {};
|
||||||
const partNumberPropertyToCompare = pricedPartNumberIsNags ? 'partNumber' : 'safelitePartNumber';
|
|
||||||
|
|
||||||
lineItems.forEach((lineItem) => {
|
lineItems.forEach((lineItem) => {
|
||||||
if (lineItem.childParts) {
|
if (lineItem.childParts) {
|
||||||
addPricesToLineItems(lineItem.childParts, pricingLineItems);
|
addPricesToLineItems(lineItem.childParts, pricingLineItems);
|
||||||
}
|
}
|
||||||
const partNumberToCompare = lineItem[partNumberPropertyToCompare];
|
const { partNumber } = lineItem;
|
||||||
|
|
||||||
const pricedIndex = findLineItemIndex(pricingLineItems, partNumberToCompare, partOffset[partNumberToCompare] ?? 0);
|
const pricedIndex = findLineItemIndex(pricingLineItems, partNumber, partOffset[partNumber] ?? 0);
|
||||||
if (pricedIndex !== -1) {
|
if (pricedIndex !== -1) {
|
||||||
const pricedLineItem = pricingLineItems[pricedIndex];
|
const pricedLineItem = pricingLineItems[pricedIndex];
|
||||||
lineItem.laborAmount = pricedLineItem.laborAmount;
|
lineItem.laborAmount = pricedLineItem.laborAmount;
|
||||||
lineItem.sellingPrice = pricedLineItem.sellingPrice;
|
lineItem.sellingPrice = pricedLineItem.sellingPrice;
|
||||||
lineItem.kitPrice = pricedLineItem.kitPrice;
|
lineItem.kitPrice = pricedLineItem.kitPrice;
|
||||||
partOffset[partNumberToCompare] = pricedIndex + 1;
|
partOffset[partNumber] = pricedIndex + 1;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return lineItems;
|
return lineItems;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue