138 lines
4.1 KiB
TypeScript
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
|
|
);
|