check values validation onCalculate

This commit is contained in:
Chika 2020-11-26 16:31:23 +03:00
parent 4506335819
commit a41dd51590
6 changed files with 320 additions and 6 deletions

View File

@ -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>
);

View 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;

View 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;

View File

@ -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();

View File

@ -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 };
};

View File

@ -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]),
);
});
};