diff --git a/apps/web/process/supplier-agent/lib/create-reactions.ts b/apps/web/process/supplier-agent/lib/create-reactions.ts index a41bd85..ad72e5e 100644 --- a/apps/web/process/supplier-agent/lib/create-reactions.ts +++ b/apps/web/process/supplier-agent/lib/create-reactions.ts @@ -4,7 +4,7 @@ import { gql } from '@apollo/client'; import dayjs from 'dayjs'; import utc from 'dayjs/plugin/utc'; import type * as CRMTypes from 'graphql/crm.types'; -import { reaction } from 'mobx'; +import { autorun, reaction } from 'mobx'; import type RootStore from 'stores/root'; import ValidationHelper from 'stores/validation/helper'; import { normalizeOptions } from 'tools/entity'; @@ -230,18 +230,38 @@ export function validateAgentRewardSumm( validationHelper.add(removeError); }); } - - $calculation - .element(rewardSummField) - .validate({ - invalid: - evo_reward_condition?.evo_agency_agreementidData?.evo_required_reward === true && - rewardSumm === 0, - message: 'Согласно агентскому договору обязательна выплата АВ. Заложите АВ в расчет', - }) - .err((removeError) => { - validationHelper.add(removeError); - }); } ); + + autorun(() => { + const rewardSumm = $calculation.element(rewardSummField).getValue(); + const rewardConditionOptions = $calculation.$options.getOptions(rewardConditionField); + + const conditionIds = rewardConditionOptions.map((x) => x.value); + const requests = conditionIds.map(async (conditionId) => { + const { + data: { evo_reward_condition }, + } = await apolloClient.query< + CRMTypes.GetRewardConditionQuery, + CRMTypes.GetRewardConditionQueryVariables + >({ + query: QUERY_GET_REWARD_CONDITION, + variables: { + conditionId, + }, + }); + + return evo_reward_condition; + }); + + Promise.all(requests).then((results) => { + const required_reward = results.some( + (x) => x?.evo_agency_agreementidData?.evo_required_reward === true + ); + $calculation.element(rewardSummField).validate({ + invalid: rewardSumm === 0 && required_reward, + message: 'Согласно агентскому договору обязательна выплата АВ. Заложите АВ в расчет', + }); + }); + }); } diff --git a/apps/web/stores/calculation/options/types.ts b/apps/web/stores/calculation/options/types.ts index c5ffdde..130f1a9 100644 --- a/apps/web/stores/calculation/options/types.ts +++ b/apps/web/stores/calculation/options/types.ts @@ -2,5 +2,5 @@ import type { Elements, ElementsTypes } from 'Components/Calculation/config/map/ import type { BaseOption } from 'ui/elements/types'; export type CalculationOptions = { - [ElementName in Elements]: BaseOption[]; + [ElementName in Elements]: BaseOption>[]; };