Skip to content

Commit

Permalink
21279 Update eligibility query to allow including/excluding of busine…
Browse files Browse the repository at this point in the history
…sses in dissolution in check (bcgov#2733)
  • Loading branch information
argush3 authored May 31, 2024
1 parent 8f5dbc7 commit 0178ff7
Showing 1 changed file with 31 additions and 16 deletions.
47 changes: 31 additions & 16 deletions legal-api/src/legal_api/services/involuntary_dissolution.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,16 @@ class EligibilityDetails:
transition_overdue: bool

@classmethod
def check_business_eligibility(cls, identifier: str) -> Tuple[bool, EligibilityDetails]:
def check_business_eligibility(
cls, identifier: str, exclude_in_dissolution=True
) -> Tuple[bool, EligibilityDetails]:
"""Return true if the business with provided identifier is eligible for dissolution.
Returns eligible, eligibility_details
Returns:
eligible (bool): True if the business is eligible for dissolution.
eligibility_details (EligibilityDetails): Details regarding eligibility.
"""
query = cls._get_businesses_eligible_query().\
query = cls._get_businesses_eligible_query(exclude_in_dissolution).\
filter(Business.identifier == identifier)
result = query.one_or_none()

Expand All @@ -54,8 +58,12 @@ def get_businesses_eligible_count(cls):
return cls._get_businesses_eligible_query().count()

@staticmethod
def _get_businesses_eligible_query():
"""Return SQLAlchemy clause for fetching businesses eligible for involuntary dissolution."""
def _get_businesses_eligible_query(exclude_in_dissolution=True):
"""Return SQLAlchemy clause for fetching businesses eligible for involuntary dissolution.
Args:
include_in_dissolution (bool): Whether to include the in_dissolution check in the query.
"""
eligible_types = [
Business.LegalTypes.COMP.value,
Business.LegalTypes.BC_ULC_COMPANY.value,
Expand All @@ -69,14 +77,18 @@ def _get_businesses_eligible_query():
Business.LegalTypes.LIMITED_CO.value
]

subquery = exists().where(BatchProcessing.business_id == Business.id,
BatchProcessing.status.notin_(
[BatchProcessing.BatchProcessingStatus.WITHDRAWN,
BatchProcessing.BatchProcessingStatus.COMPLETED]),
BatchProcessing.batch_id == Batch.id,
Batch.status != Batch.BatchStatus.COMPLETED,
Batch.batch_type == Batch.BatchType.INVOLUNTARY_DISSOLUTION)

in_dissolution = (
exists().where(
BatchProcessing.business_id == Business.id,
BatchProcessing.status.notin_([
BatchProcessing.BatchProcessingStatus.WITHDRAWN,
BatchProcessing.BatchProcessingStatus.COMPLETED
]),
BatchProcessing.batch_id == Batch.id,
Batch.status != Batch.BatchStatus.COMPLETED,
Batch.batch_type == Batch.BatchType.INVOLUNTARY_DISSOLUTION
)
)
specific_filing_overdue = _has_specific_filing_overdue()
no_transition_filed_after_restoration = _has_no_transition_filed_after_restoration()

Expand All @@ -88,9 +100,12 @@ def _get_businesses_eligible_query():
filter(not_(Business.admin_freeze.is_(True))).\
filter(Business.state == Business.State.ACTIVE).\
filter(Business.legal_type.in_(eligible_types)).\
filter(Business.no_dissolution.is_(False)).\
filter(not_(subquery)).\
filter(
filter(Business.no_dissolution.is_(False))

if exclude_in_dissolution:
query = query.filter(not_(in_dissolution))

query = query.filter(
or_(
specific_filing_overdue,
no_transition_filed_after_restoration
Expand Down

0 comments on commit 0178ff7

Please sign in to comment.