diff --git a/apps/ats/web/src/i18n/en/security/coupons.ts b/apps/ats/web/src/i18n/en/security/coupons.ts index e733b165b..a15814ad7 100644 --- a/apps/ats/web/src/i18n/en/security/coupons.ts +++ b/apps/ats/web/src/i18n/en/security/coupons.ts @@ -240,18 +240,21 @@ export default { placeholder: '0,123%', tooltip: 'Interest rate for the coupon.', }, - period: { - label: 'Coupon period', - placeholder: 'Select coupon period', + startDate: { + label: 'Start date', + placeholder: 'Select start date', + tooltip: 'Coupon’s start date, must occur before the end date.', + }, + endDate: { + label: 'End date', + placeholder: 'Select end date', tooltip: - 'The period between coupon payments. This field is required for all coupon operations.', - options: { - day: '1 Day', - week: '1 Week', - month: '1 Month', - quarter: '3 Months', - year: '1 Year', - }, + 'Coupon’s end date, Accrual period correspond to the period between start and end date.', + }, + fixingDate: { + label: 'Fixing date', + placeholder: 'Select fixing date', + tooltip: 'Coupon’s fixing date, floating rate coupons only.', }, }, }, @@ -275,7 +278,9 @@ export default { details: { title: 'Detail', paymentDay: 'Payment day', - period: 'Period', + startDay: 'start day', + endDay: 'end day', + fixingDay: 'fixing day', amount: 'Amount', }, }, diff --git a/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/CouponsList.tsx b/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/CouponsList.tsx index 4c1c5ad34..b8df749b0 100644 --- a/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/CouponsList.tsx +++ b/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/CouponsList.tsx @@ -8,11 +8,7 @@ import { createColumnHelper } from '@tanstack/table-core'; import { Table, Text } from 'io-bricks-ui'; import { useTranslation } from 'react-i18next'; import { DATE_TIME_FORMAT } from '../../../../utils/constants'; -import { - formatDate, - formatCouponPeriod, - formatNumberLocale, -} from '../../../../utils/format'; +import { formatDate, formatNumberLocale } from '../../../../utils/format'; export const CouponsList = () => { const { id } = useParams(); @@ -54,9 +50,19 @@ export const CouponsList = () => { `${formatNumberLocale(row.getValue(), row.row.original.rateDecimals ?? 0)}%`, enableSorting: false, }), - columnHelper.accessor('period', { - header: t('columns.period'), - cell: (row) => formatCouponPeriod(row.getValue()), + columnHelper.accessor('startDate', { + header: t('columns.startDate'), + cell: (row) => formatDate(row.getValue(), DATE_TIME_FORMAT), + enableSorting: false, + }), + columnHelper.accessor('endDate', { + header: t('columns.endDate'), + cell: (row) => formatDate(row.getValue(), DATE_TIME_FORMAT), + enableSorting: false, + }), + columnHelper.accessor('fixingDate', { + header: t('columns.fixingDate'), + cell: (row) => formatDate(row.getValue(), DATE_TIME_FORMAT), enableSorting: false, }), columnHelper.accessor('snapshotId', { diff --git a/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/ProgramCoupon.tsx b/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/ProgramCoupon.tsx index 6c8bb46a5..60831b2d1 100644 --- a/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/ProgramCoupon.tsx +++ b/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/ProgramCoupon.tsx @@ -208,7 +208,6 @@ import { CalendarInputController, InputNumberController, PhosphorIcon, - SelectController, Text, Tooltip, } from 'io-bricks-ui'; @@ -223,18 +222,17 @@ import { import { useParams } from 'react-router-dom'; import { useCoupons } from '../../../../hooks/queries/useCoupons'; import { useGetBondDetails } from '../../../../hooks/queries/useGetSecurityDetails'; -import { - dateToUnixTimestamp, - validateCouponPeriod, -} from '../../../../utils/format'; -import { DATE_TIME_FORMAT, TIME_PERIODS_S } from '../../../../utils/constants'; +import { dateToUnixTimestamp } from '../../../../utils/format'; +import { DATE_TIME_FORMAT } from '../../../../utils/constants'; import { isBeforeDate } from '../../../../utils/helpers'; interface ProgramCouponFormValues { rate: number; recordTimestamp: string; executionTimestamp: string; - period: string; + startTimestamp: string; + endTimestamp: string; + fixingTimestamp: string; } export const ProgramCoupon = () => { @@ -249,6 +247,8 @@ export const ProgramCoupon = () => { const { t: tGlobal } = useTranslation('globals'); const { id = '' } = useParams(); const recordTimestamp = watch('recordTimestamp'); + const startTimestamp = watch('startTimestamp'); + const fixingTimestamp = watch('fixingTimestamp'); const { data: bondDetails } = useGetBondDetails( new GetBondDetailsRequest({ @@ -262,7 +262,10 @@ export const ProgramCoupon = () => { rate: params.rate.toString(), recordTimestamp: dateToUnixTimestamp(params.recordTimestamp), executionTimestamp: dateToUnixTimestamp(params.executionTimestamp), - period: params.period, + startTimestamp: dateToUnixTimestamp(params.startTimestamp), + endTimestamp: dateToUnixTimestamp(params.endTimestamp), + fixingTimestamp: dateToUnixTimestamp(params.fixingTimestamp), + rateStatus: 1 }); createCoupon(request, { @@ -321,7 +324,9 @@ export const ProgramCoupon = () => { id="executionTimestamp" rules={{ required, - validate: isAfterDate(new Date(recordTimestamp)), + validate: + isAfterDate(new Date(recordTimestamp)) && + isAfterDate(new Date(fixingTimestamp)), }} fromDate={new Date()} toDate={new Date(bondDetails.maturityDate)} @@ -331,6 +336,77 @@ export const ProgramCoupon = () => { /> )} + + + + {tForm('startDate.label')}* + + + + + + {bondDetails && ( + + )} + + + + + {tForm('endDate.label')}* + + + + + + {bondDetails && ( + + )} + + + + + {tForm('fixingDate.label')}* + + + + + + {bondDetails && ( + + )} + {tForm('rate.label')}* @@ -351,50 +427,6 @@ export const ProgramCoupon = () => { decimalSeparator="." /> - - - - {tForm('period.label')}* - - - - - - { - const validation = validateCouponPeriod(parseInt(value)); - return validation === true || validation; - }, - }} - placeholder={tForm('period.placeholder')} - options={[ - { - label: tForm('period.options.day'), - value: TIME_PERIODS_S.DAY.toString(), - }, - { - label: tForm('period.options.week'), - value: TIME_PERIODS_S.WEEK.toString(), - }, - { - label: tForm('period.options.month'), - value: TIME_PERIODS_S.MONTH.toString(), - }, - { - label: tForm('period.options.quarter'), - value: TIME_PERIODS_S.QUARTER.toString(), - }, - { - label: tForm('period.options.year'), - value: TIME_PERIODS_S.YEAR.toString(), - }, - ]} - /> -