diff --git a/apps/web/Components/Calculation/Settings/config.ts b/apps/web/Components/Calculation/Settings/config.ts index 6684545..982cef7 100644 --- a/apps/web/Components/Calculation/Settings/config.ts +++ b/apps/web/Components/Calculation/Settings/config.ts @@ -2,7 +2,7 @@ import type { FormTabRows } from '../lib/render-rows'; const defaultRowStyle = { gridTemplateColumns: '1fr' }; -export const rows: FormTabRows = [ +export const mainRows: FormTabRows = [ { title: 'Выбор Интереса/ЛС' }, [['selectLead'], defaultRowStyle], [['selectOpportunity'], defaultRowStyle], @@ -14,10 +14,20 @@ export const rows: FormTabRows = [ gridTemplateColumns: ['1fr 0.15fr'], }, ], +]; +export const paramsRows: FormTabRows = [ { title: 'Параметры расчета' }, [['labelIrrInfo'], defaultRowStyle], [['radioCalcType'], defaultRowStyle], [['tbxIRR_Perc'], defaultRowStyle], [['tbxTotalPayments'], defaultRowStyle], ]; + +export const unlimitedParamsRows: FormTabRows = [ + { title: 'Параметры расчета' }, + [['labelIrrInfo'], defaultRowStyle], + [['radioCalcType'], defaultRowStyle], + [['tbxIRR_Perc', 'tbxPi'], { gridTemplateColumns: '1fr 1fr' }], + [['tbxTotalPayments'], defaultRowStyle], +]; diff --git a/apps/web/Components/Calculation/Settings/index.jsx b/apps/web/Components/Calculation/Settings/index.jsx index 35cfa80..f7c0a6e 100644 --- a/apps/web/Components/Calculation/Settings/index.jsx +++ b/apps/web/Components/Calculation/Settings/index.jsx @@ -1,6 +1,7 @@ import renderFormRows from '../lib/render-rows'; -import { rows } from './config'; +import * as config from './config'; import Background from '@/Components/Layout/Background'; +import { useStore } from '@/stores/hooks'; import { min } from '@/styles/mq'; import styled from 'styled-components'; @@ -17,5 +18,17 @@ const Wrapper = styled(Background)` `; export default function Settings() { - return {renderFormRows(rows)}; + const { $process } = useStore(); + + const mainRows = renderFormRows(config.mainRows); + const paramsRows = $process.has('Unlimited') + ? renderFormRows(config.unlimitedParamsRows) + : renderFormRows(config.paramsRows); + + return ( + + {mainRows} + {paramsRows} + + ); } diff --git a/apps/web/Components/Calculation/config/elements-components.ts b/apps/web/Components/Calculation/config/elements-components.ts index 323b557..62db886 100644 --- a/apps/web/Components/Calculation/config/elements-components.ts +++ b/apps/web/Components/Calculation/config/elements-components.ts @@ -133,6 +133,7 @@ const components = wrapComponentsMap({ tbxVIN: e.Input, selectUser: e.Select, cbxSupplierFinancing: e.Switch, + tbxPi: e.InputNumber, /** Readonly Elements */ labelLeaseObjectRisk: e.Text, diff --git a/apps/web/Components/Calculation/config/elements-props.tsx b/apps/web/Components/Calculation/config/elements-props.tsx index b962483..9f50bf9 100644 --- a/apps/web/Components/Calculation/config/elements-props.tsx +++ b/apps/web/Components/Calculation/config/elements-props.tsx @@ -481,7 +481,19 @@ const props: Partial = { optionFilterProp: 'label', }, tbxIRR_Perc: { - min: 0, + min: -500, + max: 500, + step: 0.0001, + precision: 6, + parser, + formatter: createFormatter({ minimumFractionDigits: 6, maximumFractionDigits: 6 }), + addonAfter: '%', + style: { + width: '100%', + }, + }, + tbxPi: { + min: -500, max: 500, step: 0.0001, precision: 6, diff --git a/apps/web/Components/Calculation/config/elements-titles.ts b/apps/web/Components/Calculation/config/elements-titles.ts index 03a3b8d..7337ae4 100644 --- a/apps/web/Components/Calculation/config/elements-titles.ts +++ b/apps/web/Components/Calculation/config/elements-titles.ts @@ -127,6 +127,7 @@ const titles: Record = { tbxVIN: 'VIN', selectUser: 'Пользователь', cbxSupplierFinancing: 'Финансирование поставщика', + tbxPi: 'PI', /** Link Elements */ linkDownloadKp: '', diff --git a/apps/web/Components/Calculation/config/elements-types.ts b/apps/web/Components/Calculation/config/elements-types.ts index 58834fd..dc22621 100644 --- a/apps/web/Components/Calculation/config/elements-types.ts +++ b/apps/web/Components/Calculation/config/elements-types.ts @@ -192,6 +192,7 @@ const types = wrapElementsTypes({ tbxVIN: t.Value, selectUser: t.Options, cbxSupplierFinancing: t.Switch, + tbxPi: t.Number, labelLeaseObjectRisk: t.Readonly, tbxInsKaskoPriceLeasePeriod: t.Readonly, diff --git a/apps/web/Components/Calculation/config/map/values.ts b/apps/web/Components/Calculation/config/map/values.ts index 80a6dd5..bfa9fdc 100644 --- a/apps/web/Components/Calculation/config/map/values.ts +++ b/apps/web/Components/Calculation/config/map/values.ts @@ -130,6 +130,7 @@ const elementsToValues = wrapElementsMap({ tbxVIN: 'vin', selectUser: 'user', cbxSupplierFinancing: 'supplierFinancing', + tbxPi: 'pi', /** Readonly Elements */ labelLeaseObjectRisk: 'leaseObjectRiskName', diff --git a/apps/web/config/default-options.ts b/apps/web/config/default-options.ts index f1f9570..eca1773 100644 --- a/apps/web/config/default-options.ts +++ b/apps/web/config/default-options.ts @@ -193,14 +193,14 @@ export const radioCalcType = [ label: 'IRR', value: 100_000_000, }, - { - label: 'Суммы', - value: 100_000_001, - }, { label: 'PI', value: 100_000_099, }, + { + label: 'Суммы', + value: 100_000_001, + }, ]; export const selectRequirementTelematic = [ @@ -503,6 +503,7 @@ const defaultOptions: CalculationOptions = { tbxVIN: [], selectUser: [], cbxSupplierFinancing: [], + tbxPi: [], }; export default defaultOptions; diff --git a/apps/web/config/default-statuses.ts b/apps/web/config/default-statuses.ts index e2bc520..48cd1bd 100644 --- a/apps/web/config/default-statuses.ts +++ b/apps/web/config/default-statuses.ts @@ -126,6 +126,7 @@ const defaultStatuses: CalculationStatuses = { tbxMileage: 'Default', tbxMinPriceChange: 'Default', tbxParmentsDecreasePercent: 'Default', + tbxPi: 'Default', tbxQuoteName: 'Default', tbxRedemptionPaymentSum: 'Disabled', tbxSaleBonus: 'Default', diff --git a/apps/web/config/default-values.ts b/apps/web/config/default-values.ts index d398ec7..f2dd0e1 100644 --- a/apps/web/config/default-values.ts +++ b/apps/web/config/default-values.ts @@ -101,6 +101,7 @@ const defaultValues: CalculationValues = { opportunity: null, opportunityUrl: null, parmentsDecreasePercent: 94, + pi: 0, plPriceRub: 0, priceWithDiscount: false, product: null, @@ -134,12 +135,12 @@ const defaultValues: CalculationValues = { townRegistration: null, tracker: null, typePTS: null, + user: null, VATInLeaseObjectPrice: 0, vehicleTaxInLeasingPeriod: 0, vehicleTaxInYear: 0, - withTrailer: false, vin: null, - user: null, + withTrailer: false, }; export default defaultValues; diff --git a/apps/web/config/schema/values.ts b/apps/web/config/schema/values.ts index 1c6fc82..06b0478 100644 --- a/apps/web/config/schema/values.ts +++ b/apps/web/config/schema/values.ts @@ -90,6 +90,7 @@ const ValuesSchema = z.object({ objectTypeTax: z.number().nullable(), opportunity: z.string().nullable(), parmentsDecreasePercent: z.number(), + pi: z.number(), priceWithDiscount: z.boolean(), product: z.string().nullable(), quote: z.string().nullable(), @@ -119,12 +120,12 @@ const ValuesSchema = z.object({ townRegistration: z.string().nullable(), tracker: z.string().nullable(), typePTS: z.number().nullable(), + user: z.string().nullable(), VATInLeaseObjectPrice: z.number(), vehicleTaxInLeasingPeriod: z.number(), vehicleTaxInYear: z.number(), - withTrailer: z.boolean(), vin: z.string().nullable(), - user: z.string().nullable(), + withTrailer: z.boolean(), /** * Link Values diff --git a/apps/web/server/routers/calculate/lib/request.ts b/apps/web/server/routers/calculate/lib/request.ts index 222ae74..9d8fc0c 100644 --- a/apps/web/server/routers/calculate/lib/request.ts +++ b/apps/web/server/routers/calculate/lib/request.ts @@ -858,7 +858,7 @@ export async function createRequestData({ }, async npvniExpected() { - return 0; + return values.pi / 100; }, async nsBonus() { diff --git a/apps/web/server/routers/calculate/lib/transform.ts b/apps/web/server/routers/calculate/lib/transform.ts index 0b597ef..a9725d6 100644 --- a/apps/web/server/routers/calculate/lib/transform.ts +++ b/apps/web/server/routers/calculate/lib/transform.ts @@ -104,6 +104,7 @@ export function transformCalculateResults({ IRR_Perc: columns?.cashflowMsfoColumn?.nominal * 100, downloadKp: null, lastPaymentRub: last(columns?.sumWithVatColumn?.values) || 0, + pi: columns?.piColumn.values[0] * 100, totalPayments: columns?.sumWithVatColumn?.values[0] - inputValues.subsidySum, }; diff --git a/apps/web/server/routers/calculate/types.ts b/apps/web/server/routers/calculate/types.ts index f3ba96e..d17f387 100644 --- a/apps/web/server/routers/calculate/types.ts +++ b/apps/web/server/routers/calculate/types.ts @@ -25,6 +25,7 @@ export const OutputDataSchema = z.object({ IRR_Perc: true, downloadKp: true, lastPaymentRub: true, + pi: true, totalPayments: true, }), });