From 577cc056953a6d210f4ddb140b4ac23c5e63a0e4 Mon Sep 17 00:00:00 2001 From: brydon1 Date: Wed, 21 Jun 2023 16:14:49 -0400 Subject: [PATCH] Adding deductible setting logic --- src/constants/endorsement-options.js | 9 +++ src/helpers/coverage-statement-helper.js | 37 ++++++++++++ .../coverage-statement/coverage-statement.vue | 57 +++---------------- .../policy-vehicles/policy-vehicles.vue | 33 +++++++++-- src/store/index.js | 34 +++++++---- 5 files changed, 104 insertions(+), 66 deletions(-) create mode 100644 src/constants/endorsement-options.js create mode 100644 src/helpers/coverage-statement-helper.js diff --git a/src/constants/endorsement-options.js b/src/constants/endorsement-options.js new file mode 100644 index 00000000..c343da16 --- /dev/null +++ b/src/constants/endorsement-options.js @@ -0,0 +1,9 @@ +const endorsementOptions = { + EDUCATOR: "Educator", + OEM_APPROVED: "OEM Approved", + FULL_GLASS: "Full Glass Coverage", + PARKING_GUARD: "Parking Guard", + REPAIR_WAIVED: "Repair Waived" +}; + +export { endorsementOptions }; \ No newline at end of file diff --git a/src/helpers/coverage-statement-helper.js b/src/helpers/coverage-statement-helper.js new file mode 100644 index 00000000..187f1ea7 --- /dev/null +++ b/src/helpers/coverage-statement-helper.js @@ -0,0 +1,37 @@ +import { useMainStore } from '@/store'; +import { coverageStatuses } from '@/constants/coverage-statuses'; + +// TODO description +export async function getRegisterClaimResponse() { + try { + const registerClaimResponse = await useMainStore().registerClaim(); + const promiseResultMap = [ + { + resultKey: 'registerClaimResponse', + promise: registerClaimResponse + }, + ]; + + const resultMap = await settleAllPromises(promiseResultMap); + return resultMap.registerClaimResponse; + } + catch(responseError) { + return { + error: { + status: responseError.status + } + } + } +} + +// Deductible/ITAC, No Comp, and Not Verified +// Still need No Comp, ITAC, and Deductible +export function setInsuranceCoverageValues(registerClaimResponse) { + const registerClaimFailed = registerClaimResponse.error; + if (useMainStore().isClaimRegistrationRequired) { + useMainStore().payment.insuranceCoverage.isVerified = !registerClaimFailed; + useMainStore().payment.insuranceCoverage.coverageStatus = registerClaimFailed + ? coverageStatuses.PENDING + : coverageStatuses.VERIFIED; + } +} diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index af77b84d..c785b039 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -58,7 +58,7 @@ import { settleAllPromises } from '@/helpers/layout-helper'; import { getDamageString } from '@/helpers/damage-helper.js'; import { useMainStore } from "@/store"; import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin"; -import { coverageStatuses } from '../../constants/coverage-statuses'; +import { getRegisterClaimResponse, setInsuranceCoverageValues } from '@/helpers/coverage-statement-helper'; export default { name: 'coverage-statement', @@ -127,13 +127,12 @@ export default { next((vm) => { vm.setCmsContent(resultMap.cmsContent); }); - }, - async mounted() { - let registerClaimResponse = null; - if (useMainStore().isClaimRegistrationRequired){ - registerClaimResponse = await this.getRegisterClaimResponse(); - } - this.setInsuranceCoverageValues(registerClaimResponse); + + let registerClaimResponse = null; + if (useMainStore().isClaimRegistrationRequired){ + registerClaimResponse = await getRegisterClaimResponse(); + } + setInsuranceCoverageValues(registerClaimResponse); }, methods: { arePagePrerequisitesValid() { @@ -142,48 +141,6 @@ export default { } return false; }, - - async getRegisterClaimResponse() { - try { - registerClaimResponse = await useMainStore().registerClaim(); - const promiseResultMap = [ - { - resultKey: 'registerClaimResponse', - promise: registerClaimResponse - }, - ]; - - const resultMap = await settleAllPromises(promiseResultMap); - return resultMap.registerClaimResponse; - } - catch(responseError) { - return { - error: { - status: responseError.status - } - } - } - }, - - // TODO wait for confirmation from Jeremy - setInsuranceCoverageValues(registerClaimResponse) { - // null => claim reg not required - // success => verified - // failed => not verified - - const registerClaimFailed = registerClaimResponse.error; - if (useMainStore().isClaimRegistrationRequired) { - useMainStore().payment.insuranceCoverage.isVerified = !registerClaimFailed; - useMainStore().payment.insuranceCoverage.coverageStatus = registerClaimFailed - ? coverageStatuses.PENDING - : coverageStatuses.VERIFIED; // TODO include no comp case as well - } - else { // TODO confirm - useMainStore().payment.insuranceCoverage.isVerified = true; - // What about no comp??? - useMainStore().payment.insuranceCoverage.coverageStatus = coverageStatuses.VERIFIED; - } - }, async forwardButtonAction() { return this.navigateForward(); diff --git a/src/layouts/policy-vehicles/policy-vehicles.vue b/src/layouts/policy-vehicles/policy-vehicles.vue index a85cc583..48d585ea 100644 --- a/src/layouts/policy-vehicles/policy-vehicles.vue +++ b/src/layouts/policy-vehicles/policy-vehicles.vue @@ -41,7 +41,8 @@ import BaseFormMixin from '@/mixins/base-form-mixin.js'; import { issPageValues } from "@/router/router-constants/issPage-values"; import { useMainStore } from '@/store'; import { errorMessages } from "@/constants/error-messages"; -import {vehicleSelectionOptions} from "@/constants/vehicle-selection-options"; +import { vehicleSelectionOptions } from "@/constants/vehicle-selection-options"; +import { endorsementOptions } from '../../constants/endorsement-options'; // DEFINE VALIDATION RULES defineRule("option-required", required(errorMessages.OPTION_REQUIRED)); @@ -83,7 +84,17 @@ export default { this.bailout = true; return this.navigateForward(); } - this.vehicleFromLookup = Object.assign(vehicleLookupResponse.data, { vin: this.selectedVehicleVin }); + + this.vehicleFromLookup = Object.assign(vehicleLookupResponse.data, { + vin: this.selectedVehicleVin, + noCoverage: this.noCoverageForSelectedVehicle, + deductible: this.deductibleForSelectedVehicle, + repairWaived: this.repairWaivedForSelectedVehicle + }); + // Update that verified + // If they go backwards select vehicle => forward => one deductible => back to vehicle selection => forward again => right info + // backwards => vehicle unverified => clear coverage info + // keep this in mind this.mainStore.updateVehicle(this.vehicleFromLookup); } return this.navigateForward(); @@ -145,8 +156,22 @@ export default { }, VehiclesFromApi() { return useMainStore().pageData(issPageValues.POLICY_VEHICLES); - }, - }, + }, + noCoverageForSelectedVehicle() { + const vehicle = this.VehiclesFromApi.find((vehicle) => { return vehicle.vin == this.selectedVehicleVin; }); + return vehicle.coverages.length == 0; + }, + deductibleForSelectedVehicle() { + const vehicle = this.VehiclesFromApi.find((vehicle) => { return vehicle.vin == this.selectedVehicleVin; }); + return vehicle?.coverages?.length == 0 ?? true + ? 0 + : vehicle.coverages[0].deductible; + }, + repairWaivedForSelectedVehicle() { + const vehicle = this.VehiclesFromApi.find((vehicle) => { return vehicle.vin == this.selectedVehicleVin; }); + return vehicle.endorsements?.includes(endorsementOptions.REPAIR_WAIVED) ?? false; + } + }, components: { siteHeader, siteFooter, diff --git a/src/store/index.js b/src/store/index.js index 012803e4..e0e18fdd 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -50,11 +50,13 @@ const getDefaultState = () => { damageState: null, damageCity: null, isDamageGlassOnly: null, - // TODO set these in code - deductable: { - repair: null, // numerical value; how much customer owes on deductable in repair case - replace: null // numerical value; how much customer owes on deductible in replace case - } + noCoverage: null, + deductible: { + // if repair waived, then 0, otherwise same as other + repair: null, // numerical value; how much customer owes on deductible in repair case + replace: null // numerical value; how much customer owes on deductible in replace case, + }, + endorsement: [] // List of endorsement_options }, customer: { address: { @@ -396,11 +398,10 @@ export const useMainStore = defineStore({ }, lossInfo: { dateOfLoss: this.order.policy.dateOfLoss, - // TODO set from store or assume based on user info? location: { - city: "Somersworth", - state: "NH", - country: "US" + city: this.order.policy.damageCity, + state: this.order.policy.damageState, + country: "US" // TODO set from store }, vehicle: { year: this.order.vehicle.year.toString(), @@ -409,7 +410,6 @@ export const useMainStore = defineStore({ vin: this.order.vehicle.vin }, }, - // TODO is damage cause sufficient? damageDescription: this.order.policy.damageCause } }); @@ -665,7 +665,7 @@ export const useMainStore = defineStore({ } }); }, - + // TODO when is this called? setVehicle() { return globalMethods .callHttpClient({ @@ -750,6 +750,7 @@ export const useMainStore = defineStore({ this.order.lineItems.vaps = partsData; }, + // TODO Where all will this be called and could it be an issue? updateVehicle(vehicle) { // Assuming that the method caller pass all the properties. // otherwise need to check for undefined for every property. @@ -765,6 +766,12 @@ export const useMainStore = defineStore({ this.order.vehicle.imageVifNumber = vehicle.imageVifNumber; this.order.vehicle.imageColor = vehicle.imageVifColor; + this.order.policy.noCoverage = vehicle.noCoverage; + this.order.policy.deductible.replace = vehicle.deductible; + this.order.policy.deductible.repair = vehicle?.repairWaived ?? false + ? 0 + : vehicle.deductible; + this.resetSupportingItemsState(); this.resetVapsState(); }, @@ -913,7 +920,7 @@ export const useMainStore = defineStore({ this.applicationUser.pageData[pageData.page] = pageData.data; }, updatePolicyData(welcomePageModel) - { + { // TODO add to this? this.order.policy.policyNumber = welcomePageModel?.policyNumber; this.order.policy.policyZipCode = welcomePageModel?.policyZipCode; this.order.policy.dateOfLoss = welcomePageModel?.dateOfLoss; @@ -923,6 +930,9 @@ export const useMainStore = defineStore({ this.order.policy.isDamageGlassOnly = welcomePageModel?.isDamageGlassOnly; this.order.customer.phoneNumber = welcomePageModel?.phoneNumber; this.order.customer.emailAddress = welcomePageModel?.email; + if (!this.issConfig.isClaimRegistrationRequired){ + this.order.insuranceCoverage.isVerified = true; + } }, updatePolicyHolderDetails(customerQuestions) {