217 lines
6.1 KiB
TypeScript
217 lines
6.1 KiB
TypeScript
/* eslint-disable @typescript-eslint/naming-convention */
|
|
import type { ApolloClient } from '@apollo/client';
|
|
import { gql } from '@apollo/client';
|
|
import type * as Values from 'Components/Calculation/config/map/values';
|
|
import dayjs from 'dayjs';
|
|
import utc from 'dayjs/plugin/utc';
|
|
import type * as CRMTypes from 'graphql/crm.types';
|
|
import { reaction } from 'mobx';
|
|
import type RootStore from 'stores/root';
|
|
import ValidationHelper from 'stores/validation/helper';
|
|
import { normalizeOptions } from 'tools/entity';
|
|
import { makeDisposable } from 'tools/mobx';
|
|
|
|
dayjs.extend(utc);
|
|
|
|
const QUERY_GET_REWARD_CONDITIONS = gql`
|
|
query GetRewardConditions($agentid: Uuid!, $currentDate: DateTime) {
|
|
evo_reward_conditions(
|
|
evo_agent_accountid: $agentid
|
|
evo_datefrom_param: { lte: $currentDate }
|
|
evo_dateto_param: { gte: $currentDate }
|
|
statecode: 0
|
|
evo_agency_agreementid_param: { has: true }
|
|
) {
|
|
label: evo_name
|
|
value: evo_reward_conditionid
|
|
evo_reward_summ
|
|
}
|
|
}
|
|
`;
|
|
|
|
export function fillAgentRewardReaction(
|
|
store: RootStore,
|
|
apolloClient: ApolloClient<object>,
|
|
agentParams: {
|
|
agentField: Values.Elements;
|
|
rewardConditionField: Values.Elements;
|
|
}
|
|
) {
|
|
const { $calculation, $process } = store;
|
|
const { agentField, rewardConditionField } = agentParams;
|
|
|
|
reaction(
|
|
() => $calculation.element(agentField).getValue(),
|
|
async (agentId) => {
|
|
if (!agentId) {
|
|
$calculation.element(rewardConditionField).reset();
|
|
|
|
return;
|
|
}
|
|
const {
|
|
data: { evo_reward_conditions },
|
|
} = await apolloClient.query<
|
|
CRMTypes.GetRewardConditionsQuery,
|
|
CRMTypes.GetRewardConditionsQueryVariables
|
|
>({
|
|
query: QUERY_GET_REWARD_CONDITIONS,
|
|
variables: {
|
|
agentid: agentId,
|
|
currentDate: dayjs().toISOString(),
|
|
},
|
|
});
|
|
|
|
if (evo_reward_conditions?.length) {
|
|
$calculation
|
|
.element(rewardConditionField)
|
|
.setOptions(normalizeOptions(evo_reward_conditions));
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
const QUERY_GET_REWARD_SUMM = gql`
|
|
query GetRewardSumm($conditionId: Uuid!) {
|
|
evo_reward_condition(evo_reward_conditionid: $conditionId) {
|
|
evo_reward_summ
|
|
}
|
|
}
|
|
`;
|
|
|
|
export function fillAgentRewardSummReaction(
|
|
store: RootStore,
|
|
apolloClient: ApolloClient<object>,
|
|
agentParams: {
|
|
rewardConditionField: Values.Elements;
|
|
rewardSummField: Values.Elements;
|
|
}
|
|
) {
|
|
const { $calculation, $process } = store;
|
|
const { rewardConditionField, rewardSummField } = agentParams;
|
|
|
|
makeDisposable(
|
|
() =>
|
|
reaction(
|
|
() => $calculation.element(rewardConditionField).getValue(),
|
|
async (rewardConditionId) => {
|
|
if (!rewardConditionId) {
|
|
$calculation.element(rewardSummField).reset();
|
|
|
|
return;
|
|
}
|
|
|
|
const {
|
|
data: { evo_reward_condition },
|
|
} = await apolloClient.query<
|
|
CRMTypes.GetRewardSummQuery,
|
|
CRMTypes.GetRewardSummQueryVariables
|
|
>({
|
|
query: QUERY_GET_REWARD_SUMM,
|
|
variables: {
|
|
conditionId: rewardConditionId,
|
|
},
|
|
});
|
|
|
|
$calculation.element(rewardSummField).setValue(evo_reward_condition?.evo_reward_summ);
|
|
}
|
|
),
|
|
() => $process.has('LoadKP')
|
|
);
|
|
|
|
reaction(
|
|
() => $calculation.element(rewardConditionField).getValue(),
|
|
(rewardConditionId) => {
|
|
if (!rewardConditionId) {
|
|
$calculation.element(rewardSummField).block();
|
|
} else {
|
|
$calculation.element(rewardSummField).unblock();
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
const QUERY_GET_REWARD_CONDITION = gql`
|
|
query GetRewardCondition($conditionId: Uuid!) {
|
|
evo_reward_condition(evo_reward_conditionid: $conditionId) {
|
|
evo_reward_summ
|
|
evo_reduce_reward
|
|
evo_min_reward_summ
|
|
}
|
|
}
|
|
`;
|
|
|
|
export function validateAgentRewardSumm(
|
|
store: RootStore,
|
|
apolloClient: ApolloClient<object>,
|
|
agentParams: {
|
|
rewardConditionField: Values.Elements;
|
|
rewardSummField: Values.Elements;
|
|
}
|
|
) {
|
|
const { $calculation } = store;
|
|
const { rewardConditionField, rewardSummField } = agentParams;
|
|
|
|
const validationHelper = new ValidationHelper();
|
|
|
|
reaction(
|
|
() => $calculation.element(rewardSummField).getValue() as number,
|
|
async (rewardSumm) => {
|
|
const conditionId = $calculation.element(rewardConditionField).getValue();
|
|
if (!conditionId) {
|
|
validationHelper.removeErrors();
|
|
|
|
return;
|
|
}
|
|
|
|
const {
|
|
data: { evo_reward_condition },
|
|
} = await apolloClient.query<
|
|
CRMTypes.GetRewardConditionQuery,
|
|
CRMTypes.GetRewardConditionQueryVariables
|
|
>({
|
|
query: QUERY_GET_REWARD_CONDITION,
|
|
variables: {
|
|
conditionId,
|
|
},
|
|
});
|
|
|
|
$calculation
|
|
.element(rewardSummField)
|
|
.validate({
|
|
invalid:
|
|
evo_reward_condition?.evo_reward_summ &&
|
|
rewardSumm > evo_reward_condition.evo_reward_summ,
|
|
message: 'Вознаграждение указано больше условия по агентскому договору!',
|
|
})
|
|
.err((removeError) => {
|
|
validationHelper.add(removeError);
|
|
});
|
|
|
|
$calculation
|
|
.element(rewardSummField)
|
|
.validate({
|
|
invalid:
|
|
!evo_reward_condition?.evo_reduce_reward &&
|
|
evo_reward_condition?.evo_reward_summ &&
|
|
rewardSumm < evo_reward_condition.evo_reward_summ,
|
|
message: 'Вознаграждение указано меньше условия по агентскому договору!',
|
|
})
|
|
.err((removeError) => {
|
|
validationHelper.add(removeError);
|
|
});
|
|
|
|
$calculation
|
|
.element(rewardSummField)
|
|
.validate({
|
|
invalid:
|
|
evo_reward_condition?.evo_min_reward_summ &&
|
|
rewardSumm < evo_reward_condition?.evo_min_reward_summ,
|
|
message: 'Вознаграждение указано меньше условия по агентскому договору!',
|
|
})
|
|
.err((removeError) => {
|
|
validationHelper.add(removeError);
|
|
});
|
|
}
|
|
);
|
|
}
|