From bbffa9f48793a0dfacc414eb5a38d93471aec339 Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Wed, 8 Feb 2023 13:52:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20tbxSubsidySum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/process/subsidy/reactions.ts | 87 +++++++++++++++++++-------- 1 file changed, 63 insertions(+), 24 deletions(-) diff --git a/apps/web/process/subsidy/reactions.ts b/apps/web/process/subsidy/reactions.ts index dc46979..41217c0 100644 --- a/apps/web/process/subsidy/reactions.ts +++ b/apps/web/process/subsidy/reactions.ts @@ -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); }); }