Fixing itac endpoint problem
This commit is contained in:
parent
99df29963e
commit
7ff4edd743
5 changed files with 92 additions and 11 deletions
|
|
@ -1,6 +1,57 @@
|
|||
import { getLineItemsFlattened } from '@/helpers/line-items-helper';
|
||||
|
||||
describe('getLineItemsFlattened', () => {
|
||||
function mapLineItemsForGetITACPrice(lineItems) {
|
||||
console.log(`before: ${JSON.stringify(lineItems)}`);
|
||||
const x = lineItems.map(({ safelitePartNumber, childParts, ...rest }) => ({
|
||||
...rest,
|
||||
partNumber: safelitePartNumber,
|
||||
childParts: childParts.map((part) => ({
|
||||
partNumber: part.safelitePartNumber
|
||||
}))
|
||||
}));
|
||||
console.log(`after: ${JSON.stringify(x)}`);
|
||||
return x;
|
||||
}
|
||||
describe.only('test', () => {
|
||||
// Arrange
|
||||
const lineItems = [{
|
||||
apple: 'a',
|
||||
banana: 'b',
|
||||
partNumber: 111,
|
||||
safelitePartNumber: 222,
|
||||
childParts: [
|
||||
{
|
||||
partNumber: 333,
|
||||
safelitePartNumber: 444
|
||||
},
|
||||
{
|
||||
partNumber: 555,
|
||||
safelitePartNumber: 666
|
||||
}
|
||||
]
|
||||
}];
|
||||
const expected = [{
|
||||
apple: 'a',
|
||||
banana: 'b',
|
||||
partNumber: 222,
|
||||
childParts: [
|
||||
{
|
||||
partNumber: 444
|
||||
},
|
||||
{
|
||||
partNumber: 666
|
||||
}
|
||||
]
|
||||
}];
|
||||
|
||||
// Act
|
||||
const result = mapLineItemsForGetITACPrice(lineItems);
|
||||
console.log(JSON.stringify(result));
|
||||
|
||||
// Assert
|
||||
expect(result).toMatchObject(expected);
|
||||
});
|
||||
describe('getLineItemsFlattened', () => {
|
||||
it('Returns empty array when null is passed', () => {
|
||||
// Arrange
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ import {
|
|||
import { getPriceOfLineItems, getTaxOfLineItems } from '@/helpers/price-calculator';
|
||||
|
||||
const VERIFYING_COVERAGE = 'Verifying coverage';
|
||||
const RECYCLING_MODAL_REF_NAME = "RecycleModal";
|
||||
const RECYCLING_MODAL_REF_NAME = 'RecycleModal';
|
||||
|
||||
export default {
|
||||
name: 'cart-dropdown',
|
||||
|
|
@ -234,6 +234,8 @@ export default {
|
|||
return getRecycleFeeLineItem(this.cartOrder);
|
||||
},
|
||||
servicePrice() {
|
||||
const x = getServiceLineItems(this.cartOrder);
|
||||
console.log(`service line items: ${JSON.stringify(x)}`);
|
||||
return getPriceOfLineItems(getServiceLineItems(this.cartOrder)) ?? 0;
|
||||
},
|
||||
isUnverified() {
|
||||
|
|
|
|||
|
|
@ -382,6 +382,7 @@ export default {
|
|||
...(this.mainStore.lineItems.supportingItems ?? []),
|
||||
...(clonedGlassParts ?? [])
|
||||
];
|
||||
console.log(`available line items: ${JSON.stringify(availableLineItems)}`);
|
||||
|
||||
// We only call the ITAC pricing endpoint if we are not repair or we are NoComp
|
||||
if (!this.isRepair || this.mainStore.isNoComp) {
|
||||
|
|
|
|||
|
|
@ -23,9 +23,10 @@ export default {
|
|||
glassParts.forEach((glass) => {
|
||||
if (Array.isArray(glass.parts) && glass.parts.length === 1) {
|
||||
const singlePart = glass.parts[0];
|
||||
if (singlePart){
|
||||
if (singlePart) {
|
||||
reducedGlassParts.push({
|
||||
partNumber: singlePart.partNumber,
|
||||
safelitePartNumber: singlePart.safelitePartNumber,
|
||||
description: singlePart.description,
|
||||
color: singlePart.color,
|
||||
partType: singlePart.partType,
|
||||
|
|
@ -119,10 +120,10 @@ export default {
|
|||
});
|
||||
|
||||
// remove any disabled dependent answers
|
||||
const answerQuestionNums = new Set(alreadyAnsweredQuestions[alreadyAnsweredQuestions.length-1].answeredQuestions.map(q => q.questionNum));
|
||||
glass.questions.forEach(q => {
|
||||
if(!answerQuestionNums.has(q.questionSequence)) {
|
||||
delete q.answerSelected
|
||||
const answerQuestionNums = new Set(alreadyAnsweredQuestions[alreadyAnsweredQuestions.length - 1].answeredQuestions.map((q) => q.questionNum));
|
||||
glass.questions.forEach((q) => {
|
||||
if (!answerQuestionNums.has(q.questionSequence)) {
|
||||
delete q.answerSelected;
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -1076,9 +1076,23 @@ export const useMainStore = defineStore({
|
|||
return availableLineItems;
|
||||
},
|
||||
|
||||
// TODO move to helper
|
||||
// replaces partNumber, which is NAGS with the safelite part number
|
||||
mapLineItemsForGetITACPrice(lineItems) {
|
||||
const x = lineItems.map(({ safelitePartNumber, childParts, ...rest }) => ({
|
||||
...rest,
|
||||
partNumber: safelitePartNumber,
|
||||
childParts: childParts.map((part) => ({
|
||||
partNumber: part.safelitePartNumber
|
||||
}))
|
||||
}));
|
||||
return x;
|
||||
},
|
||||
|
||||
// NOTE: The endpoint requires that safelite part numbers be used!!
|
||||
async getITACPriceOrderItems(availableLineItems) {
|
||||
const { policy, vehicle, contactInfo, serviceLocation, insuranceCoverage } = this.order;
|
||||
|
||||
const lineItemsUsingSafelitePartNumber = this.mapLineItemsForGetITACPrice(availableLineItems);
|
||||
const response = await globalMethods
|
||||
.callHttpClient({
|
||||
method: endpoints.GetITACPriceOrderItems.method,
|
||||
|
|
@ -1088,7 +1102,7 @@ export const useMainStore = defineStore({
|
|||
ReferralNumber: this.order.referralNumber,
|
||||
ReferralSequenceNumber: this.order.referralSequenceNumber,
|
||||
ReferralDate: `${this.order.referralDate}Z`,
|
||||
lineItems: getLineItemsFlattened(availableLineItems),
|
||||
lineItems: getLineItemsFlattened(lineItemsUsingSafelitePartNumber),
|
||||
ServerData: this.order.lineItems.serverData,
|
||||
ServiceZipCode: serviceLocation.zipCode,
|
||||
Customer: {
|
||||
|
|
@ -1122,6 +1136,8 @@ export const useMainStore = defineStore({
|
|||
|
||||
const { lineItems, serverData, isItac, primaryBillToNumber } = response.data;
|
||||
|
||||
console.log(`response data: ${JSON.stringify(response.data)}`);
|
||||
|
||||
if (serverData) {
|
||||
this.order.lineItems.serverData = serverData;
|
||||
}
|
||||
|
|
@ -1141,7 +1157,9 @@ export const useMainStore = defineStore({
|
|||
}
|
||||
|
||||
if (lineItems) {
|
||||
const retAvailableLineItems = addPricesToLineItems(availableLineItems, lineItems);
|
||||
console.log(`returned line items: ${JSON.stringify(lineItems)}`);
|
||||
const retAvailableLineItems = addPricesToLineItems(availableLineItems, lineItems, false);
|
||||
console.log(`line items with prices: ${JSON.stringify(retAvailableLineItems)}`);
|
||||
return retAvailableLineItems;
|
||||
}
|
||||
|
||||
|
|
@ -2767,14 +2785,22 @@ function convertGlassPieceNamingFromApi(glassArray) {
|
|||
return glassArray;
|
||||
}
|
||||
|
||||
function addPricesToLineItems(lineItems, pricingLineItems) {
|
||||
// TODO does this work
|
||||
// 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, pricedPartNumberIsNags = true) {
|
||||
const partOffset = {};
|
||||
const partNumberProperty = pricedPartNumberIsNags ? 'partNumber' : 'safelitePartNumber';
|
||||
|
||||
console.log(partNumberProperty);
|
||||
console.log(lineItems[0].partNumber);
|
||||
console.log(lineItems[0].safelitePartNumber);
|
||||
console.log(lineItems[0][partNumberProperty]);
|
||||
lineItems.forEach((lineItem) => {
|
||||
if (lineItem.childParts) {
|
||||
addPricesToLineItems(lineItem.childParts, pricingLineItems);
|
||||
}
|
||||
|
||||
const pricedIndex = findLineItemIndex(pricingLineItems, lineItem.partNumber, partOffset[lineItem.partNumber] ?? 0);
|
||||
const pricedIndex = findLineItemIndex(pricingLineItems, lineItem[partNumberProperty], partOffset[lineItem.partNumber] ?? 0);
|
||||
if (pricedIndex !== -1) {
|
||||
const pricedLineItem = pricingLineItems[pricedIndex];
|
||||
lineItem.laborAmount = pricedLineItem.laborAmount;
|
||||
|
|
|
|||
Loading…
Reference in a new issue