Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6a3bb4d

Browse files
34274 skip validation of jurisdiction to allow unmodified invalid migrated data (#4757)
1 parent 72e4c90 commit 6a3bb4d

8 files changed

Lines changed: 242 additions & 68 deletions

File tree

legal-api/src/legal_api/services/filings/validations/amalgamation_application.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,6 @@ def _validate_foreign_businesses( # noqa: PLR0913
371371
if is_staff:
372372
msg.extend(validate_foreign_jurisdiction(amalgamating_business["foreignJurisdiction"],
373373
f"{amalgamating_business_path}/foreignJurisdiction",
374-
is_region_bc_valid=False,
375374
is_region_for_us_required=False))
376375

377376
msg.extend(_validate_foreign_rules(is_staff,

legal-api/src/legal_api/services/filings/validations/amalgamation_out.py

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,14 @@
1717

1818
from flask_babel import _ as babel
1919

20-
from business_common.utils.legislation_datetime import LegislationDatetime
2120
from business_model.models import Business
2221
from legal_api.errors import Error
2322
from legal_api.services import flags
2423
from legal_api.services.filings.validations.common_validations import (
2524
validate_court_order,
2625
validate_foreign_jurisdiction,
26+
validate_out_date,
2727
)
28-
from legal_api.services.utils import get_date
2928

3029

3130
def validate(business: Business, filing: dict) -> Error | None:
@@ -41,7 +40,7 @@ def validate(business: Business, filing: dict) -> Error | None:
4140
msg = []
4241
filing_type = "amalgamationOut"
4342

44-
msg.extend(validate_amalgamation_out_date(filing, f"/filing/{filing_type}/amalgamationOutDate"))
43+
msg.extend(validate_out_date(filing, f"/filing/{filing_type}/amalgamationOutDate"))
4544
msg.extend(validate_foreign_jurisdiction(
4645
filing["filing"][filing_type]["foreignJurisdiction"],
4746
f"/filing/{filing_type}/foreignJurisdiction"
@@ -54,16 +53,3 @@ def validate(business: Business, filing: dict) -> Error | None:
5453
if msg:
5554
return Error(HTTPStatus.BAD_REQUEST, msg)
5655
return None
57-
58-
59-
def validate_amalgamation_out_date(filing: dict, amalgamation_out_date_path: str) -> list:
60-
"""Validate amalgamation out date."""
61-
msg = []
62-
amalgamation_out_date = get_date(filing, amalgamation_out_date_path)
63-
64-
now = LegislationDatetime.now().date()
65-
if amalgamation_out_date > now:
66-
msg.append({"error": "Amalgamation out date must be today or past.",
67-
"path": amalgamation_out_date_path})
68-
69-
return msg

legal-api/src/legal_api/services/filings/validations/common_validations.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
from legal_api.services import STAFF_ROLE, colin, doc_service, flags, namex
3737
from legal_api.services.permissions import ListActionsPermissionsAllowed, PermissionService
3838
from legal_api.services.request_context import get_request_context
39-
from legal_api.services.utils import get_str
39+
from legal_api.services.utils import get_date, get_str
4040
from legal_api.utils.auth import jwt
4141

4242
NO_POSTAL_CODE_COUNTRY_CODES = {
@@ -1769,3 +1769,16 @@ def check_document_email_changes(
17691769
return check_completing_party_permission(msg, filing_type)
17701770

17711771
return None
1772+
1773+
def validate_out_date(filing: dict, date_path: str) -> list:
1774+
"""Validate out date."""
1775+
msg = []
1776+
out_date = get_date(filing, date_path)
1777+
label = date_path.split("/")[-2].replace("Out", "").capitalize()
1778+
1779+
now = LegislationDatetime.now().date()
1780+
if out_date > now:
1781+
msg.append({"error": f"{label} out date must be today or past.",
1782+
"path": date_path})
1783+
1784+
return msg

legal-api/src/legal_api/services/filings/validations/continuation_in.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,8 @@ def validate_continuation_in_foreign_jurisdiction(
174174
legal_type: str,
175175
foreign_jurisdiction: dict,
176176
foreign_jurisdiction_path: str,
177-
skip_affidavit: bool = False
177+
skip_affidavit: bool = False,
178+
skip_jurisdiction: bool = False
178179
) -> list:
179180
"""Validate continuation in foreign jurisdiction."""
180181
msg = []
@@ -197,7 +198,10 @@ def validate_continuation_in_foreign_jurisdiction(
197198
"path": f"{foreign_jurisdiction_path}/legalName"
198199
})
199200

200-
if err := validate_foreign_jurisdiction(foreign_jurisdiction, foreign_jurisdiction_path):
201+
if (
202+
not skip_jurisdiction and
203+
(err := validate_foreign_jurisdiction(foreign_jurisdiction, foreign_jurisdiction_path))
204+
):
201205
msg.extend(err)
202206

203207
# Skip affidavit if skip_affidavit is True (correction)

legal-api/src/legal_api/services/filings/validations/continuation_out.py

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,14 @@
1717

1818
from flask_babel import _ as babel
1919

20-
from business_common.utils.legislation_datetime import LegislationDatetime
2120
from business_model.models import Business
2221
from legal_api.errors import Error
2322
from legal_api.services import flags
2423
from legal_api.services.filings.validations.common_validations import (
2524
validate_court_order,
2625
validate_foreign_jurisdiction,
26+
validate_out_date,
2727
)
28-
from legal_api.services.utils import get_date
2928

3029

3130
def validate(business: Business, filing: dict) -> Error | None:
@@ -41,7 +40,7 @@ def validate(business: Business, filing: dict) -> Error | None:
4140
msg = []
4241
filing_type = "continuationOut"
4342

44-
msg.extend(validate_continuation_out_date(filing, f"/filing/{filing_type}/continuationOutDate"))
43+
msg.extend(validate_out_date(filing, f"/filing/{filing_type}/continuationOutDate"))
4544
msg.extend(validate_foreign_jurisdiction(
4645
filing["filing"][filing_type]["foreignJurisdiction"],
4746
f"/filing/{filing_type}/foreignJurisdiction"
@@ -54,16 +53,3 @@ def validate(business: Business, filing: dict) -> Error | None:
5453
if msg:
5554
return Error(HTTPStatus.BAD_REQUEST, msg)
5655
return None
57-
58-
59-
def validate_continuation_out_date(filing: dict, continuation_out_date_path: str) -> list:
60-
"""Validate continuation out date."""
61-
msg = []
62-
continuation_out_date = get_date(filing, continuation_out_date_path)
63-
64-
now = LegislationDatetime.now().date()
65-
if continuation_out_date > now:
66-
msg.append({"error": "Continuation out date must be today or past.",
67-
"path": continuation_out_date_path})
68-
69-
return msg

legal-api/src/legal_api/services/filings/validations/correction.py

Lines changed: 42 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,19 @@
2020
from flask.globals import request_ctx
2121
from flask_babel import _
2222

23-
from business_model.models import Business, CourtOrder, Filing, PartyRole
23+
from business_model.models import Business, CourtOrder, Filing, Jurisdiction, PartyRole
24+
from business_model.models.types.filings import FilingTypes
2425
from legal_api.core.filing_helper import is_special_resolution_correction_by_filing_json
2526
from legal_api.errors import Error
2627
from legal_api.services import STAFF_ROLE, SYSTEM_ROLE, NaicsService
2728
from legal_api.services.filings.validations.alteration import validate_type_change
28-
from legal_api.services.filings.validations.amalgamation_out import validate_amalgamation_out_date
2929
from legal_api.services.filings.validations.common_validations import (
30+
is_same_str,
3031
validate_court_order,
3132
validate_foreign_jurisdiction,
3233
validate_name_request,
3334
validate_offices_addresses,
35+
validate_out_date,
3436
validate_parties_addresses,
3537
validate_parties_names,
3638
validate_pdf,
@@ -43,7 +45,6 @@
4345
validate_continuation_in_expro_business_in_colin,
4446
validate_continuation_in_foreign_jurisdiction,
4547
)
46-
from legal_api.services.filings.validations.continuation_out import validate_continuation_out_date
4748
from legal_api.services.filings.validations.incorporation_application import (
4849
validate_coop_parties_mailing_address,
4950
validate_roles,
@@ -173,8 +174,8 @@ def _validate_corps_correction(business: Business, filing_dict, legal_type, msg)
173174
if filing_dict.get("filing", {}).get("correction", {}).get("courtOrder", None):
174175
msg.extend(court_order_validation(filing_dict))
175176

176-
msg.extend(_validate_continuation_in_correction(filing_dict, filing_type, legal_type))
177-
msg.extend(_validate_out_correction(filing_dict, filing_type))
177+
msg.extend(_validate_continuation_in_correction(filing_dict, filing_type, legal_type, business))
178+
msg.extend(_validate_out_correction(filing_dict, filing_type, business))
178179
msg.extend(_validate_amalgamation_correction(filing_dict, filing_type, business))
179180
msg.extend(_validate_court_orders_correction(filing_dict, business))
180181

@@ -208,7 +209,9 @@ def _validate_court_orders_correction(filing_dict, business: Business):
208209
if next((o for o in court_orders_db if o["filingId"] == corrected_filing_id), None):
209210
msg.append({"error": _("Only one court order can be added per filing."), "path": path})
210211

211-
is_file_or_details_required = (filing_dict["filing"]["correction"]["correctedFilingType"] == "courtOrder")
212+
is_file_or_details_required = (
213+
filing_dict["filing"]["correction"]["correctedFilingType"] == FilingTypes.COURTORDER
214+
)
212215
new_court_orders.append(order)
213216
else:
214217
msg.append({"error": _("Filing Id does not match corrected filing Id."), "path": path})
@@ -245,25 +248,35 @@ def _validate_amalgamation_correction(filing_dict, filing_type, business: Busine
245248
msg.append({"error": _("Can only correct foreign businesses."), "path": path})
246249
continue
247250

248-
msg.extend(
249-
validate_foreign_jurisdiction(
250-
ting_json["foreignJurisdiction"],
251-
f"{path}/foreignJurisdiction",
252-
is_region_bc_valid=True,
253-
is_region_for_us_required=False
251+
# Skip to allow unmodified invalid migrated data
252+
if (
253+
not is_same_str(ting.foreign_jurisdiction, ting_json["foreignJurisdiction"]["country"]) or
254+
not is_same_str(ting.foreign_jurisdiction_region, ting_json["foreignJurisdiction"].get("region"))
255+
):
256+
msg.extend(
257+
validate_foreign_jurisdiction(
258+
ting_json["foreignJurisdiction"],
259+
f"{path}/foreignJurisdiction",
260+
is_region_for_us_required=False
261+
)
254262
)
255-
)
256263
return msg
257264

258265

259-
def _validate_continuation_in_correction(filing_dict, filing_type, legal_type):
266+
def _validate_continuation_in_correction(filing_dict, filing_type, legal_type, business: Business):
260267
msg = []
261268
if continuation_in := filing_dict["filing"][filing_type].get("continuationIn"):
269+
jurisdiction = Jurisdiction.get_continuation_in_jurisdiction(business.id)
270+
skip_jurisdiction = ( # Skip to allow unmodified invalid migrated data
271+
is_same_str(jurisdiction.country, continuation_in.get("country")) and
272+
is_same_str(jurisdiction.region, continuation_in.get("region"))
273+
)
262274
msg.extend(validate_continuation_in_foreign_jurisdiction(
263275
legal_type,
264276
continuation_in,
265277
f"/filing/{filing_type}/continuationIn",
266-
skip_affidavit=True
278+
skip_affidavit=True,
279+
skip_jurisdiction=skip_jurisdiction
267280
))
268281
msg.extend(validate_continuation_in_expro_business_in_colin(
269282
continuation_in.get("expro"),
@@ -273,14 +286,21 @@ def _validate_continuation_in_correction(filing_dict, filing_type, legal_type):
273286
return msg
274287

275288

276-
def _validate_out_correction(filing_dict, filing_type):
289+
def _validate_out_correction(filing_dict, filing_type, business):
277290
msg = []
278-
if continuation_out := filing_dict["filing"][filing_type].get("continuationOut"):
279-
msg.extend(validate_continuation_out_date(filing_dict, f"/filing/{filing_type}/continuationOut/date"))
280-
msg.extend(validate_foreign_jurisdiction(continuation_out, f"/filing/{filing_type}/continuationOut"))
281-
elif amalgamation_out := filing_dict["filing"][filing_type].get("amalgamationOut"):
282-
msg.extend(validate_amalgamation_out_date(filing_dict, f"/filing/{filing_type}/amalgamationOut/date"))
283-
msg.extend(validate_foreign_jurisdiction(amalgamation_out, f"/filing/{filing_type}/amalgamationOut"))
291+
corrected_filing_type = filing_dict["filing"]["correction"]["correctedFilingType"]
292+
if (
293+
corrected_filing_type in [FilingTypes.CONTINUATIONOUT, FilingTypes.AMALGAMATIONOUT]
294+
and (out := filing_dict["filing"][filing_type].get(corrected_filing_type))
295+
):
296+
if ( # Skip to allow unmodified invalid migrated data
297+
not is_same_str(business.jurisdiction, out.get("country")) or
298+
not is_same_str(business.foreign_jurisdiction_region, out.get("region"))
299+
):
300+
msg.extend(validate_foreign_jurisdiction(out, f"/filing/{filing_type}/{corrected_filing_type}"))
301+
302+
msg.extend(validate_out_date(filing_dict, f"/filing/{filing_type}/{corrected_filing_type}/date"))
303+
284304
return msg
285305

286306

legal-api/tests/unit/models/__init__.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
Filing,
3838
Furnishing,
3939
FurnishingGroup,
40+
Jurisdiction,
4041
Office,
4142
Party,
4243
PartyRole,
@@ -137,6 +138,19 @@ def factory_user(username: str, firstname: str = None, lastname: str = None):
137138
return user
138139

139140

141+
def factory_jurisdiction(business_id, filing_id, identifier: str = '', name: str = '', country: str = 'CA', region: str = 'BC'):
142+
"""Create a jurisdiction entity."""
143+
jurisdiction = Jurisdiction()
144+
jurisdiction.identifier = identifier
145+
jurisdiction.legal_name = name
146+
jurisdiction.country = country
147+
jurisdiction.region = region
148+
jurisdiction.business_id = business_id
149+
jurisdiction.filing_id = filing_id
150+
jurisdiction.save()
151+
return jurisdiction
152+
153+
140154
def factory_business(identifier,
141155
founding_date=EPOCH_DATETIME,
142156
last_ar_date=None,

0 commit comments

Comments
 (0)