заполнение tbxSubsidySum

This commit is contained in:
vchikalkin 2023-02-08 13:52:26 +03:00
parent 225ab2c766
commit bbffa9f487

View File

@ -1,6 +1,7 @@
import * as CRMTypes from '@/graphql/crm.types';
import type { ReactionsContext } from '@/process/types';
import { autorun } from 'mobx';
import { autorun, reaction } from 'mobx';
import { pick } from 'radash';
/**
* При изменении "Программа от производителя" selectImportProgram , Стоимости ПЛ tbxLeaseObjectPrice, Валюты selectSupplierCurrency, Скидка от поставщика, в валюте поставщика (tbxSupplierDiscountRub)
@ -22,34 +23,72 @@ import { autorun } from 'mobx';
export function computedReactions({ store, apolloClient }: ReactionsContext) {
const { $calculation } = store;
autorun(async () => {
const importProgramId = $calculation.element('selectImportProgram').getValue();
const plPriceRub = $calculation.$values.getValue('plPriceRub');
const supplierDiscountRub = $calculation.element('tbxSupplierDiscountRub').getValue();
reaction(
() => pick($calculation.$values.values, ['importProgram', 'plPriceRub', 'supplierDiscountRub']),
async ({ importProgram: importProgramId, plPriceRub, supplierDiscountRub }) => {
if (importProgramId) {
const {
data: { evo_subsidy: importProgram },
} = await apolloClient.query({
query: CRMTypes.GetSubsidyDocument,
variables: {
subsidyId: importProgramId,
},
});
if (importProgramId) {
const {
data: { evo_subsidy: importProgram },
} = await apolloClient.query({
query: CRMTypes.GetSubsidyDocument,
variables: {
subsidyId: importProgramId,
},
});
if (importProgram?.evo_subsidy_summ && importProgram?.evo_subsidy_summ > 0) {
$calculation.element('tbxImportProgramSum').setValue(importProgram?.evo_subsidy_summ);
} else {
const subsidyPercent = (importProgram?.evo_percent_subsidy || 0) / 100;
if (importProgram?.evo_subsidy_summ && importProgram?.evo_subsidy_summ > 0) {
$calculation.element('tbxImportProgramSum').setValue(importProgram?.evo_subsidy_summ);
const sum = (plPriceRub - supplierDiscountRub) * subsidyPercent;
const maxSum = importProgram?.evo_max_subsidy_summ || 0;
$calculation.element('tbxImportProgramSum').setValue(Math.min(sum, maxSum));
}
} else {
const subsidyPercent = (importProgram?.evo_percent_subsidy || 0) / 100;
const sum = (plPriceRub - supplierDiscountRub) * subsidyPercent;
const maxSum = importProgram?.evo_max_subsidy_summ || 0;
$calculation.element('tbxImportProgramSum').setValue(Math.min(sum, maxSum));
$calculation.element('tbxImportProgramSum').setValue(0);
}
} else {
$calculation.element('tbxImportProgramSum').setValue(0);
}
);
autorun(async () => {
const {
subsidy: subsidyId,
plPriceRub,
discountRub,
addEquipmentPrice,
importProgramSum,
} = $calculation.$values.values;
if (!subsidyId) {
$calculation.element('tbxSubsidySum').resetValue();
return;
}
const {
data: { evo_subsidy: subsidy },
} = await apolloClient.query({
query: CRMTypes.GetSubsidyDocument,
variables: {
subsidyId,
},
});
if (subsidy?.evo_subsidy_summ) {
$calculation.element('tbxSubsidySum').setValue(subsidy?.evo_subsidy_summ);
return;
}
const price = plPriceRub - discountRub - importProgramSum + addEquipmentPrice;
let sum = (price * (subsidy?.evo_percent_subsidy ?? 0)) / 100;
const maxSum = subsidy?.evo_max_subsidy_summ ?? 0;
if (sum > maxSum) sum = maxSum;
$calculation.element('tbxSubsidySum').setValue(sum);
});
}