check values validation onCalculate
This commit is contained in:
parent
4506335819
commit
a41dd51590
@ -100,7 +100,7 @@ export const renderSections = ({ sectionsList }) => {
|
||||
{sectionsList.map((section, is) => {
|
||||
const { title: tabTitle, groups } = section;
|
||||
return (
|
||||
<Tabs.TabPane tab={tabTitle} key={is}>
|
||||
<Tabs.TabPane tab={tabTitle} key={is} forceRender>
|
||||
{renderGroups({ groups })}
|
||||
</Tabs.TabPane>
|
||||
);
|
||||
|
||||
126
src/client/constants/Calculation/elementsTitles.ts
Normal file
126
src/client/constants/Calculation/elementsTitles.ts
Normal file
@ -0,0 +1,126 @@
|
||||
import { TElements } from 'core/types/Calculation/Store/elements';
|
||||
|
||||
const elementsTitles: TElements<string> = {
|
||||
selectLead: 'Выбор Интереса',
|
||||
selectOpportunity: 'Выбор ЛС',
|
||||
selectQuote: 'Выбор Предложения',
|
||||
cbxRecalcWithRevision: 'Пересчет без пересмотра',
|
||||
selectTemplate: 'Выбор шаблона',
|
||||
selectChannel: 'Канал привлечения',
|
||||
tbxNewClient: 'Новый контрагент',
|
||||
selectAccount: 'Существующий контрагент',
|
||||
tbxINN: 'ИНН',
|
||||
tbxKPP: 'КПП',
|
||||
selectContactClient: 'Контактное лицо контрагента',
|
||||
tbxContact: 'Контактное лицо',
|
||||
radioContactGender: 'Пол контактного лица',
|
||||
tbxPhoneNumber: 'Телефон',
|
||||
tbxEmailAddress: 'E-mail',
|
||||
selectSupplier: 'Поставщик',
|
||||
selectFinDepartment: 'Финотдел',
|
||||
selectAgent: 'Агент',
|
||||
selectDoubleAgent: 'Двойной агент',
|
||||
selectBroker: 'Брокер',
|
||||
tbxCommentLead: 'Комментарий к интересу',
|
||||
btnCreateLead: 'Кнопка Создать интерес',
|
||||
selectProduct: 'Продукт',
|
||||
selectClientRisk: 'Риск клиента',
|
||||
selectClientType: 'Тип клиента',
|
||||
tbxLeaseObjectPrice: 'Стоимость предмета лизинга',
|
||||
selectSupplierCurrency: 'Валюта поставщика',
|
||||
tbxSupplierDiscountRub: 'Скидка от поставщика, рубли',
|
||||
tbxSupplierDiscountPerc: 'Скидка от поставщика, %',
|
||||
tbxLeasingPeriod: 'Срок лизинга, мес',
|
||||
tbxFirstPaymentPerc: 'Первый платеж, %',
|
||||
tbxFirstPaymentRub: 'Первый платеж, руб.',
|
||||
tbxLastPaymentPerc: 'Последний платеж, %',
|
||||
tbxLastPaymentRub: 'Последний платеж, руб.',
|
||||
radioLastPaymentRule: 'Последний платеж считается от ',
|
||||
radioBalanceHolder: 'Балансодержатель',
|
||||
radioGraphType: 'Вид графика',
|
||||
tbxParmentsDecreasePercent: 'Процент убывания платежей',
|
||||
radioSeasonType: 'Тип сезонности',
|
||||
selectHighSeasonStart: 'С какого платежа начинается высокий сезон',
|
||||
tbxComissionPerc: 'Комиссия, %',
|
||||
tbxComissionRub: 'Комиссия, руб.',
|
||||
tbxSaleBonus: 'Размер бонуса МПЛ',
|
||||
tbxIRR_Perc: 'IRR, %',
|
||||
tablePaymentGraph: 'Таблица графика платежей',
|
||||
selectLeaseObjectType: 'Тип предмета лизинга',
|
||||
radioDeliveryTime: 'Срок поставки',
|
||||
labelLeaseObjectRisk: 'Риск ПЛ',
|
||||
labelDepreciationGroup: 'Группа обесценения',
|
||||
tbxLeaseObjectCount: 'Кол-во ПЛ в расчете',
|
||||
selectWithTrailer: 'ТС с прицепом',
|
||||
cbxLeaseObjectUsed: 'ПЛ БУ',
|
||||
tbxMaxMass: 'Разрешенная макс.масса(кг)',
|
||||
tbxCountSeats: 'Количество мест',
|
||||
tbxMaxSpeed: 'Максимальная конструктивная скорость (при ПСМ)',
|
||||
selectBrand: 'Марка',
|
||||
selectModel: 'Модель',
|
||||
selectConfiguration: 'Комплектация',
|
||||
tbxLeaseObjectYear: 'Год выпуска',
|
||||
selectEngineType: 'Тип двигателя',
|
||||
selectLeaseObjectCategory: 'Категория ТС',
|
||||
tbxLeaseObjectMotorPower: 'Мощность, л.с.',
|
||||
tbxEngineVolume: 'Объем двигателя, л',
|
||||
selectLeaseObjectUseFor: 'ПЛ используется для',
|
||||
selectDealer: 'Салон приобретения',
|
||||
selectDealerPerson: 'ЮЛ поставщика',
|
||||
selectDealerRewardCondition: 'Условие АВ ЮЛ поставщика',
|
||||
tbxDealerRewardSumm: 'Размер АВ ЮЛ поставщика',
|
||||
selectDealerBroker: 'Брокер поставщика',
|
||||
selectDealerBrokerRewardCondition: 'Условие АВ брокера поставщика',
|
||||
tbxDealerBrokerRewardSumm: 'Размер АВ брокера поставщика',
|
||||
selectIndAgent: 'Агент ФЛ',
|
||||
selectIndAgentRewardCondition: 'Условие АВ агента ФЛ',
|
||||
tbxIndAgentRewardSumm: 'Размер АВ агента ФЛ',
|
||||
selectCalcDoubleAgent: 'Двойной агент',
|
||||
selectCalcDoubleAgentRewardCondition: 'Условия АВ двойного агента',
|
||||
tbxCalcDoubleAgentRewardSumm: 'Размер АВ двойного агента',
|
||||
selectCalcBroker: 'Брокер',
|
||||
selectCalcBrokerRewardCondition: 'Условие АВ брокера',
|
||||
tbxCalcBrokerRewardSum: 'Размер АВ брокера',
|
||||
selectCalcFinDepartment: 'Финотдел',
|
||||
selectFinDepartmentRewardCondtion: 'Условие АВ финотдела',
|
||||
tbxFinDepartmentRewardSumm: 'Размер АВ финотдела',
|
||||
selectGPSBrand: 'Марка GPS',
|
||||
selectGPSModel: 'Модель GPS',
|
||||
selectRegionRegistration: 'Регион регистрации',
|
||||
selectTownRegistration: 'Город регистрации',
|
||||
selectInfuranceOPF: 'ОПФ для расчета страховки',
|
||||
radioInsKaskoType: 'Тип страхования КАСКО',
|
||||
tbxInsKaskoPriceLeasePeriod: 'Стоимость страховки КАСКО на весь срок',
|
||||
cbxInsDecentral: 'Децентрализованное страхование',
|
||||
tbxInsFranchise: 'Франшиза',
|
||||
cbxInsUnlimitDrivers: 'Неограниченное число водителей',
|
||||
tbxInsAgeDrivers: 'Наименьший возраст водителей',
|
||||
tbxInsExpDrivers: 'Наименьший стаж водителей',
|
||||
cbxLastPaymentRedemption: 'Последний платеж считать выкупным',
|
||||
cbxPriceWithDiscount: 'Отображать стоимость ПЛ со скидкой отдельной',
|
||||
cbxCostIncrease: 'Отображать удорожание',
|
||||
cbxInsurance: 'Отображать страхование',
|
||||
cbxRegistrationQuote: 'Отображать регистрацию',
|
||||
cbxTechnicalCardQuote: 'Отображать карту техпомощи',
|
||||
cbxNSIB: 'Отображать НСИБ',
|
||||
tbxQuoteName: 'Имя',
|
||||
radioQuoteContactGender: 'Пол',
|
||||
cbxQuoteRedemptionGraph: 'Отображать график досрочного выкупа',
|
||||
selectTarif: 'Тариф',
|
||||
tbxCreditRate: 'Ставка привлечения, %',
|
||||
selectRate: 'Ставка привлечения',
|
||||
tbxMaxPriceChange: 'Макс.возможное изменение стоимости ПЛ',
|
||||
tbxImporterRewardPerc: 'АВ импортера,%',
|
||||
tbxImporterRewardRub: 'АВ импортера,руб.',
|
||||
cbxDisableChecks: 'Отключить все проверки',
|
||||
tbxSystemUser: 'Пользователь',
|
||||
tbxBusinessUnit: 'Подразделение',
|
||||
selectRegistration: 'Регистрация',
|
||||
selectInsNSIB: 'НСИБ',
|
||||
selectTechnicalCard: 'Карта техпомощи',
|
||||
radioRequirementTelematic: 'Программа средства контроля',
|
||||
selectTelematic: 'Телематика ',
|
||||
selectTracker: 'Маяк',
|
||||
};
|
||||
|
||||
export default elementsTitles;
|
||||
127
src/client/constants/Calculation/elementsValues.ts
Normal file
127
src/client/constants/Calculation/elementsValues.ts
Normal file
@ -0,0 +1,127 @@
|
||||
import { ValuesNames } from 'core/types/Calculation/Store/values';
|
||||
import { TElements } from 'core/types/Calculation/Store/elements';
|
||||
|
||||
const elementsValues: TElements<ValuesNames> = {
|
||||
selectLead: 'lead',
|
||||
selectOpportunity: 'opportunity',
|
||||
selectQuote: 'quote',
|
||||
cbxRecalcWithRevision: 'recalcWithRevision',
|
||||
selectTemplate: 'template',
|
||||
selectChannel: 'channel',
|
||||
tbxNewClient: 'newClient',
|
||||
selectAccount: 'account',
|
||||
tbxINN: 'INN',
|
||||
tbxKPP: 'KPP',
|
||||
selectContactClient: 'contactClient',
|
||||
tbxContact: 'contact',
|
||||
radioContactGender: 'contactGender',
|
||||
tbxPhoneNumber: 'phoneNumber',
|
||||
tbxEmailAddress: 'emailAddress',
|
||||
selectSupplier: 'supplier',
|
||||
selectFinDepartment: 'finDepartment',
|
||||
selectAgent: 'agent',
|
||||
selectDoubleAgent: 'doubleAgent',
|
||||
selectBroker: 'broker',
|
||||
tbxCommentLead: 'commentLead',
|
||||
selectProduct: 'product',
|
||||
selectClientRisk: 'clientRisk',
|
||||
selectClientType: 'clientType',
|
||||
tbxLeaseObjectPrice: 'leaseObjectPrice',
|
||||
selectSupplierCurrency: 'supplierCurrency',
|
||||
tbxSupplierDiscountRub: 'supplierDiscountRub',
|
||||
tbxSupplierDiscountPerc: 'supplierDiscountPerc',
|
||||
tbxLeasingPeriod: 'leasingPeriod',
|
||||
tbxFirstPaymentPerc: 'firstPaymentPerc',
|
||||
tbxFirstPaymentRub: 'firstPaymentRub',
|
||||
tbxLastPaymentPerc: 'lastPaymentPerc',
|
||||
tbxLastPaymentRub: 'lastPaymentRub',
|
||||
radioLastPaymentRule: 'lastPaymentRule',
|
||||
radioBalanceHolder: 'balanceHolder',
|
||||
radioGraphType: 'graphType',
|
||||
tbxParmentsDecreasePercent: 'parmentsDecreasePercent',
|
||||
radioSeasonType: 'seasonType',
|
||||
selectHighSeasonStart: 'highSeasonStart',
|
||||
tbxComissionPerc: 'comissionPerc',
|
||||
tbxComissionRub: 'comissionRub',
|
||||
tbxSaleBonus: 'saleBonus',
|
||||
tbxIRR_Perc: 'IRR_Perc',
|
||||
tablePaymentGraph: 'paymentGraph',
|
||||
selectLeaseObjectType: 'leaseObjectType',
|
||||
radioDeliveryTime: 'deliveryTime',
|
||||
labelLeaseObjectRisk: 'leaseObjectRisk',
|
||||
labelDepreciationGroup: 'depreciationGroup',
|
||||
tbxLeaseObjectCount: 'leaseObjectCount',
|
||||
selectWithTrailer: 'withTrailer',
|
||||
cbxLeaseObjectUsed: 'leaseObjectUsed',
|
||||
tbxMaxMass: 'maxMass',
|
||||
tbxCountSeats: 'countSeats',
|
||||
tbxMaxSpeed: 'maxSpeed',
|
||||
selectBrand: 'brand',
|
||||
selectModel: 'model',
|
||||
selectConfiguration: 'configuration',
|
||||
tbxLeaseObjectYear: 'leaseObjectYear',
|
||||
selectEngineType: 'engineType',
|
||||
selectLeaseObjectCategory: 'leaseObjectCategory',
|
||||
tbxLeaseObjectMotorPower: 'leaseObjectMotorPower',
|
||||
tbxEngineVolume: 'engineVolume',
|
||||
selectLeaseObjectUseFor: 'leaseObjectUseFor',
|
||||
selectDealer: 'dealer',
|
||||
selectDealerPerson: 'dealerPerson',
|
||||
selectDealerRewardCondition: 'dealerRewardCondition',
|
||||
tbxDealerRewardSumm: 'dealerRewardSumm',
|
||||
selectDealerBroker: 'dealerBroker',
|
||||
selectDealerBrokerRewardCondition: 'calcBrokerRewardCondition',
|
||||
tbxDealerBrokerRewardSumm: 'dealerBrokerRewardSumm',
|
||||
selectIndAgent: 'indAgent',
|
||||
selectIndAgentRewardCondition: 'indAgentRewardCondition',
|
||||
tbxIndAgentRewardSumm: 'indAgentRewardSumm',
|
||||
selectCalcDoubleAgent: 'calcDoubleAgent',
|
||||
selectCalcDoubleAgentRewardCondition: 'calcDoubleAgentRewardCondition',
|
||||
tbxCalcDoubleAgentRewardSumm: 'calcDoubleAgentRewardSumm',
|
||||
selectCalcBroker: 'calcBroker',
|
||||
selectCalcBrokerRewardCondition: 'calcBrokerRewardCondition',
|
||||
tbxCalcBrokerRewardSum: 'calcBrokerRewardSum',
|
||||
selectCalcFinDepartment: 'calcFinDepartment',
|
||||
selectFinDepartmentRewardCondtion: 'finDepartmentRewardCondtion',
|
||||
tbxFinDepartmentRewardSumm: 'finDepartmentRewardSumm',
|
||||
selectGPSBrand: 'GPSBrand',
|
||||
selectGPSModel: 'GPSModel',
|
||||
selectRegionRegistration: 'regionRegistration',
|
||||
selectTownRegistration: 'townRegistration',
|
||||
selectInfuranceOPF: 'infuranceOPF',
|
||||
radioInsKaskoType: 'insKaskoType',
|
||||
tbxInsKaskoPriceLeasePeriod: 'insKaskoPriceLeasePeriod',
|
||||
cbxInsDecentral: 'insDecentral',
|
||||
selectInsPeriod: 'insPeriod',
|
||||
tbxInsFranchise: 'insFranchise',
|
||||
cbxInsUnlimitDrivers: 'insUnlimitDrivers',
|
||||
tbxInsAgeDrivers: 'insAgeDrivers',
|
||||
tbxInsExpDrivers: 'insExpDrivers',
|
||||
tbxINNForCalc: 'INNForCalc',
|
||||
cbxLastPaymentRedemption: 'lastPaymentRedemption',
|
||||
cbxPriceWithDiscount: 'priceWithDiscount',
|
||||
cbxCostIncrease: 'costIncrease',
|
||||
cbxInsurance: 'insurance',
|
||||
cbxRegistrationQuote: 'registrationQuote',
|
||||
cbxTechnicalCardQuote: 'technicalCardQuote',
|
||||
cbxNSIB: 'NSIB',
|
||||
tbxQuoteName: 'quoteName',
|
||||
radioQuoteContactGender: 'quoteContactGender',
|
||||
cbxQuoteRedemptionGraph: 'quoteRedemptionGraph',
|
||||
selectTarif: 'tarif',
|
||||
tbxCreditRate: 'creditRate',
|
||||
selectRate: 'rate',
|
||||
selectUserSession: 'userSession',
|
||||
tbxMaxPriceChange: 'maxPriceChange',
|
||||
tbxImporterRewardPerc: 'importerRewardPerc',
|
||||
tbxImporterRewardRub: 'importerRewardRub',
|
||||
cbxDisableChecks: 'disableChecks',
|
||||
selectRegistration: 'registration',
|
||||
selectInsNSIB: 'insNSIB',
|
||||
selectTechnicalCard: 'technicalCard',
|
||||
radioRequirementTelematic: 'requirementTelematic',
|
||||
selectTelematic: 'telematic',
|
||||
selectTracker: 'tracker',
|
||||
};
|
||||
|
||||
export default elementsValues;
|
||||
@ -14,6 +14,7 @@ import checkValidation from './lib/checkValidation';
|
||||
import customValues from './lib/customValues';
|
||||
import prepareCalculationData from './lib/prepareData';
|
||||
import results from './lib/results';
|
||||
import validateElements from './lib/validateElements';
|
||||
|
||||
const cleanResults = () => {
|
||||
for (let resultValue of resultsValues) {
|
||||
@ -267,13 +268,15 @@ const actions: TAction = {
|
||||
},
|
||||
|
||||
calculate: async () => {
|
||||
const { errorsMessages } = checkValidation();
|
||||
if (errorsMessages.length > 0) {
|
||||
validateElements();
|
||||
const { elements } = checkValidation();
|
||||
if (elements.length > 0) {
|
||||
openNotification({
|
||||
type: 'error',
|
||||
title: 'Ошибка во время расчета графика',
|
||||
description: errorsMessages.join(', '),
|
||||
description: 'Некорректно заполнены поля: ' + elements.join(', '),
|
||||
})();
|
||||
return;
|
||||
}
|
||||
|
||||
blockButtons();
|
||||
|
||||
@ -1,7 +1,15 @@
|
||||
import elementsTitles from 'client/constants/Calculation/elementsTitles';
|
||||
import CalculationStore from 'client/stores/CalculationStore';
|
||||
|
||||
export default () => {
|
||||
let errorsMessages = [];
|
||||
let elements: string[] = [];
|
||||
|
||||
return { errorsMessages };
|
||||
const { validations } = CalculationStore;
|
||||
Object.keys(validations).forEach(elementName => {
|
||||
if (validations[elementName] === false) {
|
||||
elements.push(elementsTitles[elementName]);
|
||||
}
|
||||
});
|
||||
|
||||
return { elements };
|
||||
};
|
||||
|
||||
@ -0,0 +1,50 @@
|
||||
import elementsValues from 'client/constants/Calculation/elementsValues';
|
||||
import { TElements } from 'core/types/Calculation/Store/elements';
|
||||
import CalculationStore from '../..';
|
||||
|
||||
const VALIDATIONS = {
|
||||
IS_NULL: valueName => !CalculationStore.getValue(valueName),
|
||||
LESS_ZERO: valueName => CalculationStore.getValue(valueName) < 0,
|
||||
LESS_OR_EQUALS_ZERO: valueName => CalculationStore.getValue(valueName) <= 0,
|
||||
};
|
||||
|
||||
const elementsValidations: TElements<any> = {
|
||||
selectLead: VALIDATIONS.IS_NULL,
|
||||
selectProduct: VALIDATIONS.IS_NULL,
|
||||
selectSupplierCurrency: VALIDATIONS.IS_NULL,
|
||||
selectLeaseObjectType: VALIDATIONS.IS_NULL,
|
||||
selectBrand: VALIDATIONS.IS_NULL,
|
||||
selectModel: VALIDATIONS.IS_NULL,
|
||||
selectLeaseObjectUseFor: VALIDATIONS.IS_NULL,
|
||||
selectDealer: VALIDATIONS.IS_NULL,
|
||||
selectDealerPerson: VALIDATIONS.IS_NULL,
|
||||
selectRegionRegistration: VALIDATIONS.IS_NULL,
|
||||
selectTownRegistration: VALIDATIONS.IS_NULL,
|
||||
selectTarif: VALIDATIONS.IS_NULL,
|
||||
selectRate: VALIDATIONS.IS_NULL,
|
||||
selectRegistration: VALIDATIONS.IS_NULL,
|
||||
selectLeaseObjectCategory: VALIDATIONS.IS_NULL,
|
||||
tbxLeasingPeriod: valueName => CalculationStore.getValue(valueName) < 7,
|
||||
tbxLeaseObjectPrice: VALIDATIONS.LESS_OR_EQUALS_ZERO,
|
||||
tbxLastPaymentPerc: VALIDATIONS.LESS_OR_EQUALS_ZERO,
|
||||
tbxFirstPaymentPerc: VALIDATIONS.LESS_ZERO,
|
||||
tbxLeaseObjectCount: VALIDATIONS.LESS_ZERO,
|
||||
};
|
||||
|
||||
const validateElement = (elementName, condition) => {
|
||||
if (condition) {
|
||||
CalculationStore.setValidation(elementName, false);
|
||||
} else {
|
||||
//TODO: antidote in reactions
|
||||
CalculationStore.setValidation(elementName, true);
|
||||
}
|
||||
};
|
||||
|
||||
export default () => {
|
||||
Object.keys(elementsValidations).forEach(elementName => {
|
||||
validateElement(
|
||||
elementName,
|
||||
elementsValidations[elementName](elementsValues[elementName]),
|
||||
);
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user