diff --git a/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.test.tsx b/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.test.tsx
index a86a405f1c..4a94759469 100644
--- a/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.test.tsx
+++ b/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.test.tsx
@@ -379,6 +379,30 @@ describe('TransferModal', () => {
).toBeInTheDocument();
});
+ it('should allow editing the transfer date for one-time transfers', async () => {
+ const { getByLabelText } = render();
+
+ const transferDate = getByLabelText(/transfer date/i);
+ expect(transferDate).toBeEnabled();
+
+ userEvent.clear(transferDate);
+ userEvent.type(transferDate, '12/01/2099');
+ expect(transferDate).toHaveValue('12/01/2099');
+ });
+
+ it('should reject a past transfer date for one-time transfers', async () => {
+ const { getByLabelText, findByText } = render();
+
+ const transferDate = getByLabelText(/transfer date/i);
+ userEvent.clear(transferDate);
+ userEvent.type(transferDate, '12/31/2019');
+ userEvent.tab();
+
+ expect(
+ await findByText('Transfer start date cannot be in the past'),
+ ).toBeInTheDocument();
+ });
+
it('should show error message when monthly schedule is selected', async () => {
const { getByRole, getByLabelText, findByText } = render();
@@ -464,8 +488,8 @@ describe('TransferModal', () => {
});
describe('Mutations', () => {
- it('should create a one-time transfer', async () => {
- const { getByRole } = render();
+ it('should create a one-time transfer with the selected transfer date', async () => {
+ const { getByRole, getByLabelText } = render();
const amountField = getByRole('spinbutton', { name: /amount/i });
@@ -475,6 +499,12 @@ describe('TransferModal', () => {
userEvent.clear(amountField);
userEvent.type(amountField, '100');
+ const transferDate = getByLabelText(/transfer date/i);
+ userEvent.clear(transferDate);
+ userEvent.type(transferDate, '12/01/2099');
+ expect(transferDate).toHaveValue('12/01/2099');
+ userEvent.tab();
+
userEvent.click(getByRole('button', { name: /submit/i }));
await waitFor(() => {
@@ -487,6 +517,7 @@ describe('TransferModal', () => {
sourceFundTypeName: 'Staff Account',
destinationFundTypeName: 'Staff Savings',
description: '',
+ transactedAt: '2099-12-01T00:00:00.000+00:00',
}),
}),
}),
diff --git a/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.tsx b/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.tsx
index d09fd8bd40..bbc6817403 100644
--- a/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.tsx
+++ b/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.tsx
@@ -104,9 +104,12 @@ const transferSchema = (locale: string) =>
}
return this.createError({
- message: i18n.t(
- 'Recurring transfers must start at least one day in the future',
- ),
+ message:
+ schedule === ScheduleEnum.OneTime
+ ? i18n.t('Transfer start date cannot be in the past')
+ : i18n.t(
+ 'Recurring transfers must start at least one day in the future',
+ ),
});
}),
endDate: yup
@@ -216,6 +219,7 @@ export const TransferModal: React.FC = ({
sourceFundTypeName: transferFrom,
destinationFundTypeName: transferTo,
description: note,
+ transactedAt: convertedTransferDate,
},
});
} else {
@@ -429,11 +433,21 @@ export const TransferModal: React.FC = ({
{schedule === ScheduleEnum.OneTime ? (
- {
+ setFieldValue('transferDate', date);
+ setFieldTouched('transferDate', true, false);
+ }}
+ error={
+ touched.transferDate && Boolean(errors.transferDate)
+ }
+ helperText={
+ touched.transferDate &&
+ (errors.transferDate as string)
+ }
+ required
/>
) : (
diff --git a/src/components/HrTools/SavingsFundTransfer/TransferMutations.graphql b/src/components/HrTools/SavingsFundTransfer/TransferMutations.graphql
index 45b79e69d0..7b35296797 100644
--- a/src/components/HrTools/SavingsFundTransfer/TransferMutations.graphql
+++ b/src/components/HrTools/SavingsFundTransfer/TransferMutations.graphql
@@ -47,6 +47,7 @@ mutation CreateTransfer(
$destinationFundTypeName: String!
$description: String!
$amount: Float!
+ $transactedAt: ISO8601DateTime!
) {
createTransfer(
input: {
@@ -54,6 +55,7 @@ mutation CreateTransfer(
destinationFundTypeName: $destinationFundTypeName
description: $description
amount: $amount
+ transactedAt: $transactedAt
}
) {
message