EvoCalculator.Client2/process/supplier-agent/lib/fill-agents-from-lead.ts
vchikalkin 95bd5d1010 Revert "repo: move ./graphql to packages/graphql (gql)"
This reverts commit 74af4fb4922cf84f297807b25c19a1ae9f40a9b5.
2022-12-20 19:48:13 +03:00

138 lines
4.1 KiB
TypeScript

/* eslint-disable import/prefer-default-export */
import type { ApolloClient, DocumentNode } from '@apollo/client';
import { gql } from '@apollo/client';
import type { Elements } from 'Components/Calculation/config/map/values';
import type { GetAgentQuery, GetAgentQueryVariables } from 'graphql/crm.types';
import type RootStore from 'stores/root';
import { normalizeOptions } from 'tools/entity';
import { QUERY_GET_AGENT } from './query';
function makeFillAgentFromLead(
elementName: Elements,
queryGetAgentId: DocumentNode,
queryGetAgent: DocumentNode
) {
return async function fillAgentFromLead(
{ $calculation }: RootStore,
apolloClient: ApolloClient<object>,
leadid: string | null
) {
if (!leadid) {
$calculation.element(elementName).reset();
return;
}
const {
data: { lead },
} = await apolloClient.query({
query: queryGetAgentId,
variables: {
leadid,
},
});
if (lead?.agentid) {
const {
data: { agent },
} = await apolloClient.query<GetAgentQuery, GetAgentQueryVariables>({
query: queryGetAgent,
variables: {
agentid: lead.agentid,
},
});
if (agent) {
$calculation
.element(elementName)
.setOptions(normalizeOptions([agent]))
.setValue(agent.value);
}
} else {
$calculation.element(elementName).reset();
}
};
}
/**
* Если lead содержит данные,
* то indAgent заполняется ссылкой на карточку Контрагент (account),
* записанную в поле Интереса "Агент" (lead.evo_agent_accountid → account),
* иначе очищать поле калькулятора indAgent
*/
const QUERY_GET_AGENT_ACCOUNTID_FROM_LEAD = gql`
query GetAgentAccountIdFromLead($leadid: Uuid!) {
lead(leadid: $leadid) {
agentid: evo_agent_accountid
}
}
`;
export const fillIndAgent = makeFillAgentFromLead(
'selectIndAgent',
QUERY_GET_AGENT_ACCOUNTID_FROM_LEAD,
QUERY_GET_AGENT
);
/**
* Если lead содержит данные,
* то calcDoubleAgent заполняется ссылкой на карточку Контрагент (account),
* записанную в поле Интереса "Двойной агент" (lead.evo_double_agent_accountid → account)
* иначе очищать поле калькулятора calcDoubleAgent
*/
const QUERY_GET_DOUBLE_AGENT_ACCOUNTID = gql`
query GetDoubleAgentAccountId($leadid: Uuid!) {
lead(leadid: $leadid) {
agentid: evo_double_agent_accountid
}
}
`;
export const fillCalcDoubleAgent = makeFillAgentFromLead(
'selectCalcDoubleAgent',
QUERY_GET_DOUBLE_AGENT_ACCOUNTID,
QUERY_GET_AGENT
);
/**
* Если lead содержит данные, то calcBroker заполняется ссылкой на карточку Контрагент (account),
* записанную в поле Интереса "Брокер" (lead.evo_broker_accountid → account)
* иначе очищать поле калькулятора calcBroker
*/
const QUERY_GET_BROKER_ACCOUNTID_FROM_LEAD = gql`
query GetBrokerAccountId($leadid: Uuid!) {
lead(leadid: $leadid) {
agentid: evo_broker_accountid
}
}
`;
export const fillCalcBroker = makeFillAgentFromLead(
'selectCalcBroker',
QUERY_GET_BROKER_ACCOUNTID_FROM_LEAD,
QUERY_GET_AGENT
);
/**
* если lead содержит данные, то calcFinDepartment заполняется ссылкой
* на карточку Контрагент (account),
* записанную в поле Интереса "Финотдел" (lead.evo_fin_department_accountid → account)
* иначе очищать поле калькулятора calcFinDepartment
*/
const QUERY_GET_FIN_DEPARTMENT_ACCOUNTID = gql`
query GetFinDepartmentAccountId($leadid: Uuid!) {
lead(leadid: $leadid) {
agentid: evo_fin_department_accountid
}
}
`;
export const fillFinDepartment = makeFillAgentFromLead(
'selectCalcFinDepartment',
QUERY_GET_FIN_DEPARTMENT_ACCOUNTID,
QUERY_GET_AGENT
);