/* eslint-disable no-negated-condition */ /* eslint-disable @typescript-eslint/naming-convention */ import type { ProcessContext } from '../types'; import * as CRMTypes from '@/graphql/crm.types'; import { reaction } from 'mobx'; export function common({ store, apolloClient }: ProcessContext) { const { $calculation } = store; /** * на изменение selectProduct, selectSubsidy или selectImportProgram или selectDealer * если selectSusidy или selectItProgram содержит данные или в поле selectDealer указан account, у которого evo_return_leasing_dealer = true, то selectSupplierCurrency закрыта для редактирования, * иначе * если selectProduct не содержит данные, то selectSupplierCurrency закрыта для редактирования, иначе * если (в поле Продукт selectProduct выбрана запись, у которой БУбезНДС evo_sale_without_nds = True), то selectSupplierCurrency закрыта для редактирования * иначе selectSupplierCurrency открыто для редактирования */ reaction( () => $calculation.$values.getValues(['product', 'subsidy', 'importProgram', 'dealer']), async ({ product: productId, subsidy: subsidyId, importProgram: importProgramId, dealer: dealerId, }) => { const { data: { transactioncurrencies }, } = await apolloClient.query({ query: CRMTypes.GetTransactionCurrenciesDocument, }); const transactioncurrency_rub = transactioncurrencies?.find( (x) => x?.isocurrencycode === 'RUB' ); const transactioncurrency_rub_id = transactioncurrency_rub?.transactioncurrencyid || null; if (!productId) { $calculation.element('selectSupplierCurrency').setValue(transactioncurrency_rub_id).block(); return; } const { data: { evo_baseproduct }, } = await apolloClient.query({ query: CRMTypes.GetProductDocument, variables: { productId, }, }); if (subsidyId || importProgramId || evo_baseproduct?.evo_sale_without_nds) { $calculation.element('selectSupplierCurrency').setValue(transactioncurrency_rub_id).block(); } else if (dealerId) { const { data: { dealer }, } = await apolloClient.query({ query: CRMTypes.GetDealerDocument, variables: { dealerId, }, }); if (dealer?.evo_return_leasing_dealer === true) { $calculation .element('selectSupplierCurrency') .setValue(transactioncurrency_rub_id) .block(); } else { $calculation.element('selectSupplierCurrency').unblock(); } } else { $calculation.element('selectSupplierCurrency').unblock(); } }, { fireImmediately: true, } ); /** * При изменении "Программа от производителя" selectImportProgram (работает при загрузке КП) * Если поле "Программа от производителя" selectImportProgram не содержит данные, * то поле "Стоимость доп.оборудования" tbxAddEquipmentPrice закрыть для редактирования и значение равно 0, * иначе оставлять открытым для редактирования */ reaction( () => $calculation.element('selectImportProgram').getValue(), (importProgramId) => { if (!importProgramId) { $calculation.element('tbxAddEquipmentPrice').resetValue().block(); } else { $calculation.element('tbxAddEquipmentPrice').unblock(); } } ); }