From 360c20f402bc164654cd2715d0893b1ad9946582 Mon Sep 17 00:00:00 2001 From: Chika Date: Tue, 15 Dec 2020 19:01:15 +0300 Subject: [PATCH] fix NaN --- .../Calculation/lib/elements/elementsProps.ts | 5 + src/client/Elements/InputNumber.jsx | 4 +- .../CalculationStore/Effects/lib/tools.js | 8 +- .../Effects/reactions/otherReactions.ts | 154 ++++++++++++------ 4 files changed, 113 insertions(+), 58 deletions(-) diff --git a/src/client/Containers/Calculation/lib/elements/elementsProps.ts b/src/client/Containers/Calculation/lib/elements/elementsProps.ts index 7117d8e..1acd808 100644 --- a/src/client/Containers/Calculation/lib/elements/elementsProps.ts +++ b/src/client/Containers/Calculation/lib/elements/elementsProps.ts @@ -77,17 +77,20 @@ const elementsProps: TElements = { min: '10000', max: '1000000000', step: '10000.00', + precision: 2, }, tbxSupplierDiscountRub: { // TODO formatter + rub, parser min: '0', max: '1000000000', step: '10000.00', + precision: 2, }, tbxSupplierDiscountPerc: { // TODO formatter + %, parser min: '0', max: '100', + precision: 2, }, radioBalanceHolder: { style: 'button', @@ -101,11 +104,13 @@ const elementsProps: TElements = { tbxFirstPaymentPerc: { min: '0', max: '50', + precision: 2, }, tbxFirstPaymentRub: { min: '0', max: '1000000000', step: '10000.00', + precision: 2, }, radioLastPaymentRule: { style: 'button', diff --git a/src/client/Elements/InputNumber.jsx b/src/client/Elements/InputNumber.jsx index ecbd98e..9312e51 100644 --- a/src/client/Elements/InputNumber.jsx +++ b/src/client/Elements/InputNumber.jsx @@ -16,7 +16,9 @@ const InputNumber = ({ {...props} disabled={status === ElementStatus.Disabled} style={styles} - onChange={value => setCurrentValue(value)} + onChange={value => { + setCurrentValue(typeof value !== 'string' ? value : 0); + }} value={value} /> diff --git a/src/client/stores/CalculationStore/Effects/lib/tools.js b/src/client/stores/CalculationStore/Effects/lib/tools.js index ba13171..6f64417 100644 --- a/src/client/stores/CalculationStore/Effects/lib/tools.js +++ b/src/client/stores/CalculationStore/Effects/lib/tools.js @@ -15,7 +15,6 @@ export const calculatePerc = calculationStore => ( supplierCurrencyId, leaseObjectPrice, rubSum, - percFieldName, ) => { const supplierCurrency = calculationStore .getOptions('selectSupplierCurrency') @@ -30,15 +29,13 @@ export const calculatePerc = calculationStore => ( parseFloat(leaseObjectPrice), evo_currencychangeValue, ); - let perc = (rubSum / price) * 100; - calculationStore.setValue(percFieldName, perc); + return (rubSum / price) * 100; }; export const calculateRub = calculationStore => ( supplierCurrencyId, leaseObjectPrice, perc, - rubFieldName, ) => { const supplierCurrency = calculationStore .getOptions('selectSupplierCurrency') @@ -53,6 +50,5 @@ export const calculateRub = calculationStore => ( parseFloat(leaseObjectPrice), evo_currencychangeValue, ); - let rub = (perc * price) / 100; - calculationStore.setValue(rubFieldName, rub); + return (perc * price) / 100; }; diff --git a/src/client/stores/CalculationStore/Effects/reactions/otherReactions.ts b/src/client/stores/CalculationStore/Effects/reactions/otherReactions.ts index 6465aca..c5a6b4a 100644 --- a/src/client/stores/CalculationStore/Effects/reactions/otherReactions.ts +++ b/src/client/stores/CalculationStore/Effects/reactions/otherReactions.ts @@ -1184,14 +1184,10 @@ const reactionEffects: IReactionEffect[] = [ const { leaseObjectPrice, supplierDiscountRub } = calculationStore.values; return [leaseObjectPrice, supplierDiscountRub]; }, - effect: ([leaseObjectPrice, supplierDiscountRub]) => { - if (supplierDiscountRub === undefined) { - return; - } - + effect: ([leaseObjectPrice, supplierDiscountRub = 0]) => { calculationStore.setValue( 'supplierDiscountPerc', - (supplierDiscountRub / leaseObjectPrice) * 100, + leaseObjectPrice ? (supplierDiscountRub / leaseObjectPrice) * 100 : 0, ); }, options: { @@ -1207,11 +1203,7 @@ const reactionEffects: IReactionEffect[] = [ } = calculationStore.values; return [leaseObjectPrice, supplierDiscountPerc]; }, - effect: ([leaseObjectPrice, supplierDiscountPerc]) => { - if (supplierDiscountPerc === undefined) { - return; - } - + effect: ([leaseObjectPrice = 0, supplierDiscountPerc = 0]) => { calculationStore.setValue( 'supplierDiscountRub', (supplierDiscountPerc * leaseObjectPrice) / 100, @@ -1228,16 +1220,17 @@ const reactionEffects: IReactionEffect[] = [ return firstPaymentRub; }, effect: firstPaymentRub => { - if (firstPaymentRub === undefined) { - return; - } const { supplierCurrency, leaseObjectPrice } = calculationStore.values; - calculatePerc(calculationStore)( - supplierCurrency, - leaseObjectPrice, - firstPaymentRub, - 'firstPaymentPerc', - ); + if (leaseObjectPrice) { + const perc = calculatePerc(calculationStore)( + supplierCurrency, + leaseObjectPrice, + firstPaymentRub, + ); + calculationStore.setValue('firstPaymentPerc', perc); + } else { + calculationStore.setValue('firstPaymentPerc', 0); + } }, options: { fireImmediately: true, @@ -1253,16 +1246,21 @@ const reactionEffects: IReactionEffect[] = [ } = calculationStore.values; return [supplierCurrency, leaseObjectPrice, firstPaymentPerc]; }, - effect: ([supplierCurrencyId, leaseObjectPrice, firstPaymentPerc]) => { - if (firstPaymentPerc === undefined) { + effect: ([ + supplierCurrencyId, + leaseObjectPrice = 0, + firstPaymentPerc = 0, + ]) => { + if (!firstPaymentPerc) { return; } - calculateRub(calculationStore)( + const rub = calculateRub(calculationStore)( supplierCurrencyId, leaseObjectPrice, firstPaymentPerc, - 'firstPaymentRub', ); + + calculationStore.setValue('firstPaymentRub', rub); }, options: { fireImmediately: true, @@ -1278,37 +1276,36 @@ const reactionEffects: IReactionEffect[] = [ } = calculationStore.values; return [supplierCurrency, leaseObjectPrice, comissionPerc]; }, - effect: ([supplierCurrencyId, leaseObjectPrice, comissionPerc]) => { - if (comissionPerc === undefined) { - return; - } - calculateRub(calculationStore)( + effect: ([supplierCurrencyId, leaseObjectPrice = 0, comissionPerc = 0]) => { + const rub = calculateRub(calculationStore)( supplierCurrencyId, leaseObjectPrice, comissionPerc, - 'comissionRub', ); + calculationStore.setValue('comissionRub', rub); }, options: { fireImmediately: true, }, }), + calculationStore => ({ expression: () => { const { comissionRub } = calculationStore.values; return comissionRub; }, effect: comissionRub => { - if (comissionRub === undefined) { - return; - } const { supplierCurrency, leaseObjectPrice } = calculationStore.values; - calculatePerc(calculationStore)( - supplierCurrency, - leaseObjectPrice, - comissionRub, - 'comissionPerc', - ); + if (leaseObjectPrice) { + const perc = calculatePerc(calculationStore)( + supplierCurrency, + leaseObjectPrice, + comissionRub, + ); + calculationStore.setValue('comissionPerc', perc); + } else { + calculationStore.setValue('comissionPerc', 0); + } }, options: { fireImmediately: true, @@ -1333,18 +1330,19 @@ const reactionEffects: IReactionEffect[] = [ effect: ([ supplierCurrencyId, leaseObjectPrice, - lastPaymentPerc, + lastPaymentPerc = 0, lastPaymentRule, ]) => { - if (lastPaymentPerc === undefined || lastPaymentRule !== 100000001) { + if (lastPaymentRule !== 100000001) { return; } - calculateRub(calculationStore)( + + const rub = calculateRub(calculationStore)( supplierCurrencyId, leaseObjectPrice, lastPaymentPerc, - 'lastPaymentRub', ); + calculationStore.setValue('lastPaymentRub', rub); }, options: { fireImmediately: true, @@ -1368,24 +1366,78 @@ const reactionEffects: IReactionEffect[] = [ effect: ([ supplierCurrencyId, leaseObjectPrice, - lastPaymentRub, + lastPaymentRub = 0, lastPaymentRule, ]) => { - if (lastPaymentRub === undefined || lastPaymentRule !== 100000000) { + if (lastPaymentRule !== 100000000) { return; } - calculatePerc(calculationStore)( - supplierCurrencyId, - leaseObjectPrice, - lastPaymentRub, - 'lastPaymentPerc', - ); + if (leaseObjectPrice) { + const perc = calculatePerc(calculationStore)( + supplierCurrencyId, + leaseObjectPrice, + lastPaymentRub, + ); + calculationStore.setValue('lastPaymentPerc', perc); + } else { + calculationStore.setValue('lastPaymentPerc', 0); + } }, options: { fireImmediately: true, }, }), + calculationStore => ({ + expression: () => { + const { supplierDiscountRub } = calculationStore.values; + return supplierDiscountRub; + }, + effect: supplierDiscountRub => { + const { leaseObjectPrice } = calculationStore.values; + if ( + leaseObjectPrice && + leaseObjectPrice > 0 && + supplierDiscountRub >= leaseObjectPrice + ) { + calculationStore.setValidation('tbxSupplierDiscountRub', false); + openNotification({ + type: 'error', + title: 'Ошибка', + description: + 'Скидка от поставщика не может быть больше или равна стоимости ПЛ.', + })(); + } else { + calculationStore.setValidation('tbxSupplierDiscountRub', undefined); + } + }, + }), + + calculationStore => ({ + expression: () => { + const { firstPaymentRub } = calculationStore.values; + return firstPaymentRub; + }, + effect: firstPaymentRub => { + const { leaseObjectPrice } = calculationStore.values; + if ( + leaseObjectPrice && + leaseObjectPrice > 0 && + firstPaymentRub >= leaseObjectPrice + ) { + calculationStore.setValidation('tbxFirstPaymentRub', false); + openNotification({ + type: 'error', + title: 'Ошибка', + description: + 'Первый платеж не может быть больше или равен стоимости ПЛ.', + })(); + } else { + calculationStore.setValidation('tbxFirstPaymentRub', undefined); + } + }, + }), + calculationStore => ({ expression: () => { const {