Skip to content

Commit 8a034eb

Browse files
authored
Merge pull request #205 from dinesh-aot/COMP-306
Future date restriction for CR
2 parents 79c072c + 04d616f commit 8a034eb

File tree

2 files changed

+28
-16
lines changed

2 files changed

+28
-16
lines changed

compliance-api/src/compliance_api/schemas/continuation_report.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
"""Schema of continuation report."""
22

3-
from marshmallow import EXCLUDE, fields, post_dump
3+
from datetime import datetime, timedelta
4+
5+
from marshmallow import EXCLUDE, ValidationError, fields, post_dump, validates
46
from marshmallow_enum import EnumField
57

68
from compliance_api.models.continuation_report import ContinuationReport, ContinuationReportKey
@@ -117,6 +119,15 @@ class ContinuationReportUpdateSchema(BaseSchema): # pylint: disable=too-many-an
117119
},
118120
)
119121

122+
@validates("date_created")
123+
def validate_date_created(self, value): # pylint: disable=no-self-use
124+
"""Validate that date_created is not later than current date + 1."""
125+
current_date_plus_one = datetime.utcnow() + timedelta(days=1)
126+
if value > current_date_plus_one:
127+
raise ValidationError(
128+
f"date_created must not be later than {current_date_plus_one.strftime(INPUT_DATE_TIME_FORMAT)}."
129+
)
130+
120131

121132
class ContinuationReportCreateSchema(
122133
ContinuationReportUpdateSchema

compliance-web/src/components/App/ContinuationReports/ContinuationReportEntryModal.tsx

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
import { DialogContent } from "@mui/material";
2-
import { useEffect, useMemo } from "react";
3-
import * as yup from "yup";
4-
import { FormProvider, useForm } from "react-hook-form";
5-
import { yupResolver } from "@hookform/resolvers/yup";
6-
import ModalTitleBar from "@/components/Shared/Modals/ModalTitleBar";
7-
import ModalActions from "@/components/Shared/Modals/ModalActions";
8-
import dayjs, { Dayjs } from "dayjs";
9-
import {
10-
ContinuationReport,
11-
ContinuationReportAPIData,
12-
ContinuationReportFormData,
13-
} from "@/models/ContinuationReport";
14-
import ControlledRichTextEditor from "@/components/Shared/Controlled/ControlledRichTextEditor";
151
import ControlledDateTimeField from "@/components/Shared/Controlled/ControlledDateTimeField";
2+
import ControlledRichTextEditor from "@/components/Shared/Controlled/ControlledRichTextEditor";
3+
import ModalActions from "@/components/Shared/Modals/ModalActions";
4+
import ModalTitleBar from "@/components/Shared/Modals/ModalTitleBar";
165
import {
176
useCreateContinuationReportEntry,
187
useDeleteContinuationReportEntry,
198
useUpdateContinuationReportEntry,
209
} from "@/hooks/useContinuationReports";
10+
import {
11+
ContinuationReport,
12+
ContinuationReportAPIData,
13+
ContinuationReportFormData,
14+
} from "@/models/ContinuationReport";
2115
import dateUtils from "@/utils/dateUtils";
16+
import { yupResolver } from "@hookform/resolvers/yup";
17+
import { DialogContent } from "@mui/material";
18+
import dayjs, { Dayjs } from "dayjs";
19+
import { useEffect, useMemo } from "react";
20+
import { FormProvider, useForm } from "react-hook-form";
21+
import * as yup from "yup";
2222
import { ContinuationReportContextType } from "./ContinuationReport";
2323

2424
type ContinuationReportEntryModal = {
@@ -74,7 +74,7 @@ const ContinuationReportEntryModal: React.FC<ContinuationReportEntryModal> = ({
7474
mode: "onBlur",
7575
defaultValues,
7676
});
77-
77+
const maxSelectableDate = dayjs().add(1, "day");
7878
const { handleSubmit, reset } = methods;
7979

8080
useEffect(() => {
@@ -132,6 +132,7 @@ const ContinuationReportEntryModal: React.FC<ContinuationReportEntryModal> = ({
132132
name="dateOfEntry"
133133
label="Date and Time"
134134
sx={{ width: "50%" }}
135+
maxDateTime={maxSelectableDate}
135136
/>
136137
<ControlledRichTextEditor label="Entry" name="entry" />
137138
</DialogContent>

0 commit comments

Comments
 (0)