Additional schedule page prereqs refactor
This commit is contained in:
parent
e138dfe508
commit
3b950302ff
3 changed files with 143 additions and 112 deletions
|
|
@ -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,19 +87,31 @@ 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) {
|
||||||
insuranceCoverageStatus === coverageStatus.VERIFIED &&
|
result = true; // Cash selected - no need for policy number or parent account
|
||||||
!(currentDeductible === 0 || currentDeductible > 0)
|
|
||||||
) {
|
|
||||||
result = false; // if coverageStatus is verified there must be a valid deductible also
|
|
||||||
} else {
|
} else {
|
||||||
result = true;
|
const parentAccountNotCash =
|
||||||
|
parentAccountNumber !== applicationConfig.CASH_PARENT_ACCOUNT_NUMBER;
|
||||||
|
const hasPolicyNumber = !!policyNumber;
|
||||||
|
|
||||||
|
if (!parentAccountNotCash || !hasPolicyNumber) {
|
||||||
|
result = false;
|
||||||
|
} else if (
|
||||||
|
insuranceCoverageStatus === coverageStatus.VERIFIED &&
|
||||||
|
!(currentDeductible === 0 || currentDeductible > 0)
|
||||||
|
) {
|
||||||
|
result = false; // if coverageStatus is verified there must be a valid deductible also
|
||||||
|
} else {
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -107,6 +119,10 @@ export function hasInsuranceInfo(order, logQueue = null) {
|
||||||
// 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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue