diff --git a/src/client/Containers/Calculation/Sections/sectionsList.ts b/src/client/Containers/Calculation/Sections/sectionsList.ts index e20bdd1..9b513fb 100644 --- a/src/client/Containers/Calculation/Sections/sectionsList.ts +++ b/src/client/Containers/Calculation/Sections/sectionsList.ts @@ -465,6 +465,7 @@ const sections: ISections[] = [ props: { min: '0', max: '100', + step: '1.000000', name: 'tbxLastPaymentPerc', valueName: 'lastPaymentPerc', }, @@ -1196,7 +1197,7 @@ const sections: ISections[] = [ title: 'Франшиза', Component: InputNumber, props: { - min: '10000', + min: '0', max: '300000', step: '10000.00', name: 'tbxInsFranchise', diff --git a/src/client/stores/CalculationStore/Effects/reaction.ts b/src/client/stores/CalculationStore/Effects/reaction.ts index a4e556c..e493233 100644 --- a/src/client/stores/CalculationStore/Effects/reaction.ts +++ b/src/client/stores/CalculationStore/Effects/reaction.ts @@ -1,6 +1,7 @@ import CalculationService from 'client/services/CalculationService'; import { IReactionEffect } from 'core/types/effect'; import { Status } from 'core/types/statuses'; +import { parse } from 'path'; const reactionEffects: IReactionEffect[] = [ calculationStore => ({ @@ -799,6 +800,207 @@ const reactionEffects: IReactionEffect[] = [ } }, }), + + calculationStore => ({ + expression: () => { + const { leaseObjectUsed } = calculationStore.values; + return leaseObjectUsed; + }, + effect: leaseObjectUsed => { + if (leaseObjectUsed) { + calculationStore.setValue('leaseObjectCount', 1); + calculationStore.setStatus('tbxLeaseObjectCount', Status.Disabled); + } else { + calculationStore.setStatus('tbxLeaseObjectCount', Status.Default); + } + }, + }), + + calculationStore => ({ + expression: () => { + const { insUnlimitDrivers } = calculationStore.values; + return insUnlimitDrivers; + }, + effect: insUnlimitDrivers => { + if (insUnlimitDrivers) { + calculationStore.setStatus('btnDriversApplication', Status.Disabled); + } else { + calculationStore.setStatus('btnDriversApplication', Status.Default); + } + }, + }), + + calculationStore => ({ + expression: () => { + const { insFranchise } = calculationStore.values; + return insFranchise; + }, + effect: insFranchise => { + if (!insFranchise || parseInt(insFranchise) === 0) { + calculationStore.setStatus('btnFranschise', Status.Disabled); + } else { + calculationStore.setStatus('btnFranschise', Status.Default); + } + }, + }), + + calculationStore => ({ + expression: () => { + const { lastPaymentRule } = calculationStore.values; + return lastPaymentRule; + }, + effect: lastPaymentRule => { + if (lastPaymentRule) { + if (lastPaymentRule === 100000000) { + calculationStore.setStatus('tbxLastPaymentPerc', Status.Disabled); + calculationStore.setStatus('tbxLastPaymentRub', Status.Default); + } else { + calculationStore.setStatus('tbxLastPaymentPerc', Status.Default); + calculationStore.setStatus('tbxLastPaymentRub', Status.Disabled); + } + } + }, + }), + + calculationStore => ({ + expression: () => { + const { lastPaymentPerc, balanceHolder } = calculationStore.values; + return { + lastPaymentPerc, + balanceHolder, + }; + }, + effect: ({ lastPaymentPerc, balanceHolder }) => { + if ( + balanceHolder && + balanceHolder === 100000001 && + lastPaymentPerc && + parseInt(lastPaymentPerc) < 1 + ) { + /** + * TODO: modal=>notification + * validation + * move to autorun + */ + calculationStore.showModal( + 'При балансе лизингодатель последний платеж не может быть меньше 1%! Увеличьте значение.', + ); + } + }, + }), + + calculationStore => ({ + expression: () => { + const { graphType } = calculationStore.values; + return graphType; + }, + effect: graphType => { + if (graphType) { + switch (graphType) { + case 100000002: { + calculationStore.setStatus('radioSeasonType', Status.Disabled); + calculationStore.setStatus( + 'tbxParmentsDecreasePercent', + Status.Default, + ); + calculationStore.setStatus( + 'selectHighSeasonStart', + Status.Disabled, + ); + break; + } + + case 100000003: { + calculationStore.setStatus('radioSeasonType', Status.Default); + calculationStore.setStatus( + 'tbxParmentsDecreasePercent', + Status.Disabled, + ); + calculationStore.setStatus('selectHighSeasonStart', Status.Default); + break; + } + + default: { + calculationStore.setStatus('radioSeasonType', Status.Disabled); + calculationStore.setStatus( + 'tbxParmentsDecreasePercent', + Status.Disabled, + ); + calculationStore.setStatus( + 'selectHighSeasonStart', + Status.Disabled, + ); + break; + } + } + } + }, + }), + + calculationStore => ({ + expression: () => { + const { seasonType } = calculationStore.values; + return seasonType; + }, + effect: seasonType => { + if (seasonType) { + switch (seasonType) { + case 100000001: + case 100000002: { + calculationStore.setFilter('selectHighSeasonStart', seasons => { + return seasons.filter( + season => season.value && season.value <= 100000004, + ); + }); + break; + } + default: + calculationStore.setFilter('selectHighSeasonStart', undefined); + break; + } + } + }, + }), + + calculationStore => ({ + expression: () => { + const { leasingPeriod } = calculationStore.values; + return leasingPeriod; + }, + effect: leasingPeriod => { + if (leasingPeriod) { + if (parseInt(leasingPeriod) < 12) { + calculationStore.setStatus('radioBalanceHolder', Status.Disabled); + calculationStore.setValue('balanceHolder', 100000000); + } else { + calculationStore.setStatus('radioBalanceHolder', Status.Default); + } + } + }, + }), + + calculationStore => ({ + expression: () => { + const { balanceHolder } = calculationStore.values; + return balanceHolder; + }, + effect: balanceHolder => { + if (balanceHolder) { + if (balanceHolder === 100000001) { + calculationStore.setStatus( + 'cbxLastPaymentRedemption', + Status.Disabled, + ); + calculationStore.setValue('lastPaymentRedemption', true); + } else { + calculationStore.setStatus( + 'cbxLastPaymentRedemption', + Status.Default, + ); + } + } + }, + }), ]; export default reactionEffects; diff --git a/src/core/config/initialValues.ts b/src/core/config/initialValues.ts index ae20614..5538851 100644 --- a/src/core/config/initialValues.ts +++ b/src/core/config/initialValues.ts @@ -66,5 +66,6 @@ const initialValues: TValues = { importerRewardPerc: 0, importerRewardRub: 0, disableChecks: false, + insFranchise: 0, }; export default initialValues; diff --git a/src/core/types/stores.ts b/src/core/types/stores.ts index 14b33b0..2e900b9 100644 --- a/src/core/types/stores.ts +++ b/src/core/types/stores.ts @@ -13,7 +13,10 @@ export interface ICalculationStore { filters: TElements; getFilter: (elementName: ElementsNames) => TElementFilter; - setFilter: (elementName: ElementsNames, filter: TElementFilter) => void; + setFilter: ( + elementName: ElementsNames, + filter: TElementFilter | undefined, + ) => void; // applyFilters: (filters: TElementFilter[]) => void; values: TValues;