112 lines
4.1 KiB
TypeScript
112 lines
4.1 KiB
TypeScript
import * as CRMTypes from 'graphql/crm.types';
|
||
import { autorun, reaction } from 'mobx';
|
||
import type { ReactionsContext } from 'process/types';
|
||
|
||
export default function leasebackReactions({ store, apolloClient }: ReactionsContext) {
|
||
const { $calculation, $tables } = store;
|
||
/**
|
||
* Дополнить реакцию на изменение поля Салон приобретения selectDealer:
|
||
|
||
если в поле selectDealer указан account, у которого evo_return_leasing_dealer = true, то
|
||
|
||
1) поле selectDealerPerson обнулять и закрывать для редактирования,
|
||
иначе формировать список связанных значений
|
||
|
||
2) в таблице страхования в столбце Плательщик
|
||
в строках ОСАГО и КАСКО указывать "Лизингополучатель" (100 000 000) и закрывать для редактирования ,
|
||
иначе открывать данные поля для редактирования
|
||
|
||
3) ПЛ БУ cbxLeaseObjectUsed = true
|
||
*/
|
||
|
||
reaction(
|
||
() => $calculation.element('selectDealer').getValue(),
|
||
async (dealerId) => {
|
||
if (!dealerId) return;
|
||
|
||
const {
|
||
data: { dealer },
|
||
} = await apolloClient.query({
|
||
query: CRMTypes.GetDealerDocument,
|
||
variables: {
|
||
dealerId,
|
||
},
|
||
});
|
||
|
||
if (dealer?.evo_return_leasing_dealer === true) {
|
||
$calculation.element('selectDealerPerson').block().resetValue();
|
||
$tables.insurance.row('kasko').setValue('insured', 100_000_000).block('insured');
|
||
$calculation.element('cbxLeaseObjectUsed').setValue(true);
|
||
} else {
|
||
$calculation.element('selectDealerPerson').unblock();
|
||
$tables.insurance.row('kasko').resetStatus('insured');
|
||
}
|
||
}
|
||
);
|
||
|
||
// объединили реакцию для прицепа и возвратного лизинга
|
||
reaction(
|
||
() => ({
|
||
dealerId: $calculation.element('selectDealer').getValue(),
|
||
leaseObjectCategory: $calculation.element('selectLeaseObjectCategory').getValue(),
|
||
}),
|
||
async ({ dealerId, leaseObjectCategory }) => {
|
||
const isTrailer = leaseObjectCategory === 100_000_004;
|
||
let returnLeasing = false;
|
||
|
||
if (dealerId) {
|
||
const {
|
||
data: { dealer },
|
||
} = await apolloClient.query({
|
||
query: CRMTypes.GetDealerDocument,
|
||
variables: {
|
||
dealerId,
|
||
},
|
||
});
|
||
returnLeasing = dealer?.evo_return_leasing_dealer === true;
|
||
}
|
||
|
||
if (isTrailer || returnLeasing) {
|
||
$tables.insurance.row('osago').setValue('insured', 100_000_000).block('insured');
|
||
} else {
|
||
$tables.insurance.row('osago').resetStatus('insured');
|
||
}
|
||
}
|
||
);
|
||
|
||
/* eslint-disable max-len */
|
||
/**
|
||
* В валидацию на кнопку Рассчитать внести изменение:
|
||
1) поле selectDealerPerson убрать из списка обязательных для расчета полей
|
||
2) добавить валидацию на поле selectDealerPerson :
|
||
Если в поле selectDealer указан account, у которого evo_return_leasing_dealer = False (или null)
|
||
и поле selectDealerPerson = null, то выводить ошибку и поле selectDealerPerson обводить красной рамкой,
|
||
иначе все ок
|
||
*/
|
||
/* eslint-enable */
|
||
|
||
autorun(async () => {
|
||
const dealerId = $calculation.element('selectDealer').getValue();
|
||
const dealerPersonId = $calculation.element('selectDealerPerson').getValue();
|
||
|
||
let returnLeasing: boolean | null | undefined;
|
||
|
||
if (dealerId) {
|
||
const {
|
||
data: { dealer },
|
||
} = await apolloClient.query({
|
||
query: CRMTypes.GetDealerDocument,
|
||
variables: {
|
||
dealerId,
|
||
},
|
||
});
|
||
returnLeasing = dealer?.evo_return_leasing_dealer;
|
||
}
|
||
|
||
$calculation.element('selectDealerPerson').validate({
|
||
invalid: !!dealerId && !dealerPersonId && !returnLeasing,
|
||
message: 'Не заполнено поле',
|
||
});
|
||
});
|
||
}
|