diff --git a/apps/web/process/fingap/get-kp-data.ts b/apps/web/process/fingap/get-kp-data.ts index 1b2ab8d..9b47e8a 100644 --- a/apps/web/process/fingap/get-kp-data.ts +++ b/apps/web/process/fingap/get-kp-data.ts @@ -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 { + 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 { 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 $process.has('Calculate'), + () => $process.has('Calculate') || $process.has('LoadKP'), () => { const finGAPInsuranceCompany = $tables.insurance.row('fingap').getValue('insuranceCompany'); const paymentsValues = $tables.payments.getValues; diff --git a/apps/web/process/insurance/get-kp-data.ts b/apps/web/process/insurance/get-kp-data.ts index 73faffc..059dbce 100644 --- a/apps/web/process/insurance/get-kp-data.ts +++ b/apps/web/process/insurance/get-kp-data.ts @@ -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 { - 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: { diff --git a/apps/web/process/load-kp/reactions.ts b/apps/web/process/load-kp/reactions.ts index c0ea19a..d31370a 100644 --- a/apps/web/process/load-kp/reactions.ts +++ b/apps/web/process/load-kp/reactions.ts @@ -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); diff --git a/apps/web/server/routers/quote/index.ts b/apps/web/server/routers/quote/index.ts index 07711e1..247642b 100644 --- a/apps/web/server/routers/quote/index.ts +++ b/apps/web/server/routers/quote/index.ts @@ -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(); diff --git a/apps/web/server/routers/quote/types.ts b/apps/web/server/routers/quote/types.ts index 885b30c..a9f5fae 100644 --- a/apps/web/server/routers/quote/types.ts +++ b/apps/web/server/routers/quote/types.ts @@ -28,6 +28,7 @@ export type GetQuoteInputData = z.infer & { const FinGAPSchema = z.object({ keys: z.array(RiskSchema.shape.key), + risks: RiskSchema.array(), }); const InsuranceSchema = z.object({