This commit is contained in:
vchikalkin 2024-07-24 18:59:39 +03:00
parent ce099a73e5
commit 5e6b17f9c1

View File

@ -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<CRMTypes.GetEltInsuranceRulesQuery['evo_insurance_ruleses']>[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;