2023-02-03 08:30:24 +03:00

128 lines
4.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* eslint-disable @typescript-eslint/naming-convention */
import { gql } from '@apollo/client';
import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
import type * as CRMTypes from 'graphql/crm.types';
import { autorun, reaction } from 'mobx';
import type { ReactionsContext } from 'process/types';
import { uid } from 'radash';
import { normalizeOptions } from 'tools';
import notification from 'ui/elements/notification';
dayjs.extend(utc);
const NOTIFICATION_KEY = uid(7);
const QUERY_GET_LEASING_WITHOUT_KASKO_OPTIONS = gql`
query GetLeasingWithoutKaskoOptions($currentDate: DateTime) {
evo_addproduct_types(
statecode: 0
evo_product_type: 100000007
evo_datefrom_param: { lte: $currentDate }
evo_dateto_param: { gte: $currentDate }
) {
label: evo_name
value: evo_addproduct_typeid
evo_product_type
evo_min_period
evo_max_period
evo_min_price
evo_max_price
evo_leasingobject_types {
evo_leasingobject_typeid
}
evo_visible_calc
evo_min_first_payment_perc
evo_max_first_payment_perc
evo_models {
evo_modelid
}
}
}
`;
export default function commonReactions({ store, apolloClient, queryClient }: ReactionsContext) {
const { $calculation, $tables } = store;
reaction(
() => $calculation.element('selectLeasingWithoutKasko').getValue(),
(nextValue, prevValue) => {
if (prevValue && !nextValue) {
notification.warning({
key: NOTIFICATION_KEY,
message: 'Внимание',
description: 'Лизинг без КАСКО был сброшен',
});
}
}
);
/* eslint-disable max-len */
/**
* если "Лизинг без КАСКО" (SelectLeasingWithoutKasko) содержит данные,
* то в таблице страхования в строке ФинГАП: Страховая компания insCompany = null и закрыть для редактирования
*/
/* eslint-enable */
reaction(
() => $calculation.element('selectLeasingWithoutKasko').getValue(),
(leasingWithoutKasko) => {
if (leasingWithoutKasko) {
$tables.insurance.row('fingap').resetValue('insuranceCompany').block('insuranceCompany');
} else {
$tables.insurance.row('fingap').unblock('insuranceCompany');
}
}
);
autorun(async () => {
const currentDate = dayjs().utc(false).toISOString();
const {
data: { evo_addproduct_types },
} = await apolloClient.query<
CRMTypes.GetLeasingWithoutKaskoOptionsQuery,
CRMTypes.GetLeasingWithoutKaskoOptionsQueryVariables
>({
query: QUERY_GET_LEASING_WITHOUT_KASKO_OPTIONS,
variables: {
currentDate,
},
});
const {
plPriceRub,
discountRub,
importProgramSum,
leasingPeriod,
addEquipmentPrice,
leaseObjectType,
firstPaymentPerc,
model: modelId,
} = $calculation.$values.values;
const options = evo_addproduct_types?.filter(
(x) =>
x?.evo_max_period &&
x.evo_max_period >= leasingPeriod &&
x?.evo_min_period &&
x.evo_min_period <= leasingPeriod &&
x?.evo_max_price &&
x.evo_max_price >= plPriceRub - discountRub - importProgramSum + addEquipmentPrice &&
x?.evo_min_price &&
x.evo_min_price <= plPriceRub - discountRub - importProgramSum + addEquipmentPrice &&
x.evo_leasingobject_types?.find(
(evo_leasingobject_type) =>
evo_leasingobject_type?.evo_leasingobject_typeid === leaseObjectType
) &&
x.evo_visible_calc &&
x.evo_min_first_payment_perc &&
x.evo_min_first_payment_perc <= firstPaymentPerc &&
x.evo_max_first_payment_perc &&
x.evo_max_first_payment_perc >= firstPaymentPerc &&
!x.evo_models?.map((evo_model) => evo_model?.evo_modelid).includes(modelId)
);
$calculation.element('selectLeasingWithoutKasko').setOptions(normalizeOptions(options));
});
}