В массив записей надо добавить признак "metodCalc", который заполняется следующим образом:
если в Контрагенте поле "ID ELT ОСАГО" evo_id_elt_osago содержит данные, то указывается "ELT"
если в Контрагенте поле "ID Наш расчет ОСАГО" evo_osago_id содержит данные, то указывается "CRM"
иначе указывается null
"osago": {
"id": "YUGORIA",
"key": "a48b3d07-7b40-eb11-bae6-00155d088a12",
"message": "",
"name": "ГСК ЮГОРИЯ",
"numCalc": 3890624,
"requestId": "",
"skCalcId": "0",
"status": null,
"sum": 28243.98,
"totalFranchise": 0
"methodCalc": CRM
В момент нажатия кнопки "Расчет ОСАГО по ELT" (отдельную кнопку не делаем, т.к. проверки на расчет ЕЛТ должны и тут действовать) необходимо добавить развилку:
если у записи "metodCalc": ELT, то отправляется запрос в ELT по текущей логике
если у записи "metodCalc": CRM, то ищется запись Типа дополнительных продуктов evo_addproduct_type, у которой:
"Статус" statecode = активная
И "Тип продукта" evo_product_type = ОСАГО 100 000 008
И "Отображать для расчета в ЛК" evo_visible_calc = Да
И "Провайдер услуг" evo_accountid = "key" данной записи
И "Начало действия" evo_datefrom меньше или равно текущей даты
И "Окончание действия" evo_dateto больше или равно текущей даты
И "Категория ТС" evo_category = значению из поля Категория ТС на форме (значение "Не выбрано" на форме должно быть равно "пусто" в поле карточки)
И "Min мощность, л.с." evo_min_power меньше или равна значению из поля Мощность на форме
И "Max мощность, л.с." evo_max_power больше или равна значению из поля Мощность на форме
И "Min количество мест" evo_min_seats_count меньше или равна значению из поля Количество мест на форме
И "Max количество мест" evo_max_seats_count если больше или равна значению из поля Количество мест на форме
И "Min Разрешенная макс.масса, кг" evo_min_mass меньше или равна значению из поля Разрешенная макс.масса на форме
И "Max Разрешенная макс.масса, кг" evo_max_mass больше или равна значению из поля Разрешенная макс.масса на форме
Если найдена одна запись,то в массиве записываются значения:
"numCalc" = значение поля evo_addproduct_type.evo_id ID,
"sum"= evo_addproduct_type.evo_graph_price_withoutnds Стоимость (закладываем в график), без НДС, руб.,
"totalFranchise" = 0
Если не найдена такая запись, то в массиве записываются значения:
"numCalc" = null,
"sum"= 0.00,
"totalFranchise" = 0
Если найдено несколько записей, то берем последнюю по дате создания и по ней записываем в массив значения:
"numCalc" = значение поля evo_addproduct_type.evo_id ID,
"sum"= evo_addproduct_type.evo_graph_price_withoutnds Стоимость (закладываем в график), без НДС, руб.,
"totalFranchise" = 0
69 lines
2.1 KiB
TypeScript
69 lines
2.1 KiB
TypeScript
import type { ProcessContext } from '../../types';
|
|
import type { Row } from '@/Components/Calculation/Form/ELT/types';
|
|
import * as CRMTypes from '@/graphql/crm.types';
|
|
import { defaultRow } from '@/stores/tables/elt/default-values';
|
|
|
|
export default function helper({
|
|
apolloClient,
|
|
store,
|
|
}: Pick<ProcessContext, 'apolloClient' | 'store'>) {
|
|
const { $calculation } = store;
|
|
|
|
return {
|
|
async init() {
|
|
const {
|
|
data: { accounts },
|
|
} = await apolloClient.query({
|
|
query: CRMTypes.GetInsuranceCompaniesDocument,
|
|
});
|
|
|
|
let evo_leasingobject_type: CRMTypes.GetLeaseObjectTypeQuery['evo_leasingobject_type'];
|
|
const leaseObjectTypeId = $calculation.element('selectLeaseObjectType').getValue();
|
|
if (leaseObjectTypeId) {
|
|
const { data } = await apolloClient.query({
|
|
query: CRMTypes.GetLeaseObjectTypeDocument,
|
|
variables: {
|
|
leaseObjectTypeId,
|
|
},
|
|
});
|
|
|
|
({ evo_leasingobject_type } = data);
|
|
}
|
|
|
|
return {
|
|
kasko: (accounts
|
|
?.filter((x) =>
|
|
x?.evo_type_ins_policy?.includes(100_000_000) &&
|
|
evo_leasingobject_type?.evo_id &&
|
|
['6', '9', '10'].includes(evo_leasingobject_type?.evo_id)
|
|
? Boolean(x.evo_id_elt_smr)
|
|
: Boolean(x?.evo_id_elt)
|
|
)
|
|
.map((x) => ({
|
|
...defaultRow,
|
|
id:
|
|
evo_leasingobject_type?.evo_id &&
|
|
['6', '9', '10'].includes(evo_leasingobject_type?.evo_id)
|
|
? x?.evo_id_elt_smr
|
|
: x?.evo_id_elt,
|
|
key: x?.value,
|
|
name: x?.label,
|
|
})) || []) as Row[],
|
|
osago: (accounts
|
|
?.filter(
|
|
(x) =>
|
|
x?.evo_type_ins_policy?.includes(100_000_001) &&
|
|
(x?.evo_id_elt_osago || x.evo_osago_id)
|
|
)
|
|
.map((x) => ({
|
|
...defaultRow,
|
|
id: x?.evo_id_elt_osago || x?.evo_osago_id,
|
|
key: x?.value,
|
|
metodCalc: x?.evo_osago_id ? 'CRM' : 'ELT',
|
|
name: x?.label,
|
|
})) || []) as Row[],
|
|
};
|
|
},
|
|
};
|
|
}
|