2024-07-15 11:04:47 +03:00

80 lines
2.3 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-non-null-assertion */
import type { GetQuoteInputData, GetQuoteProcessData } from '../load-kp/types';
import helper from './lib/helper';
import defaultValues from '@/config/default-values';
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';
export async function getKPData({
quote,
values,
ctx,
}: GetQuoteInputData): Promise<GetQuoteProcessData> {
const { apolloClient, queryClient } = ctx;
if (!quote?.evo_fingap_accountid) {
return {
fingap: {
keys: [],
risks: [],
},
};
}
const { getFingapRisks } = helper({ apolloClient, queryClient });
const kpDataPrice = await getKPDataPrice({ ctx, quote, values });
const kpDataPayments = await getKPDataPayments({ ctx, 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 keys: string[] = [];
quote?.evo_product_risks?.forEach((x) => {
if (x?.evo_addproduct_typeid) {
keys.push(x.evo_addproduct_typeid);
}
});
return {
fingap: {
keys,
risks,
},
};
}