Skip to content

Commit 73c7edc

Browse files
authored
[MDS-6728] Still show disabled definitions with existing reports (#3853)
* show disabled mine report definitions that have existing reports * changes for tests * fix to a test to make it be more consistent
1 parent fcb07d4 commit 73c7edc

6 files changed

Lines changed: 66 additions & 32 deletions

File tree

services/common/src/redux/slices/complianceReportsSlice.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ const complianceReportSlice = createAppSlice({
7474
thunkApi.dispatch(showLoading());
7575
const resp = await CustomAxios({
7676
errorToastMessage: "Failed to load compliance reports",
77-
}).get(`${ENVIRONMENT.apiUrl}${API.MINE_REPORT_DEFINITIONS({ ...searchParams, active_ind: [true] })}`, headers);
77+
}).get(`${ENVIRONMENT.apiUrl}${API.MINE_REPORT_DEFINITIONS(searchParams ?? {})}`, headers);
7878
thunkApi.dispatch(hideLoading());
7979
return resp.data;
8080
},

services/core-api/app/api/mines/reports/models/mine_report_definition.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from sqlalchemy.dialects.postgresql import UUID
77
from sqlalchemy.schema import FetchedValue
88
from sqlalchemy.ext.hybrid import hybrid_property
9-
from sqlalchemy import or_, cast, Integer, nullsfirst, nullslast, and_
9+
from sqlalchemy import or_, cast, Integer, nullsfirst, nullslast, and_, exists
1010
from sqlalchemy_filters import apply_pagination
1111
from werkzeug.exceptions import BadRequest
1212

@@ -16,6 +16,7 @@
1616
from app.api.mines.reports.models.mine_report_definition_compliance_article_xref import \
1717
MineReportDefinitionComplianceArticleXref
1818
from app.api.mines.reports.models.mine_report_due_date_type import MineReportDueDateType
19+
from app.api.mines.reports.models.mine_report import MineReport
1920
from app.api.compliance.models.compliance_article import ComplianceArticle
2021
from app.extensions import db
2122

@@ -203,6 +204,19 @@ def _apply_filters(cls, query, regulatory_authority, is_prr_only, active_ind, se
203204
)
204205
)
205206

207+
# Filter out MineReportDefinitions that are not active and does not have a associated mine report that was previously requested or submitted
208+
disabled_filter = or_(
209+
MineReportDefinition.active_ind.is_(True),
210+
exists().where(
211+
and_(
212+
MineReport.mine_report_definition_id == MineReportDefinition.mine_report_definition_id,
213+
MineReport.deleted_ind == False
214+
)
215+
)
216+
)
217+
218+
filters.append(disabled_filter)
219+
206220
return query.filter(*filters)
207221

208222
@classmethod

services/core-api/app/api/mines/reports/resources/mine_reports.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -159,18 +159,7 @@ def get(self, mine_guid):
159159
}
160160

161161
# Base query; ordering is applied via ReportFilterHelper
162-
query = (
163-
MineReport.query
164-
.outerjoin(MineReportDefinition)
165-
.filter(
166-
MineReport.mine_guid == mine_guid,
167-
MineReport.deleted_ind == False,
168-
or_(
169-
MineReport.mine_report_definition_id.is_(None),
170-
MineReportDefinition.active_ind.is_(True),
171-
)
172-
)
173-
)
162+
query = MineReport.query.filter_by(mine_guid=mine_guid, deleted_ind=False)
174163

175164
if requested_types:
176165
conditions = []

services/core-api/app/api/mines/reports/resources/reports_resource.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,7 @@ def get(self):
6565
'region': request.args.getlist('region', type=str),
6666
}
6767

68-
query = (
69-
MineReport.query
70-
.outerjoin(MineReportDefinition)
71-
.filter(
72-
MineReport.deleted_ind == False,
73-
or_(
74-
MineReport.mine_report_definition_id.is_(None),
75-
MineReportDefinition.active_ind.is_(True),
76-
)
77-
)
78-
)
68+
query = MineReport.query.filter_by(deleted_ind=False)
7969

8070
records, pagination_details = ReportFilterHelper.apply_filters_and_pagination(query, args)
8171
if not records:

services/core-api/tests/reports/resource/test_mine_report_definition_list_resource.py

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from app.api.mines.reports.models.mine_report_definition import MineReportDefinition
77
from app.api.mines.reports.models.mine_report_definition_compliance_article_xref import \
88
MineReportDefinitionComplianceArticleXref
9+
from app.api.mines.reports.models.mine_report import MineReport
910

1011

1112
# test non-paginated results
@@ -97,7 +98,20 @@ def test_post_mine_report_definition_pagination(test_client, db_session, auth_he
9798
# test filters
9899
def test_mine_report_definition_active_filter(test_client, db_session, auth_headers):
99100
all_records = db_session.query(MineReportDefinition).all()
100-
all_record_count = len(all_records)
101+
102+
expected_records = []
103+
for record in all_records:
104+
if record.active_ind:
105+
expected_records.append(record)
106+
else:
107+
has_active_report = db_session.query(MineReport).filter(
108+
MineReport.mine_report_definition_id == record.mine_report_definition_id,
109+
MineReport.deleted_ind == False
110+
).first()
111+
112+
if has_active_report:
113+
expected_records.append(record)
114+
101115
request_all_data = "active_ind=true&active_ind=false&show_expired=true"
102116
request_inactive_data = "active_ind=false&show_expired=true"
103117
print(request_all_data)
@@ -109,10 +123,9 @@ def test_mine_report_definition_active_filter(test_client, db_session, auth_head
109123
get_all_data = json.loads(get_all_resp.data.decode())
110124

111125
assert get_all_resp.status_code == 200
112-
assert len(get_all_data['records']) == all_record_count
126+
assert len(get_all_data['records']) == len(expected_records)
113127

114-
inactive_records = list(x for x in all_records if x.active_ind == False)
115-
inactive_record_count = len(inactive_records)
128+
inactive_records = list(x for x in expected_records if x.active_ind == False)
116129

117130
get_inactive_resp = test_client.get(
118131
f'/mines/reports/definitions?{request_inactive_data}',
@@ -121,7 +134,7 @@ def test_mine_report_definition_active_filter(test_client, db_session, auth_head
121134
get_inactive_data = json.loads(get_inactive_resp.data.decode())
122135

123136
assert get_inactive_resp.status_code == 200
124-
assert len(get_inactive_data['records']) == inactive_record_count
137+
assert len(get_inactive_data['records']) == len(inactive_records)
125138

126139
def test_mine_report_definition_section_filter(test_client, db_session, auth_headers):
127140
section_search = "2.3.1"
@@ -343,3 +356,31 @@ def test_post_mine_report_definition_missing_required_fields(test_client, auth_h
343356
# Assertions
344357
assert post_resp.status_code == 400
345358
assert "Input payload validation failed" in post_data['message']
359+
360+
# Test inactive MineReportDefinitions should only appear if they have at least one active MineReport associated to it
361+
def test_mine_report_definition_inactive_without_reports_filtered(test_client, db_session, auth_headers):
362+
all_definitions = db_session.query(MineReportDefinition).all()
363+
364+
expected_definitions = []
365+
for definition in all_definitions:
366+
if definition.active_ind:
367+
expected_definitions.append(definition)
368+
else:
369+
has_active_report = db_session.query(MineReport).filter(
370+
MineReport.mine_report_definition_id == definition.mine_report_definition_id,
371+
MineReport.deleted_ind == False
372+
).first()
373+
374+
if has_active_report:
375+
expected_definitions.append(definition)
376+
377+
request_data = "active_ind=true&active_ind=false&show_expired=true"
378+
379+
get_resp = test_client.get(
380+
f'/mines/reports/definitions?{request_data}',
381+
headers=auth_headers['full_auth_header'],
382+
)
383+
get_data = json.loads(get_resp.data.decode())
384+
385+
assert get_resp.status_code == 200
386+
assert len(get_data['records']) == len(expected_definitions)

services/core-api/tests/reports/test_report_tasks.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ def test_task_ignores_non_recurring_mine_report_due_date_types(self, db_session)
473473
deleted_ind=False
474474
)
475475

476-
result = create_new_recurring_crr_report_requests()
476+
create_new_recurring_crr_report_requests()
477477

478478
reports = MineReport.query.filter_by(
479479
mine_guid=mine.mine_guid,
@@ -482,7 +482,7 @@ def test_task_ignores_non_recurring_mine_report_due_date_types(self, db_session)
482482
).filter(MineReport.mine_report_id == mine_report.mine_report_id).all()
483483

484484
assert len(reports) == 1
485-
assert result["total_created"] == 0
485+
assert reports[0].mine_report_id == mine_report.mine_report_id
486486

487487
@mock.patch("app.api.mines.reports.models.mine_report.MineReport.create")
488488
@mock.patch("app.api.mines.reports.tasks.Mine.find_by_mine_guid")

0 commit comments

Comments
 (0)