From 49c05e74c5a903a39b918f28dc657c22a7ffd788 Mon Sep 17 00:00:00 2001 From: meganwong Date: Fri, 24 Jan 2025 01:58:12 +0000 Subject: [PATCH 1/4] 25328-Add-special-case-for-NoW-when-getting-file-for-temp-reg-id --- legal-api/src/legal_api/core/filing.py | 2 +- legal-api/src/legal_api/models/filing.py | 19 +++++++++++++++---- .../v2/test_business_filings/test_filings.py | 13 +++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/legal-api/src/legal_api/core/filing.py b/legal-api/src/legal_api/core/filing.py index 865ec1128..e61490215 100644 --- a/legal-api/src/legal_api/core/filing.py +++ b/legal-api/src/legal_api/core/filing.py @@ -273,7 +273,7 @@ def validate(): def get(identifier, filing_id=None) -> Optional[Filing]: """Return a Filing domain by the id.""" if identifier.startswith('T'): - storage = FilingStorage.get_temp_reg_filing(identifier) + storage = FilingStorage.get_temp_reg_filing(identifier, filing_id) else: storage = Business.get_filing_by_id(identifier, filing_id) diff --git a/legal-api/src/legal_api/models/filing.py b/legal-api/src/legal_api/models/filing.py index b63664249..241f462b8 100644 --- a/legal-api/src/legal_api/models/filing.py +++ b/legal-api/src/legal_api/models/filing.py @@ -861,14 +861,25 @@ def find_by_id(cls, filing_id: str = None): @staticmethod def get_temp_reg_filing(temp_reg_id: str, filing_id: str = None): - """Return a Filing by it's payment token.""" + """Return a filing by the temp id and filing id (if applicable).""" + # fetch temp filing q = db.session.query(Filing).filter(Filing.temp_reg == temp_reg_id) if filing_id: - q = q.filter(Filing.id == filing_id) + filing = db.session.query(Filing).filter(Filing.id == filing_id).one_or_none() + if filing: + # Special case for NoW + is_now_filing = filing.filing_type == 'noticeOfWithdrawal' + temp_filing_id = q.one_or_none().id - filing = q.one_or_none() - return filing + # Confirm that the NoW filing ID belongs to the temp identifier + if is_now_filing and filing.withdrawn_filing_id == temp_filing_id: + return filing + + # Filter for specific filing by id if it's not a NoW + return q.filter(Filing.id == filing_id).one_or_none() + + return q.one_or_none() @staticmethod def get_filing_by_payment_token(token: str): diff --git a/legal-api/tests/unit/resources/v2/test_business_filings/test_filings.py b/legal-api/tests/unit/resources/v2/test_business_filings/test_filings.py index 0accdba82..d7f2df42a 100644 --- a/legal-api/tests/unit/resources/v2/test_business_filings/test_filings.py +++ b/legal-api/tests/unit/resources/v2/test_business_filings/test_filings.py @@ -1764,3 +1764,16 @@ def test_notice_of_withdrawal_filing(session, client, jwt, test_name, legal_type assert now_filing.withdrawal_pending == False if is_temp: assert now_filing.temp_reg == None + + # update and save notice of withdrawal draft filing + now_json_data['filing']['header']['certifiedBy'] = 'test123' + + rv_draft = client.put(f'/api/v2/businesses/{identifier}/filings/{now_filing.id}?draft=true', + json=now_json_data, + headers=create_header(jwt, [STAFF_ROLE], identifier)) + + # validate + assert rv_draft.status_code == HTTPStatus.ACCEPTED + assert rv_draft.json['filing']['header']['certifiedBy'] == 'test123' + + From 655e3c93dcdaea1737a5f627d19604abbe2f76ba Mon Sep 17 00:00:00 2001 From: meganwong Date: Fri, 24 Jan 2025 01:59:02 +0000 Subject: [PATCH 2/4] 25328-Update-requirements-for-schema-update --- legal-api/requirements.txt | 2 +- legal-api/requirements/bcregistry-libraries.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/legal-api/requirements.txt b/legal-api/requirements.txt index 7d9965f9a..7c1a3e152 100755 --- a/legal-api/requirements.txt +++ b/legal-api/requirements.txt @@ -59,5 +59,5 @@ PyPDF2==1.26.0 reportlab==3.6.12 html-sanitizer==2.4.1 lxml==5.2.2 -git+https://github.com/bcgov/business-schemas.git@2.18.32#egg=registry_schemas +git+https://github.com/bcgov/business-schemas.git@2.18.33#egg=registry_schemas git+https://github.com/bcgov/lear.git#egg=sql-versioning&subdirectory=python/common/sql-versioning diff --git a/legal-api/requirements/bcregistry-libraries.txt b/legal-api/requirements/bcregistry-libraries.txt index 94c67a8b4..80d739e0f 100644 --- a/legal-api/requirements/bcregistry-libraries.txt +++ b/legal-api/requirements/bcregistry-libraries.txt @@ -1,2 +1,2 @@ -git+https://github.com/bcgov/business-schemas.git@2.18.32#egg=registry_schemas +git+https://github.com/bcgov/business-schemas.git@2.18.33#egg=registry_schemas git+https://github.com/bcgov/lear.git#egg=sql-versioning&subdirectory=python/common/sql-versioning From 62e6adf2492e65b5dfdab6eea7677949c59eec8c Mon Sep 17 00:00:00 2001 From: meganwong Date: Fri, 24 Jan 2025 02:10:54 +0000 Subject: [PATCH 3/4] 25328-Clean-up-code --- legal-api/src/legal_api/models/filing.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/legal-api/src/legal_api/models/filing.py b/legal-api/src/legal_api/models/filing.py index 241f462b8..f1df4f252 100644 --- a/legal-api/src/legal_api/models/filing.py +++ b/legal-api/src/legal_api/models/filing.py @@ -864,21 +864,15 @@ def get_temp_reg_filing(temp_reg_id: str, filing_id: str = None): """Return a filing by the temp id and filing id (if applicable).""" # fetch temp filing q = db.session.query(Filing).filter(Filing.temp_reg == temp_reg_id) - if filing_id: filing = db.session.query(Filing).filter(Filing.id == filing_id).one_or_none() if filing: # Special case for NoW is_now_filing = filing.filing_type == 'noticeOfWithdrawal' temp_filing_id = q.one_or_none().id - - # Confirm that the NoW filing ID belongs to the temp identifier if is_now_filing and filing.withdrawn_filing_id == temp_filing_id: return filing - - # Filter for specific filing by id if it's not a NoW return q.filter(Filing.id == filing_id).one_or_none() - return q.one_or_none() @staticmethod From 3e79e14da7859f746b1fd9f5dc2dfaa4c0faa1d8 Mon Sep 17 00:00:00 2001 From: meganwong Date: Mon, 27 Jan 2025 17:52:50 +0000 Subject: [PATCH 4/4] 25328-Optimize-query-for-temp-reg-filing --- legal-api/src/legal_api/models/filing.py | 31 +++++++++++++++--------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/legal-api/src/legal_api/models/filing.py b/legal-api/src/legal_api/models/filing.py index f1df4f252..0f98547e0 100644 --- a/legal-api/src/legal_api/models/filing.py +++ b/legal-api/src/legal_api/models/filing.py @@ -862,18 +862,25 @@ def find_by_id(cls, filing_id: str = None): @staticmethod def get_temp_reg_filing(temp_reg_id: str, filing_id: str = None): """Return a filing by the temp id and filing id (if applicable).""" - # fetch temp filing - q = db.session.query(Filing).filter(Filing.temp_reg == temp_reg_id) - if filing_id: - filing = db.session.query(Filing).filter(Filing.id == filing_id).one_or_none() - if filing: - # Special case for NoW - is_now_filing = filing.filing_type == 'noticeOfWithdrawal' - temp_filing_id = q.one_or_none().id - if is_now_filing and filing.withdrawn_filing_id == temp_filing_id: - return filing - return q.filter(Filing.id == filing_id).one_or_none() - return q.one_or_none() + if not filing_id: + return db.session.query(Filing).filter(Filing.temp_reg == temp_reg_id).one_or_none() + + return ( + db.session.query(Filing).filter( + db.or_( + db.and_( + Filing.id == filing_id, + Filing.temp_reg == temp_reg_id + ), + db.and_( # special case for NoW + Filing.id == filing_id, + Filing._filing_type == 'noticeOfWithdrawal', + Filing.withdrawn_filing_id == db.session.query(Filing.id) + .filter(Filing.temp_reg == temp_reg_id) + .scalar_subquery() + ) + ) + ).one_or_none()) @staticmethod def get_filing_by_payment_token(token: str):