458 lines
8.8 KiB
TypeScript
458 lines
8.8 KiB
TypeScript
import DownloadOutlined from '@ant-design/icons/lib/icons/DownloadOutlined';
|
|
import InsuranceTag from 'client/Components/Calculation/InsuranceTag';
|
|
import { MAX_FRANCHISE } from 'core/constants/stores/Calculation/limits';
|
|
import { currentYear } from 'core/tools/date';
|
|
import { formatMoney, formatNumber } from 'core/tools/format';
|
|
import { pipe } from 'core/tools/func';
|
|
import { round } from 'core/tools/num';
|
|
import {
|
|
validateEmail,
|
|
validateInn,
|
|
validateKpp,
|
|
validatePhone,
|
|
} from 'core/tools/validate';
|
|
import { ElementProps } from 'core/types/Calculation/components';
|
|
import { TElements } from 'core/types/Calculation/Store/elements';
|
|
|
|
const elementsProps: TElements<ElementProps> = {
|
|
selectChannel: {
|
|
showSearch: true,
|
|
},
|
|
selectAccount: {
|
|
showSearch: true,
|
|
},
|
|
tbxINN: {
|
|
validation: {
|
|
errorMessage: 'Некорректный ИНН',
|
|
validator: validateInn,
|
|
},
|
|
},
|
|
tbxKPP: {
|
|
validation: {
|
|
errorMessage: 'Некорректный КПП',
|
|
validator: validateKpp,
|
|
},
|
|
},
|
|
selectContactClient: {
|
|
showSearch: true,
|
|
},
|
|
radioContactGender: {
|
|
style: 'button',
|
|
},
|
|
tbxPhoneNumber: {
|
|
type: 'tel',
|
|
validation: {
|
|
errorMessage: 'Некорректный номер телефона',
|
|
validator: validatePhone,
|
|
},
|
|
//TODO: mask + 7(999) 999 99 99
|
|
},
|
|
tbxEmailAddress: {
|
|
type: 'email',
|
|
//TODO email mask
|
|
validation: {
|
|
errorMessage: 'Некорректный E-mail',
|
|
validator: validateEmail,
|
|
},
|
|
},
|
|
selectSupplier: {
|
|
showSearch: true,
|
|
},
|
|
selectFinDepartment: {
|
|
showSearch: false,
|
|
},
|
|
selectBroker: {
|
|
showSearch: false,
|
|
},
|
|
selectAgent: {
|
|
showSearch: true,
|
|
},
|
|
selectDoubleAgent: {
|
|
showSearch: true,
|
|
},
|
|
btnCreateLead: {
|
|
type: 'primary',
|
|
text: 'Создать интерес',
|
|
},
|
|
tbxLeaseObjectPrice: {
|
|
min: '1000.00',
|
|
max: '1000000000.00',
|
|
step: '10000.00',
|
|
precision: 2,
|
|
formatter: formatNumber,
|
|
},
|
|
tbxSupplierDiscountRub: {
|
|
min: '0',
|
|
max: '1000000000',
|
|
step: '10000.00',
|
|
precision: 2,
|
|
formatter: formatNumber,
|
|
},
|
|
tbxSupplierDiscountPerc: {
|
|
min: '0',
|
|
max: '100',
|
|
precision: 2,
|
|
formatter: formatNumber,
|
|
},
|
|
radioBalanceHolder: {
|
|
style: 'button',
|
|
},
|
|
tbxSaleBonus: {
|
|
min: '0.00',
|
|
// max: '1.30',
|
|
step: '0.1',
|
|
precision: 2,
|
|
formatter: formatNumber,
|
|
},
|
|
tbxFirstPaymentPerc: {
|
|
min: '0',
|
|
max: '50',
|
|
precision: 2,
|
|
formatter: formatNumber,
|
|
},
|
|
tbxFirstPaymentRub: {
|
|
min: '0',
|
|
max: '1000000000',
|
|
step: '10000.00',
|
|
precision: 2,
|
|
formatter: formatNumber,
|
|
},
|
|
radioLastPaymentRule: {
|
|
style: 'button',
|
|
},
|
|
tbxLastPaymentPerc: {
|
|
min: '0',
|
|
max: '15',
|
|
step: '1.000000',
|
|
precision: 6,
|
|
formatter: formatNumber,
|
|
},
|
|
tbxLastPaymentRub: {
|
|
min: '0',
|
|
max: '1000000000',
|
|
step: '10000.00',
|
|
precision: 2,
|
|
formatter: formatNumber,
|
|
},
|
|
tbxLeasingPeriod: {
|
|
min: '7',
|
|
max: '90',
|
|
},
|
|
tbxParmentsDecreasePercent: {
|
|
min: '50',
|
|
max: '99',
|
|
},
|
|
selectSeasonType: {},
|
|
tbxComissionPerc: {
|
|
min: '0',
|
|
max: '100',
|
|
},
|
|
tbxComissionRub: {
|
|
min: '0',
|
|
max: '1000000000',
|
|
step: '10000.00',
|
|
},
|
|
selectLeaseObjectType: {
|
|
showSearch: true,
|
|
},
|
|
selectBrand: {
|
|
showSearch: true,
|
|
},
|
|
selectModel: {
|
|
showSearch: true,
|
|
},
|
|
selectConfiguration: {
|
|
showSearch: true,
|
|
},
|
|
radioDeliveryTime: {
|
|
showSearch: false,
|
|
style: 'button',
|
|
},
|
|
tbxLeaseObjectCount: {
|
|
min: '1',
|
|
max: '1000',
|
|
},
|
|
selectLeaseObjectUseFor: {
|
|
showSearch: true,
|
|
},
|
|
tbxLeaseObjectYear: {
|
|
min: '1994',
|
|
max: currentYear + 1,
|
|
},
|
|
selectLeaseObjectCategory: {
|
|
showSearch: false,
|
|
},
|
|
selectEngineType: {
|
|
showSearch: true,
|
|
},
|
|
tbxLeaseObjectMotorPower: {
|
|
min: '0.00',
|
|
max: '20000.00',
|
|
step: '10.00',
|
|
precision: 2,
|
|
formatter: formatNumber,
|
|
},
|
|
tbxEngineVolume: {
|
|
min: '0.0000',
|
|
max: '99.9999',
|
|
step: '0.5',
|
|
precision: 4,
|
|
formatter: formatNumber,
|
|
},
|
|
tbxMaxMass: {
|
|
min: '0',
|
|
max: '999999',
|
|
step: '100',
|
|
formatter: formatNumber,
|
|
},
|
|
tbxCountSeats: {
|
|
min: '0',
|
|
max: '2000',
|
|
},
|
|
tbxMaxSpeed: {
|
|
min: '0',
|
|
max: '2000',
|
|
},
|
|
selectDealer: {
|
|
showSearch: true,
|
|
},
|
|
tbxDealerRewardSumm: {
|
|
min: '0.0',
|
|
max: '20.0',
|
|
step: '0.1',
|
|
precision: 1,
|
|
formatter: formatNumber,
|
|
},
|
|
tbxDealerBrokerRewardSumm: {
|
|
min: '0.0',
|
|
max: '20.0',
|
|
step: '0.1',
|
|
precision: 1,
|
|
formatter: formatNumber,
|
|
},
|
|
tbxIndAgentRewardSumm: {
|
|
min: '0.0',
|
|
max: '20.0',
|
|
step: '0.1',
|
|
precision: 1,
|
|
formatter: formatNumber,
|
|
},
|
|
tbxCalcDoubleAgentRewardSumm: {
|
|
min: '0.0',
|
|
max: '20.0',
|
|
step: '0.1',
|
|
precision: 1,
|
|
formatter: formatNumber,
|
|
},
|
|
tbxCalcBrokerRewardSum: {
|
|
min: '0.0',
|
|
max: '20.0',
|
|
step: '0.1',
|
|
precision: 1,
|
|
formatter: formatNumber,
|
|
},
|
|
tbxFinDepartmentRewardSumm: {
|
|
min: '0.0',
|
|
max: '20.0',
|
|
step: '0.1',
|
|
precision: 1,
|
|
formatter: formatNumber,
|
|
},
|
|
radioInsKaskoType: {
|
|
style: 'button',
|
|
},
|
|
tbxInsFranchise: {
|
|
min: '0',
|
|
max: MAX_FRANCHISE,
|
|
step: '10000.00',
|
|
precision: 2,
|
|
formatter: formatNumber,
|
|
},
|
|
btnFranschise: {
|
|
type: 'ghost',
|
|
text: 'Заявление на франшизу',
|
|
},
|
|
tbxInsAgeDrivers: {
|
|
min: '18',
|
|
max: '99',
|
|
},
|
|
tbxInsExpDrivers: {
|
|
min: '0',
|
|
max: '99',
|
|
},
|
|
btnDriversApplication: {
|
|
type: 'ghost',
|
|
text: 'Заявление на ограничения по водителям',
|
|
},
|
|
selectRegionRegistration: {
|
|
showSearch: true,
|
|
},
|
|
selectTownRegistration: {
|
|
showSearch: true,
|
|
},
|
|
radioRequirementTelematic: {
|
|
style: 'button',
|
|
},
|
|
radioQuoteContactGender: {
|
|
style: 'button',
|
|
},
|
|
btnCreateKP: {
|
|
type: 'primary',
|
|
text: 'Создать КП',
|
|
},
|
|
tbxCreditRate: {
|
|
min: '0.00',
|
|
max: '99.99',
|
|
step: '0.1',
|
|
},
|
|
tbxMaxPriceChange: {
|
|
min: '0',
|
|
max: '1000000000',
|
|
step: '10000.00',
|
|
},
|
|
tbxImporterRewardPerc: {
|
|
min: '0.00',
|
|
max: '99.99',
|
|
step: '0.1',
|
|
},
|
|
tbxImporterRewardRub: {
|
|
min: '0',
|
|
max: '1000000000',
|
|
step: '10000.00',
|
|
},
|
|
selectLead: {
|
|
showSearch: true,
|
|
},
|
|
selectOpportunity: {
|
|
showSearch: true,
|
|
},
|
|
selectQuote: {
|
|
showSearch: true,
|
|
},
|
|
btnCalculate: {
|
|
text: 'Рассчитать график',
|
|
type: 'primary',
|
|
},
|
|
tbxIRR_Perc: {
|
|
min: '0.0000',
|
|
max: '500.0000',
|
|
step: '0.0001',
|
|
precision: 6,
|
|
formatter: formatNumber,
|
|
},
|
|
linkDownloadKp: {
|
|
type: 'primary',
|
|
text: 'Скачать КП',
|
|
icon: DownloadOutlined,
|
|
},
|
|
tbxMileage: {
|
|
min: 0,
|
|
step: 100.0,
|
|
precision: 2,
|
|
formatter: formatNumber,
|
|
},
|
|
cbxRecalcWithRevision: {
|
|
text: 'Пересчет без пересмотра',
|
|
containerStyle: {
|
|
marginBottom: '8px',
|
|
},
|
|
},
|
|
radioCalcType: {
|
|
style: 'button',
|
|
},
|
|
tbxTotalPayments: {
|
|
min: 0,
|
|
step: 1000,
|
|
precision: 2,
|
|
formatter: formatNumber,
|
|
},
|
|
componentElt: {
|
|
title: 'Расчет страховки в ЭЛТ',
|
|
},
|
|
radioObjectRegistration: {
|
|
style: 'button',
|
|
},
|
|
radioTypePTS: {
|
|
style: 'button',
|
|
},
|
|
tbxVehicleTaxInYear: {
|
|
min: 0,
|
|
step: 100,
|
|
max: 9999999,
|
|
precision: 2,
|
|
tooltip: {
|
|
title: 'Без учета налога на роскошь',
|
|
placement: 'topLeft',
|
|
},
|
|
},
|
|
tbxVehicleTaxInLeasingPeriod: {
|
|
min: 0,
|
|
step: 100,
|
|
max: 9999999,
|
|
precision: 2,
|
|
},
|
|
selectObjectRegionRegistration: {
|
|
showSearch: true,
|
|
},
|
|
tbxINNForCalc: {
|
|
// validation: {
|
|
// errorMessage: 'Некорректный ИНН',
|
|
// validator: validateInn,
|
|
// },
|
|
},
|
|
tableInsurance: {
|
|
tag: {
|
|
Component: InsuranceTag,
|
|
},
|
|
},
|
|
tbxInsKaskoPriceLeasePeriod: {
|
|
min: 0,
|
|
precision: 2,
|
|
formatter: formatNumber,
|
|
},
|
|
selectLegalClientRegion: {
|
|
showSearch: true,
|
|
},
|
|
selectLegalClientTown: {
|
|
showSearch: true,
|
|
},
|
|
};
|
|
|
|
const resultElementsProps: TElements<ElementProps> = Object.assign(
|
|
{},
|
|
[
|
|
'labelResultTotalGraphwithNDS',
|
|
'labelResultPlPrice',
|
|
'labelResultInsKasko',
|
|
'labelResultInsOsago',
|
|
'labelResultDopProdSum',
|
|
'labelResultFirstPayment',
|
|
'labelResultLastPayment',
|
|
'labelResultAB_FL',
|
|
'labelResultAB_UL',
|
|
'labelResultBonusMPL',
|
|
'labelResultDopMPLLeasing',
|
|
'labelResultBonusDopProd',
|
|
].reduce(
|
|
(ac, a) => ({
|
|
...ac,
|
|
//@ts-ignore
|
|
[a]: { middleware: value => pipe(round, formatMoney)(value) },
|
|
}),
|
|
{},
|
|
),
|
|
[
|
|
'labelResultPriceUpPr',
|
|
'labelResultIRRGraphPerc',
|
|
'labelResultIRRNominalPerc',
|
|
'labelResultTerm',
|
|
].reduce(
|
|
(ac, a) => ({
|
|
...ac,
|
|
[a]: { middleware: value => round(value) },
|
|
}),
|
|
{},
|
|
),
|
|
);
|
|
export default Object.assign(elementsProps, resultElementsProps);
|