Skip to content

Commit dfdcb2b

Browse files
authored
Merge pull request #218 from nitheesh-aot/req-changes
Regulatory Consideration
2 parents 4234a13 + 6670c0e commit dfdcb2b

22 files changed

+707
-226
lines changed

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -200,13 +200,8 @@ def validate_agency_id(
200200
"""Validate the agency if the requirement type is regulatory considerations."""
201201
req_type = data.get("req_type")
202202
agency_id = data.get("agency_id", None)
203-
if req_type == InspectionRequirementTypeEnum.REG and not agency_id:
204-
raise ValidationError(
205-
"Agency is required if the requirement type is Regulatory Consideration",
206-
field_name="agency_id",
207-
)
208203
enforcement_action_ids = data.get("enforcement_action_ids")
209-
if (
204+
if req_type == InspectionRequirementTypeEnum.REQ and (
210205
EnforcementActionOptionEnum.REFERRAL_TO_ANOTHER_AGENCY
211206
in enforcement_action_ids
212207
and not agency_id

compliance-api/src/compliance_api/services/inspection_requirement.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,12 +226,12 @@ def _handle_deletion_req_detail_nd_doc(
226226
existing_detail_ids = {detail.id for detail in existing_details}
227227
incoming_details_ids = {
228228
detail.get("id", None)
229-
for detail in requirement_data.get("requirement_source_details")
229+
for detail in requirement_data.get("requirement_source_details", [])
230230
if detail.get("id", None) is not None
231231
}
232232
incoming_doc_detail_ids = set(
233233
doc.get("id", None)
234-
for detail in requirement_data.get("requirement_source_details")
234+
for detail in requirement_data.get("requirement_source_details", [])
235235
for doc in detail.get("documents", [])
236236
if doc.get("id", None) is not None
237237
)

compliance-web/src/components/App/CaseFiles/CaseFileDrawer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ const CaseFileDrawer: React.FC<CaseFileDrawerProps> = ({
9191
caseFileNumber: caseFile.case_file_number,
9292
authorization: formatAuthorization(caseFile.authorization),
9393
regulatedParty: caseFile.regulated_party,
94-
projectDescription: caseFile.project_description,
94+
projectDescription: caseFile.project_description ?? "",
9595
projectType: caseFile.type,
9696
projectSubType: caseFile.sub_type,
9797
};

compliance-web/src/components/App/CaseFiles/Profile/CaseFileComplaintsTable.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ const CaseFileComplaintsTable = ({ caseFileId }: { caseFileId: number }) => {
5151
{
5252
accessorKey: "complaint_number",
5353
header: "Complaint #",
54-
sortingFn: "sortFn",
5554
filterFn: searchFilter,
5655
Cell: ({ row }) => {
5756
return (

compliance-web/src/components/App/CaseFiles/Profile/CaseFileInspectionsTable.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ const CaseFileInspectionsTable = ({ caseFileId }: { caseFileId: number }) => {
3636
{
3737
accessorKey: "ir_number",
3838
header: "IR #",
39-
sortingFn: "sortFn",
4039
filterFn: searchFilter,
4140
Cell: ({ row }) => {
4241
return (

compliance-web/src/components/App/Complaints/ComplaintFormLeft.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ const ComplaintFormLeft: FC<ComplaintFormLeftProps> = ({ staffUsersList }) => {
4747
getOptionKey={(option) => option.id}
4848
isOptionEqualToValue={(option, value) => option.id === value.id}
4949
fullWidth
50+
isSortOptions
5051
/>
5152
<ControlledDateField
5253
name="dateReceived"

compliance-web/src/components/App/Inspections/InspectionDrawer.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,11 @@ const InspectionDrawer: React.FC<InspectionDrawerProps> = ({
6464
const { data: attendanceList } = useAttendanceOptionsData();
6565
const { data: agenciesList } = useAgenciesData();
6666
const { data: firstNationsList } = useFirstNationsData();
67-
const { data: inattendanceOfficersList } = useStaffUsersData(true)
67+
const { data: inattendanceOfficersList } = useStaffUsersData(true);
6868
const currentUser = useCurrentLoggedInUser();
6969

70-
const staffUserList = [
71-
caseFile.primary_officer,
72-
...(caseFile.officers ?? []),
73-
].filter(Boolean) as StaffUser[];
70+
const staffUserList = [caseFile.primary_officer, ...(caseFile.officers ?? [])]
71+
.filter(Boolean) as StaffUser[];
7472

7573
const defaultValues = useMemo<InspectionFormData>(() => {
7674
if (inspection) {

compliance-web/src/components/App/Inspections/InspectionFormLeft.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ const InspectionFormLeft: FC<InspectionFormLeftProps> = ({
7272
getOptionKey={(option) => option.id}
7373
isOptionEqualToValue={(option, value) => option.id === value.id}
7474
fullWidth
75+
isSortOptions
7576
/>
7677
<ControlledAutoComplete
7778
name="initiation"

compliance-web/src/components/App/Inspections/InspectionFormUtils.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,7 @@ export const InspectionFormSchema = yup.object().shape({
3939
endDate: yup
4040
.mixed<Dayjs>()
4141
.nullable()
42-
.typeError("Invalid date")
43-
.test(
44-
"is-greater",
45-
"End date must be greater than start date",
46-
function (value) {
47-
const { startDate } = this.parent;
48-
return !value || !startDate || value.isAfter(startDate);
49-
}
50-
),
42+
.typeError("Invalid date"),
5143
initiation: yup
5244
.object<Initiation>()
5345
.nullable()

compliance-web/src/components/App/Inspections/Profile/InspectionRequirements.tsx

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ import { AddRounded } from "@mui/icons-material";
88
import { Box, Button, Typography } from "@mui/material";
99
import { useQueryClient } from "@tanstack/react-query";
1010
import { Reorder } from "framer-motion";
11-
import React, { useCallback } from "react";
11+
import React, { useCallback, useEffect } from "react";
1212
import RequirementCard from "./Requirements/RequirementCard";
13+
import { REGULATORY_CONSIDERATION_TYPE_ID, REQUIREMENT_TYPE_ID } from "./Requirements/RequirementUtils";
1314

1415
interface InspectionRequirementsProps {
1516
inspectionData: Inspection;
@@ -19,21 +20,33 @@ const InspectionRequirements: React.FC<InspectionRequirementsProps> = ({
1920
inspectionData,
2021
}) => {
2122
const queryClient = useQueryClient();
22-
const { setOpen } = useDrawer();
23+
const { setOpen, isOpen } = useDrawer();
2324
const [activeRequirementId, setActiveRequirementId] = React.useState<
2425
number | null
2526
>(null);
2627
const [inspectionRequirements, setInspectionRequirements] = React.useState<
2728
InspectionRequirement[]
2829
>([]);
30+
const [regulatoryConsideration, setRegulatoryConsideration] = React.useState<
31+
InspectionRequirement | null
32+
>(null);
2933

3034
const { data: inspectionRequirementsData } = useInspectionRequirementsData(
3135
inspectionData.id
3236
);
3337

34-
React.useEffect(() => {
38+
useEffect(() => {
3539
if (inspectionRequirementsData) {
36-
setInspectionRequirements(inspectionRequirementsData);
40+
setInspectionRequirements(
41+
inspectionRequirementsData.filter(
42+
(req) => req.req_type?.id === REQUIREMENT_TYPE_ID
43+
)
44+
);
45+
setRegulatoryConsideration(
46+
inspectionRequirementsData.find(
47+
(req) => req.req_type?.id === REGULATORY_CONSIDERATION_TYPE_ID
48+
) ?? null
49+
);
3750
}
3851
}, [inspectionRequirementsData]);
3952

@@ -53,11 +66,12 @@ const InspectionRequirements: React.FC<InspectionRequirementsProps> = ({
5366
<RequirementDrawer
5467
onSubmit={handleOnSubmit}
5568
inspectionData={inspectionData}
69+
isRegulatoryConsiderationExists={!!regulatoryConsideration}
5670
/>
5771
),
5872
width: "1228px",
5973
});
60-
}, [setOpen, handleOnSubmit, inspectionData]);
74+
}, [setOpen, handleOnSubmit, inspectionData, regulatoryConsideration]);
6175

6276
const handleOpenEditRequirementModal = useCallback(
6377
(requirement: InspectionRequirement, index: number) => {
@@ -66,20 +80,26 @@ const InspectionRequirements: React.FC<InspectionRequirementsProps> = ({
6680
content: (
6781
<RequirementDrawer
6882
onSubmit={(submitMsg) => {
69-
setActiveRequirementId(null);
7083
handleOnSubmit(submitMsg);
7184
}}
7285
inspectionData={inspectionData}
73-
requirement={requirement}
86+
requirement={requirement}
7487
index={index}
88+
isRegulatoryConsiderationExists={!!regulatoryConsideration}
7589
/>
7690
),
7791
width: "1228px",
7892
});
7993
},
80-
[setOpen, handleOnSubmit, inspectionData]
94+
[setOpen, handleOnSubmit, inspectionData, regulatoryConsideration]
8195
);
8296

97+
React.useEffect(() => {
98+
if (!isOpen) {
99+
setActiveRequirementId(null);
100+
}
101+
}, [isOpen]);
102+
83103
return (
84104
<Box
85105
display={"flex"}
@@ -115,6 +135,15 @@ const InspectionRequirements: React.FC<InspectionRequirementsProps> = ({
115135
/>
116136
))}
117137
</Reorder.Group>
138+
{regulatoryConsideration && (
139+
<RequirementCard
140+
key={regulatoryConsideration.id}
141+
requirement={regulatoryConsideration}
142+
index={inspectionRequirements.length}
143+
onEdit={() => handleOpenEditRequirementModal(regulatoryConsideration, inspectionRequirements.length)}
144+
isActive={regulatoryConsideration.id === activeRequirementId}
145+
/>
146+
)}
118147
</Box>
119148
);
120149
};

0 commit comments

Comments
 (0)