add getInsuranceCondition function
This commit is contained in:
parent
3f7798154e
commit
66cc33b899
@ -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,
|
||||
};
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user