97 lines
3.6 KiB
TypeScript
97 lines
3.6 KiB
TypeScript
/* eslint-disable no-negated-condition */
|
||
|
||
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',
|
||
'partialVAT',
|
||
]),
|
||
async ({
|
||
product: productId,
|
||
subsidy: subsidyId,
|
||
importProgram: importProgramId,
|
||
dealer: dealerId,
|
||
partialVAT,
|
||
}) => {
|
||
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;
|
||
}
|
||
|
||
if (subsidyId || importProgramId || (productId && partialVAT)) {
|
||
$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();
|
||
}
|
||
}
|
||
);
|
||
}
|