101 lines
3.3 KiB
TypeScript
101 lines
3.3 KiB
TypeScript
/* eslint-disable import/prefer-default-export */
|
|
import type { ApolloClient } from '@apollo/client';
|
|
import type { Elements } from 'Components/Calculation/config/map/values';
|
|
import * as CRMTypes from 'graphql/crm.types';
|
|
import type RootStore from 'stores/root';
|
|
import { normalizeOptions } from 'tools/entity';
|
|
|
|
type AgentsLeadProp = keyof Pick<
|
|
NonNullable<CRMTypes.GetLeadQuery['lead']>,
|
|
| 'evo_agent_accountid'
|
|
| 'evo_broker_accountid'
|
|
| 'evo_double_agent_accountid'
|
|
| 'evo_fin_department_accountid'
|
|
>;
|
|
|
|
function makeFillAgentFromLead(elementName: Elements, leadProp: AgentsLeadProp) {
|
|
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: CRMTypes.GetLeadDocument,
|
|
variables: {
|
|
leadid,
|
|
},
|
|
});
|
|
|
|
const agentid = lead?.[leadProp];
|
|
|
|
if (agentid) {
|
|
const {
|
|
data: { agent },
|
|
} = await apolloClient.query({
|
|
query: CRMTypes.GetAgentDocument,
|
|
variables: {
|
|
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
|
|
*/
|
|
|
|
export const fillIndAgent = makeFillAgentFromLead('selectIndAgent', 'evo_agent_accountid');
|
|
|
|
/**
|
|
* Если lead содержит данные,
|
|
* то calcDoubleAgent заполняется ссылкой на карточку Контрагент (account),
|
|
* записанную в поле Интереса "Двойной агент" (lead.evo_double_agent_accountid → account)
|
|
* иначе очищать поле калькулятора calcDoubleAgent
|
|
*/
|
|
|
|
export const fillCalcDoubleAgent = makeFillAgentFromLead(
|
|
'selectCalcDoubleAgent',
|
|
'evo_double_agent_accountid'
|
|
);
|
|
|
|
/**
|
|
* Если lead содержит данные, то calcBroker заполняется ссылкой на карточку Контрагент (account),
|
|
* записанную в поле Интереса "Брокер" (lead.evo_broker_accountid → account)
|
|
* иначе очищать поле калькулятора calcBroker
|
|
*/
|
|
|
|
export const fillCalcBroker = makeFillAgentFromLead('selectCalcBroker', 'evo_broker_accountid');
|
|
|
|
/**
|
|
* если lead содержит данные, то calcFinDepartment заполняется ссылкой
|
|
* на карточку Контрагент (account),
|
|
* записанную в поле Интереса "Финотдел" (lead.evo_fin_department_accountid → account)
|
|
* иначе очищать поле калькулятора calcFinDepartment
|
|
*/
|
|
|
|
export const fillFinDepartment = makeFillAgentFromLead(
|
|
'selectCalcFinDepartment',
|
|
'evo_fin_department_accountid'
|
|
);
|