From 106d4ede55071938407b2af55d1d92e00069d97d Mon Sep 17 00:00:00 2001 From: Sinn Date: Fri, 13 Dec 2024 15:48:43 -0800 Subject: [PATCH 1/3] fix bug where esup magazine data not showing in preview certificate --- .../models/explosives_permit_document_type.py | 16 ++++++++++++---- .../resources/explosives_permit_document_type.py | 4 +++- .../explosives_permit_amendment_magazine.py | 8 +++++++- .../mine/ExplosivesPermit/ExplosivesPermit.tsx | 1 + 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/services/core-api/app/api/mines/explosives_permit/models/explosives_permit_document_type.py b/services/core-api/app/api/mines/explosives_permit/models/explosives_permit_document_type.py index 3b77798d62..442118107d 100644 --- a/services/core-api/app/api/mines/explosives_permit/models/explosives_permit_document_type.py +++ b/services/core-api/app/api/mines/explosives_permit/models/explosives_permit_document_type.py @@ -6,6 +6,7 @@ from app.api.utils.models_mixins import AuditMixin, Base from app.extensions import db from app.api.mines.exceptions.mine_exceptions import MineException +from app.api.mines.explosives_permit_amendment.models.explosives_permit_amendment_magazine import ExplosivesPermitAmendmentMagazine PERMIT_SIGNATURE_IMAGE_HEIGHT_INCHES = 0.8 LETTER_SIGNATURE_IMAGE_HEIGHT_INCHES = 0.8 @@ -40,7 +41,7 @@ def get_with_context(cls, document_type_code, context_guid): return document_type - def transform_template_data(self, template_data, explosives_permit): + def transform_template_data(self, template_data, explosives_permit, explosives_permit_amendment_id=None): def validate_issuing_inspector(explosives_permit): if not explosives_permit.issuing_inspector: raise MineException("No Issuing Inspector has been assigned", @@ -172,9 +173,16 @@ def is_explosive_type(mag): } transformed_magazines.append(transformed_magazine) return transformed_magazines - - explosive_magazines = transform_magazines(explosives_permit.explosive_magazines or []) - detonator_magazines = transform_magazines(explosives_permit.detonator_magazines or []) + untransformed_explosive_magazines = explosives_permit.explosive_magazines + untransformed_detonator_magazines = explosives_permit.detonator_magazines + + explosives_permit_amendment_magazines = ExplosivesPermitAmendmentMagazine.find_by_explosives_permit_amendment_id(explosives_permit_amendment_id) + if explosives_permit_amendment_id and len(explosives_permit_amendment_magazines) > 0: + untransformed_explosive_magazines = list(filter(lambda mag: mag.explosives_permit_amendment_magazine_type_code == "EXP", explosives_permit_amendment_magazines)) + untransformed_detonator_magazines = list(filter(lambda mag: mag.explosives_permit_amendment_magazine_type_code == "DET", explosives_permit_amendment_magazines)) + + explosive_magazines = transform_magazines(untransformed_explosive_magazines or []) + detonator_magazines = transform_magazines(untransformed_detonator_magazines or []) magazines = explosive_magazines + detonator_magazines template_data['magazines'] = magazines diff --git a/services/core-api/app/api/mines/explosives_permit/resources/explosives_permit_document_type.py b/services/core-api/app/api/mines/explosives_permit/resources/explosives_permit_document_type.py index aba2612785..34c2eaa521 100644 --- a/services/core-api/app/api/mines/explosives_permit/resources/explosives_permit_document_type.py +++ b/services/core-api/app/api/mines/explosives_permit/resources/explosives_permit_document_type.py @@ -47,6 +47,7 @@ def get(self, document_type_code): class ExplosivesPermitDocumentGenerateResource(Resource, UserMixin): parser = CustomReqparser() parser.add_argument('explosives_permit_guid', type=str, location='json', required=True) + parser.add_argument('explosives_permit_amendment_id', type=str, location='json', required=False) parser.add_argument('template_data', type=dict, location='json', required=True) @api.doc( @@ -70,12 +71,13 @@ def post(self, document_type_code): explosives_permit_guid = data['explosives_permit_guid'] explosives_permit = ExplosivesPermit.find_by_explosives_permit_guid(explosives_permit_guid) + explosives_permit_amendment_id = data.get('explosives_permit_amendment_id', None) if not explosives_permit: raise MineException("Explosives Permit not found", status_code = 404) template_data = data['template_data'] - template_data = document_type.transform_template_data(template_data, explosives_permit) + template_data = document_type.transform_template_data(template_data, explosives_permit, explosives_permit_amendment_id) form_spec_with_context = document_template._form_spec_with_context(explosives_permit_guid) enforced_data = [x for x in form_spec_with_context if x.get('read-only') == True] diff --git a/services/core-api/app/api/mines/explosives_permit_amendment/models/explosives_permit_amendment_magazine.py b/services/core-api/app/api/mines/explosives_permit_amendment/models/explosives_permit_amendment_magazine.py index b09745c93f..91d4ba7de8 100644 --- a/services/core-api/app/api/mines/explosives_permit_amendment/models/explosives_permit_amendment_magazine.py +++ b/services/core-api/app/api/mines/explosives_permit_amendment/models/explosives_permit_amendment_magazine.py @@ -121,4 +121,10 @@ def create(cls, def find_by_explosives_permit_amendment_magazine_id(cls, explosives_permit_amendment_magazine_id): return cls.query.filter_by( explosives_permit_amendment_magazine_id=explosives_permit_amendment_magazine_id, - deleted_ind=False).one_or_none() \ No newline at end of file + deleted_ind=False).one_or_none() + + @classmethod + def find_by_explosives_permit_amendment_id(cls, explosives_permit_amendment_id): + return cls.query.filter_by( + explosives_permit_amendment_id=explosives_permit_amendment_id, + deleted_ind=False).order_by(cls.explosives_permit_amendment_magazine_id.asc()).all() \ No newline at end of file diff --git a/services/core-web/src/components/mine/ExplosivesPermit/ExplosivesPermit.tsx b/services/core-web/src/components/mine/ExplosivesPermit/ExplosivesPermit.tsx index 213c615cbb..2c057cc116 100644 --- a/services/core-web/src/components/mine/ExplosivesPermit/ExplosivesPermit.tsx +++ b/services/core-web/src/components/mine/ExplosivesPermit/ExplosivesPermit.tsx @@ -90,6 +90,7 @@ export const ExplosivesPermit: FC = ({ if (record.isAmendment) values.amendment_no = record.amendment_no; const payload = { explosives_permit_guid: record.explosives_permit_guid, + ...(record.explosives_permit_amendment_id && { explosives_permit_amendment_id: record.explosives_permit_amendment_id }), template_data: values, }; return props.generateExplosivesPermitDocument( From a417e93cf13eed25c786345da14df5e30cbb7398 Mon Sep 17 00:00:00 2001 From: Sinn Date: Tue, 17 Dec 2024 15:03:03 -0800 Subject: [PATCH 2/3] addressing pr comment --- .../resources/explosives_permit_document_type.py | 12 ++++++++++++ .../models/explosives_permit_amendment.py | 5 +++++ .../models/test_explosives_permit_amendment_model.py | 8 +++++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/services/core-api/app/api/mines/explosives_permit/resources/explosives_permit_document_type.py b/services/core-api/app/api/mines/explosives_permit/resources/explosives_permit_document_type.py index 34c2eaa521..0dae3868d4 100644 --- a/services/core-api/app/api/mines/explosives_permit/resources/explosives_permit_document_type.py +++ b/services/core-api/app/api/mines/explosives_permit/resources/explosives_permit_document_type.py @@ -6,6 +6,7 @@ from app.extensions import api, cache from app.api.mines.explosives_permit.models.explosives_permit import ExplosivesPermit +from app.api.mines.explosives_permit_amendment.models.explosives_permit_amendment import ExplosivesPermitAmendment from app.api.mines.explosives_permit.models.explosives_permit_document_type import ExplosivesPermitDocumentType from app.api.utils.resources_mixins import UserMixin from app.api.utils.include.user_info import User @@ -71,7 +72,18 @@ def post(self, document_type_code): explosives_permit_guid = data['explosives_permit_guid'] explosives_permit = ExplosivesPermit.find_by_explosives_permit_guid(explosives_permit_guid) + explosives_permit_id = explosives_permit.explosives_permit_id explosives_permit_amendment_id = data.get('explosives_permit_amendment_id', None) + explosives_permit_amendments = ExplosivesPermitAmendment.find_by_explosives_permit_id(explosives_permit_id) + if explosives_permit_amendment_id: + is_amendment_matched_with_permit = any( + amendments.explosives_permit_amendment_id == int(explosives_permit_amendment_id) + for amendments in explosives_permit_amendments + ) + + if is_amendment_matched_with_permit == False: + raise MineException("Provided Explosive Permit Amendment Id does not exist under this Explosive Permit", status_code = 400) + if not explosives_permit: raise MineException("Explosives Permit not found", status_code = 404) diff --git a/services/core-api/app/api/mines/explosives_permit_amendment/models/explosives_permit_amendment.py b/services/core-api/app/api/mines/explosives_permit_amendment/models/explosives_permit_amendment.py index 4296632b66..f3511f9adb 100644 --- a/services/core-api/app/api/mines/explosives_permit_amendment/models/explosives_permit_amendment.py +++ b/services/core-api/app/api/mines/explosives_permit_amendment/models/explosives_permit_amendment.py @@ -216,6 +216,11 @@ def delete(self, commit=True): def find_by_explosives_permit_amendment_guid(cls, explosives_permit_amendment_guid): return cls.query.filter_by( explosives_permit_amendment_guid=explosives_permit_amendment_guid, deleted_ind=False).one_or_none() + + @classmethod + def find_by_explosives_permit_id(cls, explosives_permit_id): + return cls.query.filter_by( + explosives_permit_id=explosives_permit_id, deleted_ind=False).all() def update(self, amendment_no, diff --git a/services/core-api/tests/mines/explosives_permit_amendment/models/test_explosives_permit_amendment_model.py b/services/core-api/tests/mines/explosives_permit_amendment/models/test_explosives_permit_amendment_model.py index 94251e639c..f10e1cc193 100644 --- a/services/core-api/tests/mines/explosives_permit_amendment/models/test_explosives_permit_amendment_model.py +++ b/services/core-api/tests/mines/explosives_permit_amendment/models/test_explosives_permit_amendment_model.py @@ -1,4 +1,4 @@ -from tests.factories import ExplosivesPermitAmendmentFactory +from tests.factories import (ExplosivesPermitAmendmentFactory, ExplosivesPermitFactory) from app.api.mines.explosives_permit_amendment.models.explosives_permit_amendment import ExplosivesPermitAmendment @@ -7,3 +7,9 @@ def test_explosives_permit_amendment_find_by_explosives_permit_amendment_guid(db explosives_permit_amendment_guid = explosives_permit_amendment.explosives_permit_amendment_guid explosives_permit_amendment = ExplosivesPermitAmendment.find_by_explosives_permit_amendment_guid(str(explosives_permit_amendment_guid)) assert explosives_permit_amendment.explosives_permit_amendment_guid == explosives_permit_amendment_guid + +def test_explosives_permit_amendment_find_by_explosives_permit_id(db_session): + explosives_permit_amendment = ExplosivesPermitAmendmentFactory() + explosives_permit_id = explosives_permit_amendment.explosives_permit_id + explosives_permit_amendments = ExplosivesPermitAmendment.find_by_explosives_permit_id(explosives_permit_id) + assert any(amendment.explosives_permit_id == explosives_permit_id for amendment in explosives_permit_amendments) \ No newline at end of file From d2d6e445b296a0ddae97c2ba5b4f797cfde16775 Mon Sep 17 00:00:00 2001 From: Sinn Date: Tue, 17 Dec 2024 15:07:18 -0800 Subject: [PATCH 3/3] remove unwanted import --- .../models/test_explosives_permit_amendment_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/core-api/tests/mines/explosives_permit_amendment/models/test_explosives_permit_amendment_model.py b/services/core-api/tests/mines/explosives_permit_amendment/models/test_explosives_permit_amendment_model.py index f10e1cc193..95990f7d1d 100644 --- a/services/core-api/tests/mines/explosives_permit_amendment/models/test_explosives_permit_amendment_model.py +++ b/services/core-api/tests/mines/explosives_permit_amendment/models/test_explosives_permit_amendment_model.py @@ -1,4 +1,4 @@ -from tests.factories import (ExplosivesPermitAmendmentFactory, ExplosivesPermitFactory) +from tests.factories import ExplosivesPermitAmendmentFactory from app.api.mines.explosives_permit_amendment.models.explosives_permit_amendment import ExplosivesPermitAmendment