From d96b30a192d519094b103dba2d8324e70e0d0eb5 Mon Sep 17 00:00:00 2001 From: Chika Date: Mon, 14 Dec 2020 16:59:58 +0300 Subject: [PATCH] tbxSaleBonus fill and validation --- .../Calculation/lib/elements/elementsProps.ts | 3 +- .../Calculation/lib/fetchData/index.js | 25 ++++++++++- .../stores/CalculationStore/Data/static.js | 4 +- .../Effects/reactions/otherReactions.ts | 42 +++++++++++++++++++ 4 files changed, 70 insertions(+), 4 deletions(-) diff --git a/src/client/Containers/Calculation/lib/elements/elementsProps.ts b/src/client/Containers/Calculation/lib/elements/elementsProps.ts index 6023e36..7117d8e 100644 --- a/src/client/Containers/Calculation/lib/elements/elementsProps.ts +++ b/src/client/Containers/Calculation/lib/elements/elementsProps.ts @@ -94,8 +94,9 @@ const elementsProps: TElements = { }, tbxSaleBonus: { min: '0.00', - max: '1.30', + // max: '1.30', step: '0.1', + precision: 2, }, tbxFirstPaymentPerc: { min: '0', diff --git a/src/client/Containers/Calculation/lib/fetchData/index.js b/src/client/Containers/Calculation/lib/fetchData/index.js index 02e7d87..2ee00ab 100644 --- a/src/client/Containers/Calculation/lib/fetchData/index.js +++ b/src/client/Containers/Calculation/lib/fetchData/index.js @@ -1,9 +1,9 @@ import CrmService from 'client/services/CrmService'; import CalculationStore from 'client/stores/CalculationStore'; import { getUser } from 'client/tools/user'; -import initialOwnerQuery from './queries/ownerQuery'; import insuranceQuery from './queries/insuranceQuery'; import optionsQuery from './queries/optionsQuery'; +import initialOwnerQuery from './queries/ownerQuery'; import staticDataQuery from './queries/staticDataQuery'; import systemUserQuery from './queries/systemUserQuery'; @@ -45,7 +45,7 @@ export default () => options: { ...insuranceCompanies }, }); - var supplierCurrency = CalculationStore.options.selectSupplierCurrency?.find( + const supplierCurrency = CalculationStore.options.selectSupplierCurrency?.find( x => x.isocurrencycode === 'RUB', ); if (supplierCurrency) @@ -54,6 +54,27 @@ export default () => supplierCurrency.transactioncurrencyid, ); + const evo_sot_coefficient_type = staticEntities.evo_sot_coefficient_type.find( + x => x.evo_id === 'BONUS_LEASING', + ); + + const evo_coefficient_bonus = staticEntities.evo_coefficient.find( + x => + x.evo_job_titleid === systemuser.evo_job_titleid && + x.evo_sot_coefficient_typeid === + evo_sot_coefficient_type?.evo_sot_coefficient_typeid, + ); + + if ( + evo_coefficient_bonus && + evo_coefficient_bonus.evo_sot_coefficient + ) { + CalculationStore.setValue( + 'saleBonus', + evo_coefficient_bonus.evo_sot_coefficient * 100, + ); + } + resolve(); }, ) diff --git a/src/client/stores/CalculationStore/Data/static.js b/src/client/stores/CalculationStore/Data/static.js index 384c37b..b7ed8c6 100644 --- a/src/client/stores/CalculationStore/Data/static.js +++ b/src/client/stores/CalculationStore/Data/static.js @@ -1,3 +1,5 @@ +import { merge } from 'lodash'; + const staticData = {}; const staticDataAction = { @@ -5,7 +7,7 @@ const staticDataAction = { return this.staticData[dataName]; }, applyStaticData(data) { - this.staticData = { ...this.staticData, ...data }; + this.staticData = merge(this.staticData, data); }, }; diff --git a/src/client/stores/CalculationStore/Effects/reactions/otherReactions.ts b/src/client/stores/CalculationStore/Effects/reactions/otherReactions.ts index fbeab29..c6eaaf1 100644 --- a/src/client/stores/CalculationStore/Effects/reactions/otherReactions.ts +++ b/src/client/stores/CalculationStore/Effects/reactions/otherReactions.ts @@ -1070,6 +1070,48 @@ const reactionEffects: IReactionEffect[] = [ }, }), + calculationStore => ({ + expression: () => { + const { saleBonus } = calculationStore.values; + return saleBonus; + }, + effect: saleBonus => { + const systemuser = calculationStore?.staticData?.systemuser; + + if (systemuser) { + const evo_sot_coefficient_type = calculationStore?.staticData?.evo_sot_coefficient_type?.find( + x => x.evo_id === 'BONUS_LEASING', + ); + const evo_coefficient_bonus = calculationStore?.staticData?.evo_coefficient?.find( + x => + x.evo_job_titleid === systemuser[0].evo_job_titleid && + x.evo_sot_coefficient_typeid === + evo_sot_coefficient_type?.evo_sot_coefficient_typeid, + ); + + if ( + evo_coefficient_bonus && + evo_coefficient_bonus.evo_sot_coefficient + ) { + const max_sale_bonus = + evo_coefficient_bonus.evo_sot_coefficient * 100; + if (parseFloat(saleBonus) > max_sale_bonus) { + calculationStore.setValidation('tbxSaleBonus', false); + openNotification({ + type: 'error', + title: 'Ошибка', + description: + 'Размер бонуса МПЛ не может быть выше установленного по СОТ', + })(); + return; + } else { + calculationStore.setValidation('tbxSaleBonus', undefined); + } + } + } + }, + }), + calculationStore => ({ expression: () => { const { configuration } = calculationStore.values;