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);