diff --git a/src/helpers/page-prerequisites-helper.js b/src/helpers/page-prerequisites-helper.js index 0c0f1226a..3f7d6583f 100644 --- a/src/helpers/page-prerequisites-helper.js +++ b/src/helpers/page-prerequisites-helper.js @@ -1,7 +1,7 @@ import { debugLog } from "@/helpers/debug-log-helper.js"; import { AppointmentTypeStrings } from "@/constants/schedule-constants"; import { coverageStatus } from "@/constants/insurance"; -import store from "@/store"; +import { applicationConfig } from "@/constants/application-config"; export function logPagePrereqsStart(source, preReqResult) { // prettier-ignore @@ -87,19 +87,31 @@ export function hasServiceLocationInfo(order, logQueue = null) { } export function hasInsuranceInfo(order, logQueue = null) { - const isInsurance = order.payment.isInsurance; - const insuranceCoverageStatus = store.getters.payment?.insuranceCoverage?.coverageStatus; - const currentDeductible = store.getters.policy?.currentDeductible; + const isInsurance = order.payment?.isInsurance; + const insuranceCoverageStatus = order.payment?.insuranceCoverage?.coverageStatus; + const currentDeductible = order.policy?.currentDeductible; + const parentAccountNumber = order.payment?.parentAccountNumber; + const policyNumber = order.policy?.policyNumber; let result = false; if (isInsurance !== null) { - if ( - insuranceCoverageStatus === coverageStatus.VERIFIED && - !(currentDeductible === 0 || currentDeductible > 0) - ) { - result = false; // if coverageStatus is verified there must be a valid deductible also + if (isInsurance === false) { + result = true; // Cash selected - no need for policy number or parent account } 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 { debugLog("hasInsuranceInfo:", result, !result); + if (isInsurance === true) { + debugLog("hasInsuranceInfo parentAccountNumber:", parentAccountNumber, !result); + debugLog("hasInsuranceInfo policyNumber:", policyNumber, !result); + } if (insuranceCoverageStatus === coverageStatus.VERIFIED) { debugLog("hasInsuranceInfo coverageStatus:", insuranceCoverageStatus, !result); debugLog("hasInsuranceInfo currentDeductible:", currentDeductible, !result); diff --git a/src/helpers/page-prerequisites-helper.spec.js b/src/helpers/page-prerequisites-helper.spec.js index b4c4e88e3..9aabba829 100644 --- a/src/helpers/page-prerequisites-helper.spec.js +++ b/src/helpers/page-prerequisites-helper.spec.js @@ -1,5 +1,4 @@ import * as pagePrereqsHelper from "@/helpers/page-prerequisites-helper"; -import store from "@/store"; import { AppointmentTypeStrings } from "@/constants/schedule-constants"; import { coverageStatus } from "@/constants/insurance"; @@ -293,25 +292,6 @@ describe("page-prerequisites-helper.js", () => { }); describe("hasInsuranceInfo", () => { - const baseOrder = { - payment: { - isInsurance: false, - }, - }; - - beforeEach(() => { - store.getters = { - payment: { - insuranceCoverage: { - coverageStatus: null, - }, - }, - policy: { - currentDeductible: 100, - }, - }; - }); - test("returns false when isInsurance is null", () => { const order = { payment: { isInsurance: null } }; @@ -320,19 +300,43 @@ describe("page-prerequisites-helper.js", () => { expect(result).toBe(false); }); - test("returns true when isInsurance is false and coverage is not verified", () => { - // Arrange - store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.PENDING; + test("returns true when isInsurance is false (cash selected)", () => { + const order = { + 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); }); test("returns true when isInsurance is true and coverage is verified with valid deductible", () => { - const order = { payment: { isInsurance: true } }; - store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED; - store.getters.policy.currentDeductible = 100; + const order = { + payment: { + isInsurance: true, + insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED }, + parentAccountNumber: 999999, + }, + policy: { policyNumber: "POL123", currentDeductible: 100 }, + }; 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", () => { - const order = { payment: { isInsurance: true } }; - store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED; - store.getters.policy.currentDeductible = 0; + const order = { + payment: { + isInsurance: true, + insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED }, + parentAccountNumber: 999999, + }, + policy: { policyNumber: "POL123", currentDeductible: 0 }, + }; const result = pagePrereqsHelper.hasInsuranceInfo(order); 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", () => { - const order = { payment: { isInsurance: true } }; - store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED; - store.getters.policy.currentDeductible = null; + const order = { + payment: { + isInsurance: true, + insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED }, + parentAccountNumber: 999999, + }, + policy: { policyNumber: "POL123", currentDeductible: null }, + }; 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", () => { - const order = { payment: { isInsurance: true } }; - store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED; - store.getters.policy.currentDeductible = undefined; + const order = { + payment: { + isInsurance: true, + insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED }, + parentAccountNumber: 999999, + }, + policy: { policyNumber: "POL123", currentDeductible: undefined }, + }; 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", () => { - const order = { payment: { isInsurance: true } }; - store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED; - store.getters.policy.currentDeductible = -1; + const order = { + payment: { + isInsurance: true, + insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED }, + parentAccountNumber: 999999, + }, + policy: { policyNumber: "POL123", currentDeductible: -1 }, + }; const result = pagePrereqsHelper.hasInsuranceInfo(order); diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index 89ed21a08..ae593c735 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -261,6 +261,12 @@ import { getAmountDue, getPricingByDayPartWithPrice } from "@/helpers/pricing-he import { getItemsWithoutRecalParts } from "@/helpers/recal-helper"; import { deepClone } from "@/helpers/object-helper"; import { debugLog } from "@/helpers/debug-log-helper"; +import { + flushPagePrereqsLogs, + hasServiceZipInfo, + hasGlassPartsOrRepairInfo, + hasInsuranceInfo, +} from "@/helpers/page-prerequisites-helper.js"; import { getSessionKeyValue, getUserIdValue, @@ -981,76 +987,31 @@ export default { methods: { splitCopyOnCMSPlaceHolder, arePagePrerequisitesValid() { - const paymentInfo = store.getters.payment.isInsurance !== null; - const damageInfo = - store.getters.order.damage.isRepair || - (store.getters.order.lineItems?.glassParts != null && - store.getters.order.lineItems.glassParts.length > 0); - const parentAccountNumberInfo = - 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; + const order = store.getters.order; + const logQueue = []; + + const serviceZip = hasServiceZipInfo(order, logQueue); + const glassPartsOrRepair = hasGlassPartsOrRepairInfo(order, logQueue); + const insuranceInfo = hasInsuranceInfo(order, logQueue); // insurance drops the recycle fee on replace orders so it won't be in supportingItems - const insurancePreReqResult = - parentAccountNumberInfo && - policyNumberInfo && - zipCodeInfo && - paymentInfo && - damageInfo; - const cashPreReqResult = - supportingItemsInfo && zipCodeInfo && paymentInfo && damageInfo; + const supportingItemsInfo = store.getters.lineItems?.supportingItems; + const supportingItemsPreReqs = order.payment?.isInsurance + ? true + : !!supportingItemsInfo; - const outputDebugLog = (preReqResult) => { - // prettier-ignore - debugLog("--- schedule.vue pagePrereqs start ---", null, !preReqResult); - 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 - ); + const preReqResult = serviceZip && insuranceInfo && glassPartsOrRepair && supportingItemsPreReqs; + + logQueue.push(() => { debugLog( "store.getters.lineItems.supportingItems:", - store.getters.lineItems.supportingItems, - !preReqResult + store.getters.lineItems?.supportingItems, + !supportingItemsPreReqs ); - debugLog("--- schedule.vue pagePrereqs end ---", null, !preReqResult); - }; + }); - if (store.getters.payment.isInsurance) { - outputDebugLog(insurancePreReqResult); - return insurancePreReqResult; - } else { - outputDebugLog(cashPreReqResult); - return cashPreReqResult; - } + flushPagePrereqsLogs("schedule.vue", preReqResult, logQueue); + return preReqResult; }, setDataOnLoad(zipCodeData, serviceabilityDetails, mobileFeePart, shopProviderData) {