add getInsuranceCondition function

This commit is contained in:
vchikalkin 2024-07-30 13:29:47 +03:00
parent 3f7798154e
commit 66cc33b899

View File

@ -148,6 +148,95 @@ export async function convertEltKaskoResponse(input: ConvertEltKaskoResponseInpu
error = 'Расчет возможен только через отдел страхования ЛК';
}
const cost =
$calculation.$values.getValue('plPriceRub') -
$calculation.$values.getValue('discountRub') -
$calculation.$values.getValue('importProgramSum') +
$calculation.$values.getValue('addEquipmentPrice');
const selectedRule = await getInsuranceCondition(input, { cost, riskType: 'kasko' });
const insuranceCondition = selectedRule?.evo_id ?? null;
if (selectedRule) {
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 = round((sum / cost) * 100, 2);
if (newSum < rule_evo_discount) {
sum = 0;
requestId = defaultRow.requestId;
skCalcId = defaultRow.skCalcId;
if (selectedRule.evo_message) error = selectedRule.evo_message;
totalFranchise = 0;
}
break;
}
// "скидка за счет КВ"
case 100_000_002: {
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 = (rule_evo_discount / 100) * cost;
requestId = defaultRow.requestId;
skCalcId = defaultRow.skCalcId;
if (selectedRule.evo_message) error = selectedRule.evo_message;
totalFranchise = 0;
break;
}
}
}
return {
...row,
insuranceCondition,
message: error || message,
numCalc: '0',
requestId,
skCalcId,
status: error ? 'error' : null,
sum,
totalFranchise,
};
}
type GetInsuranceConditionParams = {
cost: number;
riskType: 'osago' | 'kasko';
};
async function getInsuranceCondition(
input: ConvertEltKaskoResponseInput,
{ cost, riskType }: GetInsuranceConditionParams
) {
const { context, row } = input;
const { apolloClient, store } = context;
const { $calculation } = store;
const leasingPeriod = $calculation.element('tbxLeasingPeriod').getValue();
const currentDate = getCurrentDateString();
const leaseObjectCategory = $calculation.element('selectLeaseObjectCategory').getValue();
const leaseObjectYear = $calculation.element('tbxLeaseObjectYear').getValue();
const leaseObjectMotorPower = $calculation.element('tbxLeaseObjectMotorPower').getValue();
@ -159,11 +248,6 @@ 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 =
$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();
@ -176,8 +260,6 @@ export async function convertEltKaskoResponse(input: ConvertEltKaskoResponseInpu
}
const insuranceOPF = lead?.evo_inn?.length === 12 ? 100_000_001 : 100_000_000;
const currentDate = getCurrentDateString();
const {
data: { evo_insurance_ruleses },
} = await apolloClient.query({
@ -187,11 +269,18 @@ export async function convertEltKaskoResponse(input: ConvertEltKaskoResponseInpu
},
});
const {
data: { account: insuranceCompany },
} = await apolloClient.query({
query: CRMTypes.GetInsuranceCompanyDocument,
variables: { accountId: row.key },
});
const filteredRules = evo_insurance_ruleses?.filter(
(rule) =>
rule &&
rule.evo_insurer_accountid === insuranceCompany?.accountid &&
rule.evo_risk === 100_000_000 &&
(riskType === 'kasko' ? rule.evo_risk === 100_000_000 : rule.evo_risk === 100_000_003) &&
leaseObjectCategory &&
rule.evo_category?.includes(leaseObjectCategory) &&
rule.evo_min_period !== null &&
@ -258,71 +347,9 @@ export async function convertEltKaskoResponse(input: ConvertEltKaskoResponseInpu
| 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(
return priorities.reduce(
(found, priority) => found || sortedRules.find((rule) => rule?.evo_rules_type === priority),
null as Rule
);
const insuranceCondition = selectedRule?.evo_id ?? null;
if (selectedRule) {
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 = round((sum / cost) * 100, 2);
if (newSum < rule_evo_discount) {
sum = 0;
requestId = defaultRow.requestId;
skCalcId = defaultRow.skCalcId;
if (selectedRule.evo_message) error = selectedRule.evo_message;
totalFranchise = 0;
}
break;
}
// "скидка за счет КВ"
case 100_000_002: {
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 = (rule_evo_discount / 100) * cost;
requestId = defaultRow.requestId;
skCalcId = defaultRow.skCalcId;
if (selectedRule.evo_message) error = selectedRule.evo_message;
totalFranchise = 0;
break;
}
}
}
return {
...row,
insuranceCondition,
message: error || message,
numCalc: '0',
requestId,
skCalcId,
status: error ? 'error' : null,
sum,
totalFranchise,
};
}