2023-02-17 19:55:39 +03:00

98 lines
3.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* eslint-disable no-negated-condition */
/* eslint-disable @typescript-eslint/naming-convention */
import type { ReactionsContext } from '../types';
import * as CRMTypes from '@/graphql/crm.types';
import { reaction } from 'mobx';
export function common({ store, apolloClient }: ReactionsContext) {
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();
}
}
);
}