45 lines
2.3 KiB
TypeScript
45 lines
2.3 KiB
TypeScript
/* eslint-disable @typescript-eslint/naming-convention */
|
||
import * as CRMTypes from '@/graphql/crm.types';
|
||
import type { ReactionsContext } from '@/process/types';
|
||
import { reaction } from 'mobx';
|
||
|
||
export default function validationReactions({ store, apolloClient }: ReactionsContext) {
|
||
const { $calculation } = store;
|
||
/**
|
||
* На изменение поля Процет убывания платежей tbxParmentsDecreasePercent необходимо заложить проверку:
|
||
* Если значение поля меньше значения в поле "Минимальный % убывания платежей" evo_min_decreasing_perc из записи,
|
||
* указанной в поле ТарифselectTarif , то поле Процет убывания платежей tbxParmentsDecreasePercent должно обводиться красной рамкой
|
||
* и выводиться сообщение "Процент убывания не может быть меньше минимального значения по данному тарифу
|
||
* - <указывается значение из поля "Минимальный % убывания платежей">, иначе красная рамка снимается.
|
||
* При красной рамке в данном поле нельзя осуществить расчет графика.
|
||
*/
|
||
reaction(
|
||
() => ({
|
||
parmentsDecreasePercent: $calculation.element('tbxParmentsDecreasePercent').getValue(),
|
||
tarifId: $calculation.element('selectTarif').getValue(),
|
||
}),
|
||
async ({ parmentsDecreasePercent, tarifId }) => {
|
||
let evo_tarif: CRMTypes.GetTarifQuery['evo_tarif'] = null;
|
||
|
||
if (tarifId) {
|
||
const { data } = await apolloClient.query({
|
||
query: CRMTypes.GetTarifDocument,
|
||
variables: {
|
||
tarifId,
|
||
},
|
||
});
|
||
|
||
({ evo_tarif } = data);
|
||
}
|
||
|
||
$calculation.element('tbxParmentsDecreasePercent').validate({
|
||
invalid: Boolean(
|
||
evo_tarif?.evo_min_decreasing_perc &&
|
||
parmentsDecreasePercent < evo_tarif?.evo_min_decreasing_perc
|
||
),
|
||
message: `Процент убывания не может быть меньше минимального значения по данному тарифу - ${evo_tarif?.evo_min_decreasing_perc}`,
|
||
});
|
||
}
|
||
);
|
||
}
|