105 lines
3.9 KiB
TypeScript
105 lines
3.9 KiB
TypeScript
/* eslint-disable sonarjs/cognitive-complexity */
|
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
import helper from '../fingap/lib/helper';
|
|
import type { GetQuoteInputData, GetQuoteProcessData } from '../load-kp/types';
|
|
import initializeApollo from '@/apollo/client';
|
|
import defaultValues from '@/config/default-values';
|
|
import * as insuranceTable from '@/config/tables/insurance-table';
|
|
import { getKPData as getKPDataFingap } from '@/process/fingap/get-kp-data';
|
|
import { getKPData as getKPDataPayments } from '@/process/payments/get-kp-data';
|
|
import { getKPData as getKPDataPrice } from '@/process/price/get-kp-data';
|
|
import { createCurrencyUtility } from '@/utils/currency';
|
|
import { QueryClient } from '@tanstack/react-query';
|
|
import { sum } from 'radash';
|
|
|
|
const { DEFAULT_FINGAP_ROW, DEFAULT_KASKO_ROW, DEFAULT_OSAGO_ROW } = insuranceTable;
|
|
|
|
export async function getKPData({
|
|
values,
|
|
quote,
|
|
}: GetQuoteInputData): Promise<GetQuoteProcessData> {
|
|
const apolloClient = initializeApollo();
|
|
const queryClient = new QueryClient();
|
|
|
|
const { getFingapRisks } = helper({ apolloClient, queryClient });
|
|
|
|
const kpDataPrice = await getKPDataPrice({ quote, values });
|
|
const kpDataPayments = await getKPDataPayments({ quote, values });
|
|
const kpDataFingap = await getKPDataFingap({ quote, values });
|
|
|
|
const leaseObjectPrice = kpDataPrice.values?.leaseObjectPrice ?? defaultValues.leaseObjectPrice;
|
|
const firstPaymentRub = kpDataPrice.values?.firstPaymentRub ?? defaultValues.firstPaymentRub;
|
|
const supplierCurrency = kpDataPrice.values?.supplierCurrency ?? defaultValues.supplierCurrency;
|
|
const supplierDiscountRub =
|
|
kpDataPrice.values?.supplierDiscountRub ?? defaultValues.supplierDiscountRub;
|
|
const leasingPeriod = kpDataPayments.values?.leasingPeriod ?? defaultValues.leasingPeriod;
|
|
|
|
const { RUB } = createCurrencyUtility({ apolloClient });
|
|
|
|
let plPriceRub = 0;
|
|
if (supplierCurrency && leaseObjectPrice) {
|
|
plPriceRub = await RUB({
|
|
currencyid: supplierCurrency,
|
|
value: leaseObjectPrice,
|
|
});
|
|
}
|
|
|
|
let discountRub = 0;
|
|
if (supplierCurrency && supplierDiscountRub) {
|
|
discountRub = await RUB({
|
|
currencyid: supplierCurrency,
|
|
value: supplierDiscountRub,
|
|
});
|
|
}
|
|
|
|
const risks = await getFingapRisks(
|
|
{
|
|
discountRub,
|
|
firstPaymentRub,
|
|
leasingPeriod,
|
|
plPriceRub,
|
|
},
|
|
{ fingap: { insuranceCompany: quote?.evo_fingap_accountid ?? null } },
|
|
{ values: kpDataPayments.payments?.values ?? [] }
|
|
);
|
|
|
|
const fingapInsCost = sum(
|
|
risks.filter((x) => kpDataFingap.fingap?.keys.includes(x.key)),
|
|
(risk) => risk.premium
|
|
);
|
|
|
|
return {
|
|
insurance: {
|
|
values: {
|
|
fingap: Object.assign(DEFAULT_FINGAP_ROW, {
|
|
insCost: fingapInsCost ?? DEFAULT_FINGAP_ROW.insCost,
|
|
insTerm: quote?.evo_fingap_period,
|
|
insuranceCompany: quote?.evo_fingap_accountid,
|
|
insured: quote?.evo_fingap_payer,
|
|
}),
|
|
kasko: Object.assign(DEFAULT_KASKO_ROW, {
|
|
insCost: quote?.evo_kasko_price ?? DEFAULT_KASKO_ROW.insCost,
|
|
insTerm: quote?.evo_insurance_period,
|
|
insuranceCompany: quote?.evo_kasko_accountid,
|
|
insured: quote?.evo_kasko_payer,
|
|
}),
|
|
osago: Object.assign(DEFAULT_OSAGO_ROW, {
|
|
insCost: quote?.evo_osago_price ?? DEFAULT_OSAGO_ROW.insCost,
|
|
insTerm: quote?.evo_insurance_period,
|
|
insuranceCompany: quote?.evo_osago_accountid,
|
|
insured: quote?.evo_osago_payer,
|
|
}),
|
|
},
|
|
},
|
|
values: {
|
|
GPSBrand: quote?.evo_gps_brandid,
|
|
GPSModel: quote?.evo_gps_modelid,
|
|
insAgeDrivers: quote?.evo_age_drivers ?? defaultValues.insAgeDrivers,
|
|
insDecentral: quote?.evo_insurance_decentral ?? defaultValues.insDecentral,
|
|
insExpDrivers: quote?.evo_exp_drivers ?? defaultValues.insExpDrivers,
|
|
insFranchise: quote?.evo_franchise ?? defaultValues.insFranchise,
|
|
insUnlimitDrivers: quote?.evo_unlimit_drivers ?? defaultValues.insUnlimitDrivers,
|
|
},
|
|
};
|
|
}
|