apps/web: fix get fingap from kp

This commit is contained in:
vchikalkin 2024-03-24 11:43:48 +03:00
parent 88fbb616b5
commit a0e6c4ff2f
6 changed files with 89 additions and 63 deletions

View File

@ -1,7 +1,70 @@
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import type { GetQuoteInputData, GetQuoteProcessData } from '../load-kp/types';
import helper from './lib/helper';
import initializeApollo from '@/apollo/client';
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';
import { QueryClient } from '@tanstack/react-query';
export async function getKPData({
quote,
values,
}: GetQuoteInputData): Promise<GetQuoteProcessData> {
if (!quote?.evo_fingap_accountid) {
return {
fingap: {
keys: [],
risks: [],
},
};
}
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 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 ?? [] }
);
export async function getKPData({ quote }: GetQuoteInputData): Promise<GetQuoteProcessData> {
const keys: string[] = [];
quote?.evo_product_risks?.forEach((x) => {
if (x?.evo_addproduct_typeid) {
@ -12,6 +75,7 @@ export async function getKPData({ quote }: GetQuoteInputData): Promise<GetQuoteP
return {
fingap: {
keys,
risks,
},
};
}

View File

@ -80,7 +80,7 @@ export default function reactions({ store, apolloClient, queryClient }: ProcessC
// Заполнение таблицы рисков ФинГАП + Запрос расчета финГАП в мозжечок
disposableReaction(
() => $process.has('Calculate'),
() => $process.has('Calculate') || $process.has('LoadKP'),
() => {
const finGAPInsuranceCompany = $tables.insurance.row('fingap').getValue('insuranceCompany');
const paymentsValues = $tables.payments.getValues;

View File

@ -1,73 +1,29 @@
/* 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 {
DEFAULT_FINGAP_ROW,
DEFAULT_KASKO_ROW,
DEFAULT_OSAGO_ROW,
} 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 risks = kpDataFingap.fingap?.risks;
const { RUB } = createCurrencyUtility({ apolloClient });
let plPriceRub = 0;
if (supplierCurrency && leaseObjectPrice) {
plPriceRub = await RUB({
currencyid: supplierCurrency,
value: leaseObjectPrice,
});
let fingapInsCost = 0;
if (risks?.length) {
fingapInsCost = sum(
risks.filter((x) => kpDataFingap.fingap?.keys.includes(x.key)),
(risk) => risk.premium
);
}
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: {

View File

@ -72,7 +72,10 @@ export function common({ store, trpcClient, apolloClient }: ProcessContext) {
$tables.insurance.row('fingap').setValues(insurance.values.fingap);
}
if (fingap) $tables.fingap.setSelectedKeys(fingap.keys);
if (fingap) {
$tables.fingap.setRisks(fingap.risks);
$tables.fingap.setSelectedKeys(fingap.keys);
}
if (eltInitialValues) {
$tables.elt.kasko.setRows(eltInitialValues.kasko);

View File

@ -17,7 +17,11 @@ import type { RequestCreateKP } from '@/api/crm/types';
import type { User } from '@/api/user/types';
import initializeApollo from '@/apollo/client';
import defaultValues from '@/config/default-values';
import * as insuranceTable from '@/config/tables/insurance-table';
import {
DEFAULT_FINGAP_ROW,
DEFAULT_KASKO_ROW,
DEFAULT_OSAGO_ROW,
} from '@/config/tables/insurance-table';
import getUrls from '@/config/urls';
import * as CRMTypes from '@/graphql/crm.types';
import * as addProduct from '@/process/add-product';
@ -38,8 +42,6 @@ import { HttpError } from '@/utils/error';
import { createTRPCError } from '@/utils/trpc';
import { QueryClient } from '@tanstack/react-query';
const { DEFAULT_FINGAP_ROW, DEFAULT_KASKO_ROW, DEFAULT_OSAGO_ROW } = insuranceTable;
const defaultInsurance = {
values: {
fingap: DEFAULT_FINGAP_ROW,
@ -48,7 +50,7 @@ const defaultInsurance = {
},
};
const defaultFingap = { keys: [] };
const defaultFingap = { keys: [], risks: [] };
const defaultPayments = { values: [], sums: [] };
const { URL_CRM_DOWNLOADKP } = getUrls();

View File

@ -28,6 +28,7 @@ export type GetQuoteInputData = z.infer<typeof GetQuoteInputDataSchema> & {
const FinGAPSchema = z.object({
keys: z.array(RiskSchema.shape.key),
risks: RiskSchema.array(),
});
const InsuranceSchema = z.object({