Additional schedule page prereqs refactor

This commit is contained in:
Matt Sykes 2026-03-09 12:40:19 -04:00
parent e138dfe508
commit 3b950302ff
3 changed files with 143 additions and 112 deletions

View file

@ -1,7 +1,7 @@
import { debugLog } from "@/helpers/debug-log-helper.js"; import { debugLog } from "@/helpers/debug-log-helper.js";
import { AppointmentTypeStrings } from "@/constants/schedule-constants"; import { AppointmentTypeStrings } from "@/constants/schedule-constants";
import { coverageStatus } from "@/constants/insurance"; import { coverageStatus } from "@/constants/insurance";
import store from "@/store"; import { applicationConfig } from "@/constants/application-config";
export function logPagePrereqsStart(source, preReqResult) { export function logPagePrereqsStart(source, preReqResult) {
// prettier-ignore // prettier-ignore
@ -87,13 +87,24 @@ export function hasServiceLocationInfo(order, logQueue = null) {
} }
export function hasInsuranceInfo(order, logQueue = null) { export function hasInsuranceInfo(order, logQueue = null) {
const isInsurance = order.payment.isInsurance; const isInsurance = order.payment?.isInsurance;
const insuranceCoverageStatus = store.getters.payment?.insuranceCoverage?.coverageStatus; const insuranceCoverageStatus = order.payment?.insuranceCoverage?.coverageStatus;
const currentDeductible = store.getters.policy?.currentDeductible; const currentDeductible = order.policy?.currentDeductible;
const parentAccountNumber = order.payment?.parentAccountNumber;
const policyNumber = order.policy?.policyNumber;
let result = false; let result = false;
if (isInsurance !== null) { if (isInsurance !== null) {
if ( if (isInsurance === false) {
result = true; // Cash selected - no need for policy number or parent account
} else {
const parentAccountNotCash =
parentAccountNumber !== applicationConfig.CASH_PARENT_ACCOUNT_NUMBER;
const hasPolicyNumber = !!policyNumber;
if (!parentAccountNotCash || !hasPolicyNumber) {
result = false;
} else if (
insuranceCoverageStatus === coverageStatus.VERIFIED && insuranceCoverageStatus === coverageStatus.VERIFIED &&
!(currentDeductible === 0 || currentDeductible > 0) !(currentDeductible === 0 || currentDeductible > 0)
) { ) {
@ -102,11 +113,16 @@ export function hasInsuranceInfo(order, logQueue = null) {
result = true; result = true;
} }
} }
}
queueLogging(logQueue, () => { queueLogging(logQueue, () => {
// prettier-ignore // prettier-ignore
{ {
debugLog("hasInsuranceInfo:", result, !result); debugLog("hasInsuranceInfo:", result, !result);
if (isInsurance === true) {
debugLog("hasInsuranceInfo parentAccountNumber:", parentAccountNumber, !result);
debugLog("hasInsuranceInfo policyNumber:", policyNumber, !result);
}
if (insuranceCoverageStatus === coverageStatus.VERIFIED) { if (insuranceCoverageStatus === coverageStatus.VERIFIED) {
debugLog("hasInsuranceInfo coverageStatus:", insuranceCoverageStatus, !result); debugLog("hasInsuranceInfo coverageStatus:", insuranceCoverageStatus, !result);
debugLog("hasInsuranceInfo currentDeductible:", currentDeductible, !result); debugLog("hasInsuranceInfo currentDeductible:", currentDeductible, !result);

View file

@ -1,5 +1,4 @@
import * as pagePrereqsHelper from "@/helpers/page-prerequisites-helper"; import * as pagePrereqsHelper from "@/helpers/page-prerequisites-helper";
import store from "@/store";
import { AppointmentTypeStrings } from "@/constants/schedule-constants"; import { AppointmentTypeStrings } from "@/constants/schedule-constants";
import { coverageStatus } from "@/constants/insurance"; import { coverageStatus } from "@/constants/insurance";
@ -293,25 +292,6 @@ describe("page-prerequisites-helper.js", () => {
}); });
describe("hasInsuranceInfo", () => { describe("hasInsuranceInfo", () => {
const baseOrder = {
payment: {
isInsurance: false,
},
};
beforeEach(() => {
store.getters = {
payment: {
insuranceCoverage: {
coverageStatus: null,
},
},
policy: {
currentDeductible: 100,
},
};
});
test("returns false when isInsurance is null", () => { test("returns false when isInsurance is null", () => {
const order = { payment: { isInsurance: null } }; const order = { payment: { isInsurance: null } };
@ -320,19 +300,43 @@ describe("page-prerequisites-helper.js", () => {
expect(result).toBe(false); expect(result).toBe(false);
}); });
test("returns true when isInsurance is false and coverage is not verified", () => { test("returns true when isInsurance is false (cash selected)", () => {
// Arrange const order = {
store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.PENDING; payment: {
isInsurance: false,
insuranceCoverage: { coverageStatus: coverageStatus.PENDING },
},
};
const result = pagePrereqsHelper.hasInsuranceInfo(baseOrder); const result = pagePrereqsHelper.hasInsuranceInfo(order);
expect(result).toBe(true);
});
test("returns true when isInsurance is true and coverage is not verified", () => {
const order = {
payment: {
isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.PENDING },
parentAccountNumber: 999999,
},
policy: { policyNumber: "POL123" },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order);
expect(result).toBe(true); expect(result).toBe(true);
}); });
test("returns true when isInsurance is true and coverage is verified with valid deductible", () => { test("returns true when isInsurance is true and coverage is verified with valid deductible", () => {
const order = { payment: { isInsurance: true } }; const order = {
store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED; payment: {
store.getters.policy.currentDeductible = 100; isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED },
parentAccountNumber: 999999,
},
policy: { policyNumber: "POL123", currentDeductible: 100 },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order); const result = pagePrereqsHelper.hasInsuranceInfo(order);
@ -340,19 +344,59 @@ describe("page-prerequisites-helper.js", () => {
}); });
test("returns true when coverage is verified and deductible is 0", () => { test("returns true when coverage is verified and deductible is 0", () => {
const order = { payment: { isInsurance: true } }; const order = {
store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED; payment: {
store.getters.policy.currentDeductible = 0; isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED },
parentAccountNumber: 999999,
},
policy: { policyNumber: "POL123", currentDeductible: 0 },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order); const result = pagePrereqsHelper.hasInsuranceInfo(order);
expect(result).toBe(true); expect(result).toBe(true);
}); });
test("returns false when isInsurance is true but parentAccountNumber is CASH_PARENT_ACCOUNT_NUMBER", () => {
const order = {
payment: {
isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.PENDING },
parentAccountNumber: 167132,
},
policy: { policyNumber: "POL123" },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order);
expect(result).toBe(false);
});
test("returns false when isInsurance is true but policyNumber is missing", () => {
const order = {
payment: {
isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.PENDING },
parentAccountNumber: 999999,
},
policy: { policyNumber: null },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order);
expect(result).toBe(false);
});
test("returns false when coverage is verified but deductible is null", () => { test("returns false when coverage is verified but deductible is null", () => {
const order = { payment: { isInsurance: true } }; const order = {
store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED; payment: {
store.getters.policy.currentDeductible = null; isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED },
parentAccountNumber: 999999,
},
policy: { policyNumber: "POL123", currentDeductible: null },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order); const result = pagePrereqsHelper.hasInsuranceInfo(order);
@ -360,9 +404,14 @@ describe("page-prerequisites-helper.js", () => {
}); });
test("returns false when coverage is verified but deductible is undefined", () => { test("returns false when coverage is verified but deductible is undefined", () => {
const order = { payment: { isInsurance: true } }; const order = {
store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED; payment: {
store.getters.policy.currentDeductible = undefined; isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED },
parentAccountNumber: 999999,
},
policy: { policyNumber: "POL123", currentDeductible: undefined },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order); const result = pagePrereqsHelper.hasInsuranceInfo(order);
@ -370,9 +419,14 @@ describe("page-prerequisites-helper.js", () => {
}); });
test("returns false when coverage is verified but deductible is negative", () => { test("returns false when coverage is verified but deductible is negative", () => {
const order = { payment: { isInsurance: true } }; const order = {
store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED; payment: {
store.getters.policy.currentDeductible = -1; isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED },
parentAccountNumber: 999999,
},
policy: { policyNumber: "POL123", currentDeductible: -1 },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order); const result = pagePrereqsHelper.hasInsuranceInfo(order);

View file

@ -261,6 +261,12 @@ import { getAmountDue, getPricingByDayPartWithPrice } from "@/helpers/pricing-he
import { getItemsWithoutRecalParts } from "@/helpers/recal-helper"; import { getItemsWithoutRecalParts } from "@/helpers/recal-helper";
import { deepClone } from "@/helpers/object-helper"; import { deepClone } from "@/helpers/object-helper";
import { debugLog } from "@/helpers/debug-log-helper"; import { debugLog } from "@/helpers/debug-log-helper";
import {
flushPagePrereqsLogs,
hasServiceZipInfo,
hasGlassPartsOrRepairInfo,
hasInsuranceInfo,
} from "@/helpers/page-prerequisites-helper.js";
import { import {
getSessionKeyValue, getSessionKeyValue,
getUserIdValue, getUserIdValue,
@ -981,76 +987,31 @@ export default {
methods: { methods: {
splitCopyOnCMSPlaceHolder, splitCopyOnCMSPlaceHolder,
arePagePrerequisitesValid() { arePagePrerequisitesValid() {
const paymentInfo = store.getters.payment.isInsurance !== null; const order = store.getters.order;
const damageInfo = const logQueue = [];
store.getters.order.damage.isRepair ||
(store.getters.order.lineItems?.glassParts != null && const serviceZip = hasServiceZipInfo(order, logQueue);
store.getters.order.lineItems.glassParts.length > 0); const glassPartsOrRepair = hasGlassPartsOrRepairInfo(order, logQueue);
const parentAccountNumberInfo = const insuranceInfo = hasInsuranceInfo(order, logQueue);
store.getters.payment.parentAccountNumber !==
applicationConfig.CASH_PARENT_ACCOUNT_NUMBER;
const policyNumberInfo = store.getters.order.policy.policyNumber;
const zipCodeInfo = store.getters.order.serviceLocation.zipCode;
const supportingItemsInfo = store.getters.lineItems.supportingItems;
// insurance drops the recycle fee on replace orders so it won't be in supportingItems // insurance drops the recycle fee on replace orders so it won't be in supportingItems
const insurancePreReqResult = const supportingItemsInfo = store.getters.lineItems?.supportingItems;
parentAccountNumberInfo && const supportingItemsPreReqs = order.payment?.isInsurance
policyNumberInfo && ? true
zipCodeInfo && : !!supportingItemsInfo;
paymentInfo &&
damageInfo;
const cashPreReqResult =
supportingItemsInfo && zipCodeInfo && paymentInfo && damageInfo;
const outputDebugLog = (preReqResult) => { const preReqResult = serviceZip && insuranceInfo && glassPartsOrRepair && supportingItemsPreReqs;
// prettier-ignore
debugLog("--- schedule.vue pagePrereqs start ---", null, !preReqResult); logQueue.push(() => {
debugLog(
"store.getters.payment.isInsurance:",
store.getters.payment?.isInsurance,
!preReqResult
);
debugLog(
"store.getters.order.damage.isRepair:",
store.getters.order.damage?.isRepair,
!preReqResult
);
debugLog(
"store.getters.order.lineItems.glassParts:",
store.getters.order.lineItems?.glassParts,
!preReqResult
);
debugLog(
"store.getters.payment.parentAccountNumber:",
store.getters.payment.parentAccountNumber,
!preReqResult
);
debugLog(
"store.getters.order.policy.policyNumber:",
store.getters.order.policy.policyNumber,
!preReqResult
);
debugLog(
"store.getters.order.serviceLocation.zipCode:",
store.getters.order.serviceLocation.zipCode,
!preReqResult
);
debugLog( debugLog(
"store.getters.lineItems.supportingItems:", "store.getters.lineItems.supportingItems:",
store.getters.lineItems.supportingItems, store.getters.lineItems?.supportingItems,
!preReqResult !supportingItemsPreReqs
); );
debugLog("--- schedule.vue pagePrereqs end ---", null, !preReqResult); });
};
if (store.getters.payment.isInsurance) { flushPagePrereqsLogs("schedule.vue", preReqResult, logQueue);
outputDebugLog(insurancePreReqResult); return preReqResult;
return insurancePreReqResult;
} else {
outputDebugLog(cashPreReqResult);
return cashPreReqResult;
}
}, },
setDataOnLoad(zipCodeData, serviceabilityDetails, mobileFeePart, shopProviderData) { setDataOnLoad(zipCodeData, serviceabilityDetails, mobileFeePart, shopProviderData) {