По итогам расчета графика платежей перед выводм результата расчета заложить валидацию

если Пересчете без пересмотра recalcWithRevision = True и если в Предложении selectQuote в поле "КП по итогам КК" = Да

и значение из итогов расчета npvBonusExpensesColumn (3я строка)/ (1 + PreparedValue.SalaryRate) больше значения суммы в полях Сумма бонуса МПЛ за лизинг, руб. quote.evo_leasing_bonus_summ + Сумма бонуса МПЛ за РАТ, руб quote.evo_card_bonus_summ + Сумма бонуса МПЛ за НСИБ, руб. quote.evo_nsib_bonus_summ из Предложения , которое указано в Предложении selectQuote в поле Одобренное КА quote.evo_accept_quoteid, больше 100,

то выводить сообщение "Нельзя увеличивать бонус МПЛ после рассмотрения предложения на КК"
This commit is contained in:
vchikalkin 2024-05-08 14:03:27 +03:00
parent 009c9fb5dd
commit 7797325f8c
5 changed files with 92 additions and 2 deletions

View File

@ -126,6 +126,9 @@ query GetQuote($quoteId: Uuid!) {
evo_fingap_payer
evo_osago_payer
evo_kasko_payer
evo_leasing_bonus_summ
evo_card_bonus_summ
evo_nsib_bonus_summ
}
}

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,5 @@
import { router } from '../../trpc';
import { validateResults } from './lib/post-validation';
import { createRequestData } from './lib/request';
import { transformCalculateResults } from './lib/transform';
import { validate } from './lib/validation';
@ -52,6 +53,20 @@ export const calculateRouter = router({
const calculateResult = await calculate(requestData);
const postValidationResult = await validateResults({
calculateResult,
context: {
apolloClient,
queryClient,
user: ctx.user,
},
input,
});
if (postValidationResult.success === false) {
throw new HttpError(postValidationResult.message, 400);
}
const result = transformCalculateResults({
calculateInput: input,
requestCalculate: requestData,

View File

@ -0,0 +1,57 @@
import type { CalculateInput, Context } from '../types';
import type { ResponseCalculate } from '@/api/core/types';
import * as CRMTypes from '@/graphql/crm.types';
export async function validateResults({
input,
context,
calculateResult,
}: {
calculateResult: ResponseCalculate;
context: Context;
input: CalculateInput;
}) {
const { recalcWithRevision, quote: quoteId } = input.values;
if (recalcWithRevision && quoteId) {
const { apolloClient } = context;
const {
data: { quote },
} = await apolloClient.query({
query: CRMTypes.GetQuoteDocument,
variables: {
quoteId,
},
});
if (quote?.evo_committee_quote && quote.evo_accept_quoteid) {
const { preparedValues } = calculateResult;
const { npvBonusExpensesColumn } = calculateResult.columns;
const {
data: { quote: accept_quote },
} = await apolloClient.query({
query: CRMTypes.GetQuoteDocument,
variables: { quoteId: quote.evo_accept_quoteid },
});
if (
Math.abs(npvBonusExpensesColumn.values.at(3) || 0) / (1 + preparedValues.salaryRate) -
((accept_quote?.evo_leasing_bonus_summ || 0) +
(accept_quote?.evo_card_bonus_summ || 0) +
(accept_quote?.evo_nsib_bonus_summ || 0)) >
100
) {
return {
message: 'Нельзя увеличивать бонус МПЛ после рассмотрения предложения на КК',
success: false,
};
}
}
}
return {
message: '',
success: true,
};
}

View File

@ -1,6 +1,7 @@
/* eslint-disable canonical/sort-keys */
import { protectedProcedure } from '../../procedure';
import { router } from '../../trpc';
import { validateResults } from '../calculate/lib/post-validation';
import { createRequestData } from '../calculate/lib/request';
import { transformCalculateResults } from '../calculate/lib/transform';
import { validate } from '../calculate/lib/validation';
@ -147,6 +148,20 @@ export const quoteRouter = router({
const calculateResult = await calculate(requestData);
const postValidationResult = await validateResults({
calculateResult,
context: {
apolloClient,
queryClient,
user: ctx.user,
},
input,
});
if (postValidationResult.success === false) {
throw new HttpError(postValidationResult.message, 400);
}
const requestCreateKP = compatRequestCreateKP({
domainName: user.domainName,
finGAP: input.fingap,