From 5e6b17f9c12d372ff6adbb591a2d51e94d60e30c Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Wed, 24 Jul 2024 18:59:39 +0300 Subject: [PATCH] fixes --- apps/web/process/elt/lib/response.ts | 54 ++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/apps/web/process/elt/lib/response.ts b/apps/web/process/elt/lib/response.ts index ccb0e6c..f23dd95 100644 --- a/apps/web/process/elt/lib/response.ts +++ b/apps/web/process/elt/lib/response.ts @@ -9,6 +9,7 @@ import type { ProcessContext } from '@/process/types'; import { defaultRow } from '@/stores/tables/elt/default-values'; import dayjs from 'dayjs'; import { sort } from 'radash'; +import { round } from 'tools'; export function convertEltOsagoResponse(response: ELT.ResponseEltOsago, row: Row): Row { const { message, numCalc, premiumSum = 0, skCalcId } = response; @@ -146,15 +147,7 @@ export async function convertEltKaskoResponse(input: ConvertEltKaskoResponseInpu error = 'Расчет возможен только через отдел страхования ЛК'; } - const { - data: { evo_insurance_ruleses }, - } = await apolloClient.query({ - query: CRMTypes.GetEltInsuranceRulesDocument, - }); - const leaseObjectCategory = $calculation.element('selectLeaseObjectCategory').getValue(); - const leaseObjectPrice = $calculation.element('tbxLeaseObjectPrice').getValue(); - const supplierDiscountRub = $calculation.element('tbxSupplierDiscountRub').getValue(); const leaseObjectYear = $calculation.element('tbxLeaseObjectYear').getValue(); const leaseObjectMotorPower = $calculation.element('tbxLeaseObjectMotorPower').getValue(); const engineType = $calculation.element('selectEngineType').getValue(); @@ -165,7 +158,11 @@ export async function convertEltKaskoResponse(input: ConvertEltKaskoResponseInpu const legalClientRegion = $calculation.element('selectLegalClientRegion').getValue(); const dealerPerson = $calculation.element('selectDealerPerson').getValue(); const cbxLeaseObjectUsed = $calculation.element('cbxLeaseObjectUsed').getValue(); - const cost = leaseObjectPrice - supplierDiscountRub; + const cost = + $calculation.$values.getValue('plPriceRub') - + $calculation.$values.getValue('discountRub') - + $calculation.$values.getValue('importProgramSum') + + $calculation.$values.getValue('addEquipmentPrice'); let lead: CRMTypes.GetLeadQuery['lead'] = null; const leadid = $calculation.element('selectLead').getValue(); @@ -178,6 +175,12 @@ export async function convertEltKaskoResponse(input: ConvertEltKaskoResponseInpu } const insuranceOPF = lead?.evo_inn?.length === 12 ? 100_000_001 : 100_000_000; + const { + data: { evo_insurance_ruleses }, + } = await apolloClient.query({ + query: CRMTypes.GetEltInsuranceRulesDocument, + }); + const filteredRules = evo_insurance_ruleses?.filter( (rule) => rule && @@ -244,15 +247,34 @@ export async function convertEltKaskoResponse(input: ConvertEltKaskoResponseInpu const sortedRules = filteredRules ? sort(filteredRules, (x) => dayjs(x?.evo_datefrom).date(), true) : []; - const selectedRule = sortedRules.find((rule) => rule?.evo_rules_type !== 100_000_000); + + type Rule = + | NonNullable[number] + | undefined; + const priorities = [100_000_000, 100_000_003, 100_000_001, 100_000_002]; + const selectedRule = priorities.reduce( + (found, priority) => found || sortedRules.find((rule) => rule?.evo_rules_type === priority), + null as Rule + ); if (selectedRule) { - const discount = selectedRule.evo_discount ?? 0; + const rule_evo_discount = selectedRule.evo_discount ?? 0; + switch (selectedRule.evo_rules_type) { + // "не выводить результат расчета" + case 100_000_000: { + sum = 0; + requestId = defaultRow.requestId; + skCalcId = defaultRow.skCalcId; + if (selectedRule.evo_message) error = selectedRule.evo_message; + totalFranchise = 0; + break; + } + // "проверка на мин.тариф" case 100_000_001: { - const newSum = (sum / cost) * 100; - if (newSum < discount) { + const newSum = round((sum / cost) * 100, 2); + if (newSum < rule_evo_discount) { sum = 0; requestId = defaultRow.requestId; skCalcId = defaultRow.skCalcId; @@ -261,18 +283,20 @@ export async function convertEltKaskoResponse(input: ConvertEltKaskoResponseInpu } break; } + // "скидка за счет КВ" case 100_000_002: { - sum = (((sum / cost) * 100 - discount) / 100) * cost; + sum = (((sum / cost) * 100 - rule_evo_discount) / 100) * cost; requestId = defaultRow.requestId; skCalcId = defaultRow.skCalcId; if (selectedRule.evo_message) error = selectedRule.evo_message; totalFranchise = 0; break; } + // "акционный тариф" case 100_000_003: { - sum = (discount / 100) * cost; + sum = (rule_evo_discount / 100) * cost; requestId = defaultRow.requestId; skCalcId = defaultRow.skCalcId; if (selectedRule.evo_message) error = selectedRule.evo_message;