import DownloadOutlined from '@ant-design/icons/lib/icons/DownloadOutlined'; import InsuranceTag from 'client/Components/Calculation/InsuranceTag'; import { currentYear } from 'core/tools/date'; import { formatMoney, formatNumber } from 'core/tools/format'; import { compose } 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 = { 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: '60', }, 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.00', max: '99.99', step: '0.50', precision: 2, 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: '75000', 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, }, }; const resultElementsProps: TElements = Object.assign( {}, [ 'labelResultTotalGraphwithNDS', 'labelResultPlPrice', 'labelResultInsKasko', 'labelResultInsOsago', 'labelResultDopProdSum', 'labelResultFirstPayment', 'labelResultLastPayment', 'labelResultAB_FL', 'labelResultAB_UL', 'labelResultBonusMPL', 'labelResultDopMPLLeasing', 'labelResultBonusDopProd', ].reduce( (ac, a) => ({ ...ac, [a]: { middleware: value => compose(round, formatMoney)(value || 0) }, }), {}, ), [ 'labelResultPriceUpPr', 'labelResultIRRGraphPerc', 'labelResultIRRNominalPerc', 'labelResultTerm', ].reduce( (ac, a) => ({ ...ac, [a]: { middleware: value => round(value || 0) }, }), {}, ), ); export default Object.assign(elementsProps, resultElementsProps);