Merge pull request #877 from Safelite/feature/richardson/SSR-1478

Updates to provider call.
This commit is contained in:
brich1212safe 2024-10-24 14:44:13 -04:00 committed by GitHub
commit f5b653c4c3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 73 additions and 24 deletions

View file

@ -1,4 +1,5 @@
const partTypeStrings = Object.freeze({ const partTypeStrings = Object.freeze({
ADAS_RECALIBRATION: 'ADAS RECALIBRATION',
WINDSHIELD: 'WINDSHIELD', WINDSHIELD: 'WINDSHIELD',
FRONT_WIPER: 'FRONT WIPER', FRONT_WIPER: 'FRONT WIPER',
REAR_WIPER: 'REAR WIPER', REAR_WIPER: 'REAR WIPER',

View file

@ -0,0 +1,25 @@
import partTypeStrings from '@/constants/part-type-strings';
const recalPartTypes = [partTypeStrings.RECALIBRATION, partTypeStrings.ADAS_RECALIBRATION];
export function isRecalPart(part) {
return recalPartTypes.some((type) => type === part.partType);
}
export function isRecalPartOrHasChildRecalPart(glassPart) {
const isGlassPartRecalPart = isRecalPart(glassPart);
if (!isGlassPartRecalPart && glassPart.childParts && glassPart.childParts.length > 0) {
return glassPart.childParts.filter((cp) => isRecalPartOrHasChildRecalPart(cp));
}
return isGlassPartRecalPart;
}
export function getTopLevelGlassPartsWithRecal(glassParts) {
if (!glassParts) {
return null;
}
return glassParts.filter((gp) => isRecalPartOrHasChildRecalPart(gp));
}

View file

@ -1,39 +1,40 @@
/* eslint-disable no-use-before-define */ /* eslint-disable no-use-before-define */
/* eslint-disable max-len */ /* eslint-disable max-len */
import { defineStore } from 'pinia'; import { defineStore } from 'pinia';
import applicationConfig from '@/constants/application-config';
import bailoutCode from '@/constants/bailoutCode';
import bailoutMessage from '@/constants/bailoutMessage';
import coverageStatuses from '@/constants/coverage-statuses';
import coverageType from '@/constants/coverage-type';
import damageLocationsSelected from '@/constants/damage-locations-selected';
import { endpoints } from '@/constants/endpoints'; import { endpoints } from '@/constants/endpoints';
// eslint-disable-next-line import/no-cycle import { experimentSettings, experimentTriggers, experimentUniverses } from '@/constants/experiments';
import { getDateForSavedSessionTimeout } from '@/helpers/session-helper'; import partNumberStrings from '@/constants/part-number-strings';
import partTypeStrings from '@/constants/part-type-strings';
import { paymentMethods } from '@/constants/payment-method-constants';
import { AppointmentTypeStrings } from '@/constants/schedule-constants';
import webStorageConstants from '@/constants/web-storage-constants';
// eslint-disable-next-line import/no-cycle // eslint-disable-next-line import/no-cycle
import globalMethods from '@/global-methods'; import globalMethods from '@/global-methods';
import { experimentSettings, experimentTriggers, experimentUniverses } from '@/constants/experiments'; // eslint-disable-next-line import/no-cycle
import applicationConfig from '@/constants/application-config'; import { getSessionKeyValue, getUserIdValue, deleteISSCookie } from '@/helpers/cookie-helper';
import issPageValues from '@/router/router-constants/issPage-values';
import damageLocationsSelected from '@/constants/damage-locations-selected';
import coverageStatuses from '@/constants/coverage-statuses';
import { AppointmentTypeStrings } from '@/constants/schedule-constants';
import { convertDateStringToDate, getDateDifferenceInDays, militaryToTwelveHourTime } from '@/helpers/date-helper'; import { convertDateStringToDate, getDateDifferenceInDays, militaryToTwelveHourTime } from '@/helpers/date-helper';
import { paymentMethods } from '@/constants/payment-method-constants'; import { getExperimentSettingValue } from '@/helpers/experiment-helper';
import webStorageConstants from '@/constants/web-storage-constants'; import { findLineItemIndex, getLineItemsFlattened } from '@/helpers/line-items-helper';
import { import {
deductibleForSelectedVehicle, endorsementsForSelectedVehicle, deductibleForSelectedVehicle, endorsementsForSelectedVehicle,
noCoverageForSelectedVehicle, noCoverageForSelectedVehicle,
repairWaivedForSelectedVehicle repairWaivedForSelectedVehicle
} from '@/helpers/policy-vehicle-helper'; } from '@/helpers/policy-vehicle-helper';
import partTypeStrings from '@/constants/part-type-strings';
import bailoutMessage from '@/constants/bailoutMessage';
import bailoutCode from '@/constants/bailoutCode';
import partNumberStrings from '@/constants/part-number-strings';
import { findLineItemIndex, getLineItemsFlattened } from '@/helpers/line-items-helper';
import { import {
buildQueryStringParameterFromArrayOfComplexObjects, buildURLSearchParams, buildURLSearchParams,
getLineItemQueryString,
getPartNumbersListForQueryString, getPartNumbersListForQueryString,
getTaxLineItemQueryString getTaxLineItemQueryString
} from '@/helpers/querystring-helper'; } from '@/helpers/querystring-helper';
import coverageType from '@/constants/coverage-type'; import { getTopLevelGlassPartsWithRecal } from '@/helpers/recal-helper';
import { getExperimentSettingValue, getFeatureTogglesQueryString } from '@/helpers/experiment-helper'; // eslint-disable-next-line import/no-cycle
import { getSessionKeyValue, getUserIdValue, deleteISSCookie } from '@/helpers/cookie-helper'; import { getDateForSavedSessionTimeout } from '@/helpers/session-helper';
import issPageValues from '@/router/router-constants/issPage-values';
const storeId = 'main'; const storeId = 'main';
@ -1000,23 +1001,41 @@ export const useMainStore = defineStore({
}, },
getProviders(serviceZipCode) { getProviders(serviceZipCode) {
const { carId } = this.order.vehicle;
const damageType = this.damage.isRepair ? 'Repair' : 'Replace'; const damageType = this.damage.isRepair ? 'Repair' : 'Replace';
const { parentAccountNumber } = this.issConfig;
const partsWithRecal = getTopLevelGlassPartsWithRecal(this.order.lineItems.glassParts);
const windshieldPartWithRecal = partsWithRecal?.length > 0 ? partsWithRecal[0] : null;
const safeliteOnly = true;
const shopRadiusInMiles = 100; const shopRadiusInMiles = 100;
let url = `${endpoints.GetProviders.url}/${serviceZipCode}/${damageType}/${shopRadiusInMiles}/${parentAccountNumber}/${safeliteOnly}/${carId}`;
if (windshieldPartWithRecal) {
url += `/${windshieldPartWithRecal.partNumber}`;
}
return globalMethods.callHttpClient({ return globalMethods.callHttpClient({
method: endpoints.GetProviders.method, method: endpoints.GetProviders.method,
endpoint: `${endpoints.GetProviders.url}/${serviceZipCode}/${damageType}/${shopRadiusInMiles}` endpoint: url
}); });
}, },
getTpaProviders(zipCode, radius) { getTpaProviders(zipCode, radius) {
const { carId } = this.order.vehicle;
const damageType = this.damage.isRepair ? 'Repair' : 'Replace'; const damageType = this.damage.isRepair ? 'Repair' : 'Replace';
const { parentAccountNumber } = this.issConfig; const { parentAccountNumber } = this.issConfig;
const partsWithRecal = getTopLevelGlassPartsWithRecal(this.order.lineItems.glassParts);
const windshieldPartWithRecal = partsWithRecal?.length > 0 ? partsWithRecal[0] : null;
const safeliteOnly = false; const safeliteOnly = false;
let url = `${endpoints.GetProviders.url}/${zipCode}/${damageType}/${radius}/${parentAccountNumber}/${safeliteOnly}/${carId}`;
if (windshieldPartWithRecal) {
url += `/${windshieldPartWithRecal.partNumber}`;
}
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
globalMethods.callHttpClient({ globalMethods.callHttpClient({
method: endpoints.GetProviders.method, method: endpoints.GetProviders.method,
endpoint: `${endpoints.GetProviders.url}/${zipCode}/${damageType}/${radius}/${parentAccountNumber}/${safeliteOnly}` endpoint: url
}).then((response) => resolve(response), (error) => reject(error)); }).then((response) => resolve(response), (error) => reject(error));
}); });
}, },
@ -1287,6 +1306,7 @@ export const useMainStore = defineStore({
})); }));
const params = buildURLSearchParams({ const params = buildURLSearchParams({
applicationName: applicationConfig.APPLICATION_NAME,
parentAccountNumber, parentAccountNumber,
referralSequenceNumber, referralSequenceNumber,
zip: serviceZipCode, zip: serviceZipCode,
@ -1480,7 +1500,7 @@ export const useMainStore = defineStore({
referralSequenceNumber: this.order.referralSequenceNumber, referralSequenceNumber: this.order.referralSequenceNumber,
eon: this.order.eon, eon: this.order.eon,
submitToMainframe: !!this.order.referralNumber, submitToMainframe: !!this.order.referralNumber,
createWorkOrderNumberForPIA: createWorkOrderNumberForPIA, createWorkOrderNumberForPIA,
lockToken: this.order.lockToken, lockToken: this.order.lockToken,
loadedFromDupeCheck, loadedFromDupeCheck,
submitAfterSave: !!submitAfterSave submitAfterSave: !!submitAfterSave

View file

@ -1937,9 +1937,11 @@ describe('Store', () => {
// Arrange // Arrange
globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({}));
const carId = getRandomString(10, 14);
const parentAccountNumber = getRandomString(6, 6); const parentAccountNumber = getRandomString(6, 6);
store.issConfig.parentAccountNumber = parentAccountNumber; store.issConfig.parentAccountNumber = parentAccountNumber;
store.order.damage.isRepair = isRepair; store.order.damage.isRepair = isRepair;
store.order.vehicle.carId = carId;
const zipCode = getRandomString(6, 6); const zipCode = getRandomString(6, 6);
const radius = getRandomInt(5, 100); const radius = getRandomInt(5, 100);
const expectedEndpoint = [ const expectedEndpoint = [
@ -1948,7 +1950,8 @@ describe('Store', () => {
damageType, damageType,
radius, radius,
parentAccountNumber, parentAccountNumber,
'false' 'false',
carId
].join('/'); ].join('/');
// Act // Act