Skip to content

Commit 67d1350

Browse files
authored
[Comp-790] inspection requirement grid IR issue date (#719)
1 parent 3462f63 commit 67d1350

File tree

1 file changed

+30
-20
lines changed

1 file changed

+30
-20
lines changed

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

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,17 @@ def _get_requirement_restorative_justice_sub_query():
621621
)
622622

623623

624+
def _get_inspection_date_issued_sub_query():
625+
return (
626+
db.session.query(
627+
InspectionRecordModel.inspection_id,
628+
func.max(InspectionRecordModel.date_issued).label("date_issued")
629+
)
630+
.group_by(InspectionRecordModel.inspection_id)
631+
.subquery()
632+
)
633+
634+
624635
def _create_model_aliases():
625636
"""Create and return all model aliases needed for the query."""
626637
return {
@@ -631,7 +642,6 @@ def _create_model_aliases():
631642
"req": aliased(InspectionRequirementModel),
632643
"insp": aliased(InspectionModel),
633644
"enf_map": aliased(InspectionReqEnforcementMapModel),
634-
"insp_rec": aliased(InspectionRecordModel),
635645
"req_source": aliased(InspectionReqSourceDetailModel),
636646
"enf_action": aliased(EnforcementActionOptionModel),
637647
"staff": aliased(StaffUserModel),
@@ -662,6 +672,7 @@ def _build_inspection_requirements_query(args, enable_pagination=True):
662672
subqueries = {
663673
"first_requirement_source": _get_first_requirement_source_sub_query(),
664674
"all_requirement_sources": _get_all_requirement_sources_sub_query(),
675+
"inspection_date_issued": _get_inspection_date_issued_sub_query(),
665676
"requirement_order": _get_requirement_order_sub_query(),
666677
"requirement_warning_letter": _get_requirement_warning_letter_sub_query(),
667678
"requirement_violation_ticket": _get_requirement_violation_ticket_sub_query(),
@@ -678,7 +689,7 @@ def _build_inspection_requirements_query(args, enable_pagination=True):
678689
db.session.query(
679690
models["req"],
680691
models["insp"].ir_number.label("ir_number"),
681-
models["insp_rec"].date_issued.label("date_issued"),
692+
subqueries["inspection_date_issued"].c.date_issued.label("date_issued"),
682693
models["enf_map"].enforcement_action_id.label("enforcement_action_id"),
683694
models["enf_action"].name.label("enforcement_action_name"),
684695
models["staff"].id.label("staff_id"),
@@ -718,14 +729,6 @@ def _build_inspection_requirements_query(args, enable_pagination=True):
718729
),
719730
subqueries["all_requirement_sources"].c.all_sources.label("requirement_sources"),
720731
)
721-
.join(
722-
models["topic"],
723-
models["topic"].id == models["req"].topic_id,
724-
)
725-
.join(
726-
models["cmp_finding"],
727-
models["cmp_finding"].id == models["req"].compliance_finding_id,
728-
)
729732
.join(
730733
models["insp"],
731734
and_(
@@ -734,6 +737,14 @@ def _build_inspection_requirements_query(args, enable_pagination=True):
734737
models["insp"].is_active.is_(True),
735738
),
736739
)
740+
.join(
741+
models["topic"],
742+
models["topic"].id == models["req"].topic_id,
743+
)
744+
.join(
745+
models["cmp_finding"],
746+
models["cmp_finding"].id == models["req"].compliance_finding_id,
747+
)
737748
.join(
738749
models["enf_map"],
739750
and_(
@@ -751,8 +762,8 @@ def _build_inspection_requirements_query(args, enable_pagination=True):
751762
models["insp"].primary_officer_id == models["staff"].id,
752763
)
753764
.outerjoin(
754-
models["insp_rec"],
755-
models["insp"].id == models["insp_rec"].inspection_id,
765+
subqueries["inspection_date_issued"],
766+
models["insp"].id == subqueries["inspection_date_issued"].c.inspection_id,
756767
)
757768
.outerjoin(
758769
subqueries["first_requirement_source"],
@@ -879,7 +890,7 @@ def _build_inspection_requirements_query(args, enable_pagination=True):
879890
)
880891

881892
# Apply filters based on query parameters
882-
base_query = _apply_filters(base_query, args, **models)
893+
base_query = _apply_filters(base_query, args, subqueries=subqueries, **models)
883894

884895
# Apply pagination if requested
885896
if enable_pagination:
@@ -924,7 +935,7 @@ def _apply_requirement_filters(query, args, **kwargs):
924935
return query
925936

926937

927-
def _apply_inspection_filters(query, args, **kwargs):
938+
def _apply_inspection_filters(query, args, subqueries=None, **kwargs):
928939
"""Apply inspection-related filters."""
929940
# IR number filter
930941
if args.get("ir_no") and args.get("ir_no").strip():
@@ -950,9 +961,9 @@ def _apply_inspection_filters(query, args, **kwargs):
950961
)
951962

952963
# Date issued filter
953-
if args.get("date_issued"):
964+
if args.get("date_issued") and subqueries:
954965
query = query.filter(
955-
func.date(kwargs.get("insp_rec").date_issued) == args["date_issued"]
966+
func.date(subqueries["inspection_date_issued"].c.date_issued) == args["date_issued"]
956967
)
957968
return query
958969

@@ -1036,7 +1047,7 @@ def _apply_approval_and_source_filters(query, args, **kwargs):
10361047
return query
10371048

10381049

1039-
def _apply_filters(query, args, **kwargs): # pylint: disable=too-many-arguments
1050+
def _apply_filters(query, args, subqueries=None, **kwargs):
10401051
"""Apply filters to the query based on arguments.
10411052
10421053
Args:
@@ -1051,7 +1062,7 @@ def _apply_filters(query, args, **kwargs): # pylint: disable=too-many-arguments
10511062
query = _apply_requirement_filters(query, args, **kwargs)
10521063

10531064
# Apply inspection-related filters
1054-
query = _apply_inspection_filters(query, args, **kwargs)
1065+
query = _apply_inspection_filters(query, args, subqueries=subqueries, **kwargs)
10551066

10561067
# Apply approval and source-related filters
10571068
query = _apply_approval_and_source_filters(query, args, **kwargs)
@@ -1082,7 +1093,6 @@ def _apply_pagination(query, args, subqueries, **kwargs):
10821093
"req": kwargs.get("req"),
10831094
"enf_map": kwargs.get("enf_map"),
10841095
"insp": kwargs.get("insp"),
1085-
"insp_rec": kwargs.get("insp_rec"),
10861096
}
10871097

10881098
# Group reference data models
@@ -1123,7 +1133,7 @@ def _apply_pagination(query, args, subqueries, **kwargs):
11231133
distinct_query = query.with_entities(
11241134
core_models["req"],
11251135
core_models["insp"].ir_number.label("ir_number"),
1126-
core_models["insp_rec"].date_issued.label("date_issued"),
1136+
subqueries["inspection_date_issued"].c.date_issued.label("date_issued"),
11271137
core_models["enf_map"].enforcement_action_id.label("enforcement_action_id"),
11281138
reference_models["enf_action"].name.label("enforcement_action_name"),
11291139
reference_models["staff"].id.label("staff_id"),

0 commit comments

Comments
 (0)