Adding deductible setting logic
This commit is contained in:
parent
b16fe6656e
commit
577cc05695
5 changed files with 104 additions and 66 deletions
9
src/constants/endorsement-options.js
Normal file
9
src/constants/endorsement-options.js
Normal file
|
|
@ -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 };
|
||||||
37
src/helpers/coverage-statement-helper.js
Normal file
37
src/helpers/coverage-statement-helper.js
Normal file
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -58,7 +58,7 @@ import { settleAllPromises } from '@/helpers/layout-helper';
|
||||||
import { getDamageString } from '@/helpers/damage-helper.js';
|
import { getDamageString } from '@/helpers/damage-helper.js';
|
||||||
import { useMainStore } from "@/store";
|
import { useMainStore } from "@/store";
|
||||||
import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin";
|
import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin";
|
||||||
import { coverageStatuses } from '../../constants/coverage-statuses';
|
import { getRegisterClaimResponse, setInsuranceCoverageValues } from '@/helpers/coverage-statement-helper';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'coverage-statement',
|
name: 'coverage-statement',
|
||||||
|
|
@ -127,13 +127,12 @@ export default {
|
||||||
next((vm) => {
|
next((vm) => {
|
||||||
vm.setCmsContent(resultMap.cmsContent);
|
vm.setCmsContent(resultMap.cmsContent);
|
||||||
});
|
});
|
||||||
},
|
|
||||||
async mounted() {
|
let registerClaimResponse = null;
|
||||||
let registerClaimResponse = null;
|
if (useMainStore().isClaimRegistrationRequired){
|
||||||
if (useMainStore().isClaimRegistrationRequired){
|
registerClaimResponse = await getRegisterClaimResponse();
|
||||||
registerClaimResponse = await this.getRegisterClaimResponse();
|
}
|
||||||
}
|
setInsuranceCoverageValues(registerClaimResponse);
|
||||||
this.setInsuranceCoverageValues(registerClaimResponse);
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
arePagePrerequisitesValid() {
|
arePagePrerequisitesValid() {
|
||||||
|
|
@ -142,48 +141,6 @@ export default {
|
||||||
}
|
}
|
||||||
return false;
|
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() {
|
async forwardButtonAction() {
|
||||||
return this.navigateForward();
|
return this.navigateForward();
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,8 @@ import BaseFormMixin from '@/mixins/base-form-mixin.js';
|
||||||
import { issPageValues } from "@/router/router-constants/issPage-values";
|
import { issPageValues } from "@/router/router-constants/issPage-values";
|
||||||
import { useMainStore } from '@/store';
|
import { useMainStore } from '@/store';
|
||||||
import { errorMessages } from "@/constants/error-messages";
|
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
|
// DEFINE VALIDATION RULES
|
||||||
defineRule("option-required", required(errorMessages.OPTION_REQUIRED));
|
defineRule("option-required", required(errorMessages.OPTION_REQUIRED));
|
||||||
|
|
@ -83,7 +84,17 @@ export default {
|
||||||
this.bailout = true;
|
this.bailout = true;
|
||||||
return this.navigateForward();
|
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);
|
this.mainStore.updateVehicle(this.vehicleFromLookup);
|
||||||
}
|
}
|
||||||
return this.navigateForward();
|
return this.navigateForward();
|
||||||
|
|
@ -145,8 +156,22 @@ export default {
|
||||||
},
|
},
|
||||||
VehiclesFromApi() {
|
VehiclesFromApi() {
|
||||||
return useMainStore().pageData(issPageValues.POLICY_VEHICLES);
|
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: {
|
components: {
|
||||||
siteHeader,
|
siteHeader,
|
||||||
siteFooter,
|
siteFooter,
|
||||||
|
|
|
||||||
|
|
@ -50,11 +50,13 @@ const getDefaultState = () => {
|
||||||
damageState: null,
|
damageState: null,
|
||||||
damageCity: null,
|
damageCity: null,
|
||||||
isDamageGlassOnly: null,
|
isDamageGlassOnly: null,
|
||||||
// TODO set these in code
|
noCoverage: null,
|
||||||
deductable: {
|
deductible: {
|
||||||
repair: null, // numerical value; how much customer owes on deductable in repair case
|
// if repair waived, then 0, otherwise same as other
|
||||||
replace: null // numerical value; how much customer owes on deductible in replace case
|
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: {
|
customer: {
|
||||||
address: {
|
address: {
|
||||||
|
|
@ -396,11 +398,10 @@ export const useMainStore = defineStore({
|
||||||
},
|
},
|
||||||
lossInfo: {
|
lossInfo: {
|
||||||
dateOfLoss: this.order.policy.dateOfLoss,
|
dateOfLoss: this.order.policy.dateOfLoss,
|
||||||
// TODO set from store or assume based on user info?
|
|
||||||
location: {
|
location: {
|
||||||
city: "Somersworth",
|
city: this.order.policy.damageCity,
|
||||||
state: "NH",
|
state: this.order.policy.damageState,
|
||||||
country: "US"
|
country: "US" // TODO set from store
|
||||||
},
|
},
|
||||||
vehicle: {
|
vehicle: {
|
||||||
year: this.order.vehicle.year.toString(),
|
year: this.order.vehicle.year.toString(),
|
||||||
|
|
@ -409,7 +410,6 @@ export const useMainStore = defineStore({
|
||||||
vin: this.order.vehicle.vin
|
vin: this.order.vehicle.vin
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// TODO is damage cause sufficient?
|
|
||||||
damageDescription: this.order.policy.damageCause
|
damageDescription: this.order.policy.damageCause
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -665,7 +665,7 @@ export const useMainStore = defineStore({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
// TODO when is this called?
|
||||||
setVehicle() {
|
setVehicle() {
|
||||||
return globalMethods
|
return globalMethods
|
||||||
.callHttpClient({
|
.callHttpClient({
|
||||||
|
|
@ -750,6 +750,7 @@ export const useMainStore = defineStore({
|
||||||
this.order.lineItems.vaps = partsData;
|
this.order.lineItems.vaps = partsData;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// TODO Where all will this be called and could it be an issue?
|
||||||
updateVehicle(vehicle) {
|
updateVehicle(vehicle) {
|
||||||
// Assuming that the method caller pass all the properties.
|
// Assuming that the method caller pass all the properties.
|
||||||
// otherwise need to check for undefined for every property.
|
// 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.imageVifNumber = vehicle.imageVifNumber;
|
||||||
this.order.vehicle.imageColor = vehicle.imageVifColor;
|
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.resetSupportingItemsState();
|
||||||
this.resetVapsState();
|
this.resetVapsState();
|
||||||
},
|
},
|
||||||
|
|
@ -913,7 +920,7 @@ export const useMainStore = defineStore({
|
||||||
this.applicationUser.pageData[pageData.page] = pageData.data;
|
this.applicationUser.pageData[pageData.page] = pageData.data;
|
||||||
},
|
},
|
||||||
updatePolicyData(welcomePageModel)
|
updatePolicyData(welcomePageModel)
|
||||||
{
|
{ // TODO add to this?
|
||||||
this.order.policy.policyNumber = welcomePageModel?.policyNumber;
|
this.order.policy.policyNumber = welcomePageModel?.policyNumber;
|
||||||
this.order.policy.policyZipCode = welcomePageModel?.policyZipCode;
|
this.order.policy.policyZipCode = welcomePageModel?.policyZipCode;
|
||||||
this.order.policy.dateOfLoss = welcomePageModel?.dateOfLoss;
|
this.order.policy.dateOfLoss = welcomePageModel?.dateOfLoss;
|
||||||
|
|
@ -923,6 +930,9 @@ export const useMainStore = defineStore({
|
||||||
this.order.policy.isDamageGlassOnly = welcomePageModel?.isDamageGlassOnly;
|
this.order.policy.isDamageGlassOnly = welcomePageModel?.isDamageGlassOnly;
|
||||||
this.order.customer.phoneNumber = welcomePageModel?.phoneNumber;
|
this.order.customer.phoneNumber = welcomePageModel?.phoneNumber;
|
||||||
this.order.customer.emailAddress = welcomePageModel?.email;
|
this.order.customer.emailAddress = welcomePageModel?.email;
|
||||||
|
if (!this.issConfig.isClaimRegistrationRequired){
|
||||||
|
this.order.insuranceCoverage.isVerified = true;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
updatePolicyHolderDetails(customerQuestions)
|
updatePolicyHolderDetails(customerQuestions)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue