apps/web: fix get fingap from kp
This commit is contained in:
parent
88fbb616b5
commit
a0e6c4ff2f
@ -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,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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: {
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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({
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user