163 lines
5.1 KiB
TypeScript
163 lines
5.1 KiB
TypeScript
import type { ProcessContext } from '../types';
|
||
import { createValidationSchema } from './validation';
|
||
import type { Elements } from '@/Components/Calculation/config/map/values';
|
||
import * as CRMTypes from '@/graphql/crm.types';
|
||
import { createValidationReaction } from '@/process/tools';
|
||
import { reaction } from 'mobx';
|
||
|
||
export function common({ store, apolloClient }: ProcessContext) {
|
||
const { $calculation, $tables } = store;
|
||
|
||
reaction(
|
||
() => $calculation.element('cbxRecalcWithRevision').getValue(),
|
||
() => $calculation.element('selectQuote').resetValue()
|
||
);
|
||
|
||
reaction(
|
||
() => $calculation.$values.getValues(['leaseObjectUsed', 'recalcWithRevision']),
|
||
({ leaseObjectUsed, recalcWithRevision }) => {
|
||
if (recalcWithRevision && leaseObjectUsed) {
|
||
$calculation.element('tbxLeaseObjectYear').block();
|
||
} else {
|
||
$calculation.element('tbxLeaseObjectYear').unblock();
|
||
}
|
||
}
|
||
);
|
||
|
||
{
|
||
const elements: Elements[] = [
|
||
'cbxLeaseObjectUsed',
|
||
'radioGraphType',
|
||
'selectBrand',
|
||
'selectCalcBroker',
|
||
'selectCalcFinDepartment',
|
||
'selectClientRisk',
|
||
'selectClientType',
|
||
'selectConfiguration',
|
||
'selectDealer',
|
||
'selectDealerPerson',
|
||
'selectHighSeasonStart',
|
||
'selectImportProgram',
|
||
'selectIndAgent',
|
||
'selectLead',
|
||
'selectLeaseObjectCategory',
|
||
'selectLeaseObjectType',
|
||
'selectModel',
|
||
'selectOpportunity',
|
||
'selectRate',
|
||
'selectRequirementTelematic',
|
||
'selectSeasonType',
|
||
'selectSubsidy',
|
||
'selectTarif',
|
||
'selectTelematic',
|
||
'selectTracker',
|
||
'tbxAddEquipmentPrice',
|
||
'tbxCreditRate',
|
||
'tbxEngineHours',
|
||
'tbxImporterRewardPerc',
|
||
'tbxImporterRewardRub',
|
||
'tbxLeasingPeriod',
|
||
'tbxMaxPriceChange',
|
||
'tbxMileage',
|
||
'tbxParmentsDecreasePercent',
|
||
'tbxVIN',
|
||
// 'radioLastPaymentRule',
|
||
// 'tbxLastPaymentPerc',
|
||
// 'tbxLastPaymentRub',
|
||
'cbxPartialVAT',
|
||
];
|
||
|
||
reaction(
|
||
() => $calculation.element('cbxRecalcWithRevision').getValue(),
|
||
(recalcWithRevision) => {
|
||
if (recalcWithRevision) {
|
||
elements.forEach((elementName) =>
|
||
$calculation.$status.overrideStatus(elementName, 'Disabled')
|
||
);
|
||
$tables.payments.overrideStatuses('Disabled');
|
||
} else {
|
||
elements.forEach((elementName) => $calculation.$status.clearOverridedStatus(elementName));
|
||
$tables.payments.clearOverridedStatuses();
|
||
}
|
||
}
|
||
);
|
||
}
|
||
|
||
{
|
||
/**
|
||
* Закрыть на редактирование поля при Пересчете без пересмотра recalcWithRevision = True и если в Предложении selectQuote в поле "КП по итогам КК" = Да
|
||
* Срок поставки* radioDeliveryTime
|
||
* Цель использования* selectLeaseObjectUseFor
|
||
* Тип двигателя selectEngineType
|
||
* Децентрализованное страхование cbxInsDecentral
|
||
*/
|
||
const elements: Elements[] = [
|
||
'radioDeliveryTime',
|
||
'selectLeaseObjectUseFor',
|
||
'selectEngineType',
|
||
'cbxInsDecentral',
|
||
];
|
||
|
||
reaction(
|
||
() => $calculation.$values.getValues(['recalcWithRevision', 'quote']),
|
||
async ({ recalcWithRevision, quote: quoteId }) => {
|
||
if (!recalcWithRevision || !quoteId) {
|
||
elements.forEach((elementName) => $calculation.$status.clearOverridedStatus(elementName));
|
||
|
||
return;
|
||
}
|
||
|
||
const {
|
||
data: { quote },
|
||
} = await apolloClient.query({
|
||
query: CRMTypes.GetQuoteDocument,
|
||
variables: {
|
||
quoteId,
|
||
},
|
||
});
|
||
|
||
if (quote?.evo_committee_quote === 100_000_000) {
|
||
elements.forEach((elementName) =>
|
||
$calculation.$status.overrideStatus(elementName, 'Disabled')
|
||
);
|
||
} else {
|
||
elements.forEach((elementName) => $calculation.$status.clearOverridedStatus(elementName));
|
||
}
|
||
}
|
||
);
|
||
}
|
||
|
||
{
|
||
const agents: Elements[] = [
|
||
'selectCalcBrokerRewardCondition',
|
||
'selectCalcDoubleAgentRewardCondition',
|
||
'selectDealerBroker',
|
||
'selectDealerBrokerRewardCondition',
|
||
'selectDealerRewardCondition',
|
||
'selectFinDepartmentRewardCondtion',
|
||
'selectIndAgentRewardCondition',
|
||
'tbxCalcBrokerRewardSum',
|
||
'tbxCalcDoubleAgentRewardSumm',
|
||
'tbxDealerBrokerRewardSumm',
|
||
'tbxDealerRewardSumm',
|
||
'tbxFinDepartmentRewardSumm',
|
||
'tbxIndAgentRewardSumm',
|
||
];
|
||
|
||
reaction(
|
||
() => $calculation.$values.getValues(['firstPaymentPerc', 'recalcWithRevision']),
|
||
({ firstPaymentPerc, recalcWithRevision }) => {
|
||
if (firstPaymentPerc === 0 && recalcWithRevision === true) {
|
||
agents.forEach((elementName) =>
|
||
$calculation.$status.overrideStatus(elementName, 'Disabled')
|
||
);
|
||
} else {
|
||
agents.forEach((elementName) => $calculation.$status.clearOverridedStatus(elementName));
|
||
}
|
||
}
|
||
);
|
||
}
|
||
}
|
||
|
||
export const validation = createValidationReaction(createValidationSchema);
|