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 { 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();
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue