diff --git a/data-tool/flows/corps_tombstone_flow.py b/data-tool/flows/corps_tombstone_flow.py index 762f72331..633421ac2 100644 --- a/data-tool/flows/corps_tombstone_flow.py +++ b/data-tool/flows/corps_tombstone_flow.py @@ -397,6 +397,12 @@ def tombstone_flow(): ) else: skipped += 1 + processing_service.update_corp_status( + flow_run_id, + corp_num, + ProcessingStatuses.FAILED, + error="Migration failed - Skip due to data collection error" + ) print(f'❗ Skip migrating {corp_num} due to data collection error.') wait(corp_futures) diff --git a/data-tool/flows/tombstone/tombstone_base_data.py b/data-tool/flows/tombstone/tombstone_base_data.py index 907ecd1cb..757b0925d 100644 --- a/data-tool/flows/tombstone/tombstone_base_data.py +++ b/data-tool/flows/tombstone/tombstone_base_data.py @@ -189,7 +189,8 @@ 'source': 'COLIN', 'colin_only': False, 'deletion_locked': False, - # TODO: new column - hide_in_ledger + 'hide_in_ledger': False, # TODO: double check when doing cleanup - dissolution (invol, admin) + # TODO: new columns for NoW # FK 'business_id': None, 'transaction_id': None, diff --git a/data-tool/flows/tombstone/tombstone_mappings.py b/data-tool/flows/tombstone/tombstone_mappings.py index b72dba851..ba3bd92d1 100644 --- a/data-tool/flows/tombstone/tombstone_mappings.py +++ b/data-tool/flows/tombstone/tombstone_mappings.py @@ -35,7 +35,6 @@ class EventFilings(str, Enum): FILE_AMLRC = 'FILE_AMLRC' FILE_AMLVC = 'FILE_AMLVC' - CONVAMAL_NULL = 'CONVAMAL_NULL' # TODO: re-map # Annual Report FILE_ANNBC = 'FILE_ANNBC' @@ -62,9 +61,25 @@ class EventFilings(str, Enum): FILE_CONTU = 'FILE_CONTU' FILE_CONTC = 'FILE_CONTC' - # Conversion + # Conversion Ledger FILE_CONVL = 'FILE_CONVL' + # Conversion + CONVAMAL_NULL = 'CONVAMAL_NULL' + CONVCIN_NULL = 'CONVCIN_NULL' + CONVCOUT_NULL = 'CONVCOUT_NULL' + CONVDS_NULL = 'CONVDS_NULL' + CONVDSF_NULL = 'CONVDSF_NULL' + CONVDSL_NULL = 'CONVDSL_NULL' + CONVDSO_NULL = 'CONVDSO_NULL' + CONVICORP_NULL = 'CONVICORP_NULL' + CONVID1_NULL = 'CONVID1_NULL' + CONVID2_NULL = 'CONVID2_NULL' + CONVILIQ_NULL = 'CONVILIQ_NULL' + CONVLRSTR_NULL = 'CONVLRSTR_NULL' + CONVNC_NULL = 'CONVNC_NULL' + CONVRSTR_NULL = 'CONVRSTR_NULL' + # Correction FILE_CO_AR = 'FILE_CO_AR' FILE_CO_BC = 'FILE_CO_BC' @@ -103,9 +118,6 @@ class EventFilings(str, Enum): FILE_ICORP = 'FILE_ICORP' FILE_ICORU = 'FILE_ICORU' FILE_ICORC = 'FILE_ICORC' - CONVICORP_NULL = 'CONVICORP_NULL' # TODO: re-map - - # TODO: Ledger - unsupported # TODO: Legacy Other - unsupported FILE_AM_PF = 'FILE_AM_PF' @@ -115,7 +127,7 @@ class EventFilings(str, Enum): # TODO: Liquidation - unsupported # FILE_ADCOL = 'FILE_ADCOL' - # Notice of Withdrawal + # TODO: Notice of Withdrawal - unsupported FILE_NWITH = 'FILE_NWITH' # Registrar's Notation @@ -140,7 +152,7 @@ class EventFilings(str, Enum): # TODO: # Other COLIN events: - # CONV*, Adim Corp (ADCORP, BNUPD, ADMIN), XPRO filing + # Adim Corp (ADCORP, BNUPD, ADMIN), XPRO filing # SYSDL, SYST # more legacyOther filings @@ -175,7 +187,6 @@ def has_value(cls, value): EventFilings.FILE_AMLHC: ['amalgamationApplication', 'horizontal'], EventFilings.FILE_AMLRC: ['amalgamationApplication', 'regular'], EventFilings.FILE_AMLVC: ['amalgamationApplication', 'vertical'], - EventFilings.CONVAMAL_NULL: ['amalgamationApplication', 'regular'], # TODO: re-map EventFilings.FILE_ANNBC: 'annualReport', @@ -197,6 +208,21 @@ def has_value(cls, value): EventFilings.FILE_CONVL: 'conversionLedger', + EventFilings.CONVAMAL_NULL: ['conversion', ('amalgamationApplication', 'unknown')], + EventFilings.CONVCIN_NULL: ['conversion', 'continuationIn'], + EventFilings.CONVCOUT_NULL: ['conversion', 'continuationOut'], # TODO: continuation out + EventFilings.CONVDS_NULL: ['conversion', ('dissolution', 'voluntary')], + EventFilings.CONVDSF_NULL: ['conversion', ('dissolution', 'involuntary')], + EventFilings.CONVDSL_NULL: 'conversion', # TODO: liquidation + EventFilings.CONVDSO_NULL: ['conversion', ('dissolution', 'unknown')], + EventFilings.CONVICORP_NULL: 'conversion', + EventFilings.CONVID1_NULL: 'conversion', # TODO: related to invol dissolution + EventFilings.CONVID2_NULL: 'conversion', # TODO: related to invol dissolution + EventFilings.CONVILIQ_NULL: 'conversion', # TODO: liquidation + EventFilings.CONVLRSTR_NULL: ['conversion', ('restoration', 'limitedRestoration')], + EventFilings.CONVNC_NULL: ['conversion', 'changeOfName'], + EventFilings.CONVRSTR_NULL: ['conversion', ('restoration', 'fullRestoration')], + EventFilings.FILE_CO_AR: 'correction', EventFilings.FILE_CO_BC: 'correction', EventFilings.FILE_CO_DI: 'correction', @@ -228,9 +254,7 @@ def has_value(cls, value): EventFilings.FILE_ICORP: 'incorporationApplication', EventFilings.FILE_ICORU: 'incorporationApplication', EventFilings.FILE_ICORC: 'incorporationApplication', - EventFilings.CONVICORP_NULL: 'incorporationApplication', # TODO: re-map - # TODO: Ledger - unsupported # TODO: Legacy Other - unsupported EventFilings.FILE_AM_PF: 'legacyOther', EventFilings.FILE_AM_PO: 'legacyOther', @@ -285,7 +309,6 @@ def has_value(cls, value): EventFilings.FILE_AMLHC: 'Amalgamation Application Short Form (Horizontal) for a Community Contribution Company', EventFilings.FILE_AMLRC: 'Amalgamation Application (Regular) for a Community Contribution Company', EventFilings.FILE_AMLVC: 'Amalgamation Application Short Form (Vertical) for a Community Contribution Company', - EventFilings.CONVAMAL_NULL: None, # TODO: re-map EventFilings.FILE_ANNBC: 'BC Annual Report', # has suffix of date, dynamically add it during formatting @@ -338,9 +361,7 @@ def has_value(cls, value): EventFilings.FILE_ICORP: 'Incorporation Application', EventFilings.FILE_ICORU: 'Incorporation Application for a BC Unlimited Liability Company', EventFilings.FILE_ICORC: 'Incorporation Application for a Community Contribution Company', - EventFilings.CONVICORP_NULL: None, # TODO: re-map - # TODO: Ledger - unsupported # TODO: Legacy Other - unsupported EventFilings.FILE_AM_PF: 'Amendment - Put Back Off', EventFilings.FILE_AM_PO: 'Amendment - Put Back On', @@ -393,7 +414,7 @@ def has_value(cls, value): 'changeOfDirectors': ['last_cod_date'], 'agmExtension': ['last_agm_date'], 'amalgamationApplication': ['last_coa_date', 'last_cod_date'], - # TODO: 'dissolution_date' - Amalgamating business, continuation out + # TODO: 'dissolution_date' - continuation out # TODO: 'continuation_out_date' - continuation out 'continuationIn': ['last_coa_date', 'last_cod_date'], 'dissolution': ['dissolution_date'], diff --git a/data-tool/flows/tombstone/tombstone_queries.py b/data-tool/flows/tombstone/tombstone_queries.py index cc6955bd5..64757b26c 100644 --- a/data-tool/flows/tombstone/tombstone_queries.py +++ b/data-tool/flows/tombstone/tombstone_queries.py @@ -605,17 +605,20 @@ def get_filings_query(corp_num): u.email_addr as u_email_addr, u.role_typ_cd as u_role_typ_cd, --- conversion ledger - cl.ledger_title_txt as cl_ledger_title_txt + cl.ledger_title_txt as cl_ledger_title_txt, + -- conv event + to_char(ce.effective_dt at time zone 'UTC', 'YYYY-MM-DD HH24:MI:SSTZH:TZM') as ce_effective_dt_str from event e left outer join filing f on e.event_id = f.event_id left outer join filing_user u on u.event_id = e.event_id left outer join conv_ledger cl on cl.event_id = e.event_id + left outer join conv_event ce on e.event_id = ce.event_id where 1 = 1 and e.corp_num = '{corp_num}' -- and e.corp_num = 'BC0068889' -- and e.corp_num = 'BC0449924' -- AR, ADCORP -- and e.trigger_dts is not null - order by e.event_timerstamp + order by e.event_timerstamp, e.event_id ; """ return query diff --git a/data-tool/flows/tombstone/tombstone_utils.py b/data-tool/flows/tombstone/tombstone_utils.py index 006613c59..0a22b4647 100644 --- a/data-tool/flows/tombstone/tombstone_utils.py +++ b/data-tool/flows/tombstone/tombstone_utils.py @@ -248,8 +248,8 @@ def format_jurisdictions_data(data: dict, event_id: Decimal) -> dict: formatted_jurisdiction['country'] = None formatted_jurisdiction['region'] = None - can_jurisdiction_code = jurisdiction_info['j_can_jur_typ_cd'] - other_jurisdiction_desc = jurisdiction_info['j_othr_juris_desc'] + can_jurisdiction_code = jurisdiction_info['j_can_jur_typ_cd'] or '' + other_jurisdiction_desc = jurisdiction_info['j_othr_juris_desc'] or '' # when canadian jurisdiction, ignore othr_juris_desc if can_jurisdiction_code != 'OT': @@ -278,19 +278,29 @@ def format_filings_data(data: dict) -> list[dict]: for x in filings_data: event_file_type = x['event_file_type'] # TODO: build a new complete filing event mapper (WIP) - filing_type, filing_subtype = get_target_filing_type(event_file_type) + raw_filing_type, raw_filing_subtype = get_target_filing_type(event_file_type) # skip the unsupported ones - if not filing_type: + if not raw_filing_type: print(f'❗ Skip event filing type: {event_file_type}') unsupported_event_file_types.add(event_file_type) continue + + # get converted filing_type and filing_subtype + if raw_filing_type == 'conversion': + if isinstance(raw_filing_subtype, tuple): + filing_type, filing_subtype = raw_filing_subtype + else: + filing_type = raw_filing_subtype + filing_subtype = None + raw_filing_subtype = None + else: + filing_type = raw_filing_type + filing_subtype = raw_filing_subtype - effective_date = x['f_effective_dt_str'] - if not effective_date: - effective_date = x['e_event_dt_str'] + effective_date = x['ce_effective_dt_str'] or x['f_effective_dt_str'] or x['e_event_dt_str'] trigger_date = x['e_trigger_dt_str'] - filing_json, meta_data = build_filing_json_meta_data(filing_type, filing_subtype, + filing_json, meta_data = build_filing_json_meta_data(raw_filing_type, filing_type, filing_subtype, effective_date, x) filing_body = copy.deepcopy(FILING['filings']) @@ -301,23 +311,31 @@ def format_filings_data(data: dict) -> list[dict]: if not (user_id := x['u_user_id']): user_id = x['u_full_name'] if x['u_full_name'] else None + if raw_filing_type == 'conversion' or raw_filing_subtype == 'involuntary': + hide_in_ledger = True + else: + hide_in_ledger = False + filing_body = { **filing_body, 'filing_date': effective_date, - 'filing_type': filing_type, - 'filing_sub_type': filing_subtype, + 'filing_type': raw_filing_type, + 'filing_sub_type': raw_filing_subtype, 'completion_date': effective_date, 'effective_date': effective_date, 'filing_json': filing_json, 'meta_data': meta_data, + 'hide_in_ledger': hide_in_ledger, 'submitter_id': user_id, # will be updated to real user_id when loading data into db } + # conversion still need to populate create-new-business info + # based on converted filing type if filing_type == 'continuationIn': jurisdiction = format_jurisdictions_data(data, x['e_event_id']) if filing_type == 'amalgamationApplication': - amalgamation = format_amalgamations_data(data, x['e_event_id']) + amalgamation = format_amalgamations_data(data, x['e_event_id'], effective_date, filing_subtype) comments = format_filing_comments_data(data, x['e_event_id']) @@ -348,7 +366,7 @@ def format_filings_data(data: dict) -> list[dict]: } -def format_amalgamations_data(data: dict, event_id: Decimal) -> dict: +def format_amalgamations_data(data: dict, event_id: Decimal, amalgamation_date: str, amalgamation_type: str) -> dict: amalgamations_data = data['amalgamations'] matched_amalgamations = [ @@ -359,18 +377,12 @@ def format_amalgamations_data(data: dict, event_id: Decimal) -> dict: return None formatted_amalgmation = copy.deepcopy(AMALGAMATION) - amalgmation_info = matched_amalgamations[0] + amalgamation_info = matched_amalgamations[0] - amalgmation_date = amalgmation_info['f_effective_dt_str'] - if not amalgmation_date: - amalgmation_date = amalgmation_info['e_event_dt_str'] - formatted_amalgmation['amalgamations']['amalgamation_date'] = amalgmation_date - formatted_amalgmation['amalgamations']['court_approval'] = bool(amalgmation_info['f_court_approval']) - - event_file_type = amalgmation_info['event_file_type'] - _, filing_subtype = get_target_filing_type(event_file_type) + formatted_amalgmation['amalgamations']['amalgamation_date'] = amalgamation_date + formatted_amalgmation['amalgamations']['court_approval'] = bool(amalgamation_info['f_court_approval']) - formatted_amalgmation['amalgamations']['amalgamation_type'] = filing_subtype + formatted_amalgmation['amalgamations']['amalgamation_type'] = amalgamation_type formatted_tings = formatted_amalgmation['amalgamating_businesses'] for ting in matched_amalgamations: formatted_tings.append(format_amalgamating_businesses(ting)) @@ -546,9 +558,11 @@ def get_business_update_value(key: str, effective_date: str, trigger_date: str, return value -def build_filing_json_meta_data(filing_type: str, filing_subtype: str, effective_date: str, data: dict) -> tuple[dict, dict]: +def build_filing_json_meta_data(raw_filing_type: str, filing_type: str, filing_subtype: str, effective_date: str, data: dict) -> tuple[dict, dict]: filing_json = copy.deepcopy(FILING_JSON) - filing_json['filing'][filing_type] = {} + filing_json['filing'][raw_filing_type] = {} + if raw_filing_type != filing_type: + filing_json['filing'][filing_type] = {} meta_data = { 'colinFilingInfo': { @@ -560,6 +574,30 @@ def build_filing_json_meta_data(filing_type: str, filing_subtype: str, effective 'colinDisplayName': get_colin_display_name(data) } + if raw_filing_type == 'conversion': + # will populate state filing info for conversion in the following steps + # based on converted filing type and converted filing subtype + if filing_type in LEAR_STATE_FILINGS: + state_change = True + else: + state_change = False + if filing_type == 'changeOfName': + name_change = True + else: + name_change = False + filing_json['filing']['conversion'] = { + 'convFilingType': filing_type, + 'convFilingSubType': filing_subtype, + 'stateChange': state_change, + 'nameChange': name_change, + } + meta_data['conversion'] = { + 'convFilingType': filing_type, + 'convFilingSubType': filing_subtype, + 'stateChange': state_change, + 'nameChange': name_change, + } + if filing_type == 'annualReport': meta_data['annualReport'] = { 'annualReportFilingYear': int(effective_date[:4]), diff --git a/legal-api/migrations/versions/d0b10576924c_alter_amalgamation_type_enum.py b/legal-api/migrations/versions/d0b10576924c_alter_amalgamation_type_enum.py new file mode 100644 index 000000000..eeb169f79 --- /dev/null +++ b/legal-api/migrations/versions/d0b10576924c_alter_amalgamation_type_enum.py @@ -0,0 +1,50 @@ +"""alter_amalgamation_type_enum + +Revision ID: d0b10576924c +Revises: d9254d3cbbf4 +Create Date: 2025-02-03 21:47:05.061172 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +# revision identifiers, used by Alembic. +revision = 'd0b10576924c' +down_revision = 'd9254d3cbbf4' +branch_labels = None +depends_on = None + + +amalgamation_type_old_enum = postgresql.ENUM('regular', + 'vertical', + 'horizontal', + name='amalgamation_type_old') + + +def upgrade(): + with op.get_context().autocommit_block(): + op.execute("ALTER TYPE amalgamation_type ADD VALUE 'unknown'") + + +def downgrade(): + op.execute("UPDATE amalgamations SET amalgamation_type = 'regular' WHERE amalgamation_type = 'unknown'") + op.execute("UPDATE amalgamations_version SET amalgamation_type = 'regular' WHERE amalgamation_type = 'unknown'") + + amalgamation_type_old_enum.create(op.get_bind(), checkfirst=True) + + op.execute(""" + ALTER TABLE amalgamations + ALTER COLUMN amalgamation_type + TYPE amalgamation_type_old + USING amalgamation_type::text::amalgamation_type_old + """) + op.execute(""" + ALTER TABLE amalgamations_version + ALTER COLUMN amalgamation_type + TYPE amalgamation_type_old + USING amalgamation_type::text::amalgamation_type_old + """) + + op.execute("DROP TYPE amalgamation_type") + op.execute("ALTER TYPE amalgamation_type_old RENAME TO amalgamation_type") diff --git a/legal-api/src/legal_api/models/amalgamation.py b/legal-api/src/legal_api/models/amalgamation.py index 0b2ecc0ad..d5eabc237 100644 --- a/legal-api/src/legal_api/models/amalgamation.py +++ b/legal-api/src/legal_api/models/amalgamation.py @@ -37,6 +37,7 @@ class AmalgamationTypes(BaseEnum): regular = auto() vertical = auto() horizontal = auto() + unknown = auto() __versioned__ = {} __tablename__ = 'amalgamations' @@ -124,7 +125,8 @@ def get_revision_json(cls, transaction_id, business_id, tombstone=False): if tombstone: return { 'identifier': 'Not Available', - 'legalName': 'Not Available' + 'legalName': 'Not Available', + 'amalgamationDate': 'Not Available' } amalgamation = Amalgamation.get_revision(transaction_id, business_id) diff --git a/legal-api/src/legal_api/models/business.py b/legal-api/src/legal_api/models/business.py index 0ca1500cc..552266feb 100644 --- a/legal-api/src/legal_api/models/business.py +++ b/legal-api/src/legal_api/models/business.py @@ -790,7 +790,8 @@ def get_amalgamated_into(self) -> dict: else: return { 'identifier': 'Not Available', - 'legalName': 'Not Available' + 'legalName': 'Not Available', + 'amalgamationDate': 'Not Available' } return None diff --git a/legal-api/src/legal_api/models/filing.py b/legal-api/src/legal_api/models/filing.py index 4654eeb60..3dd431d8a 100644 --- a/legal-api/src/legal_api/models/filing.py +++ b/legal-api/src/legal_api/models/filing.py @@ -939,6 +939,23 @@ def get_filings_by_types(business_id: int, filing_types): all() return filings + @staticmethod + def get_conversion_filings_by_conv_types(business_id: int, filing_types: list): + """Return the conversion filings of a particular conv type. + + Records only exist in some legacy corps imported from COLIN. + """ + filings = db.session.query(Filing). \ + filter(Filing.business_id == business_id). \ + filter(Filing._filing_type == 'conversion'). \ + filter( + Filing._meta_data.op('->')('conversion').op('->>')('convFilingType').in_(filing_types) + ). \ + order_by(desc(Filing.transaction_id)). \ + all() + + return filings + @staticmethod def get_incomplete_filings_by_types(business_id: int, filing_types: list, excluded_statuses: list = None): """Return the filings of particular types and statuses. diff --git a/legal-api/src/legal_api/models/jurisdiction.py b/legal-api/src/legal_api/models/jurisdiction.py index 1705fc418..b7f7934d6 100644 --- a/legal-api/src/legal_api/models/jurisdiction.py +++ b/legal-api/src/legal_api/models/jurisdiction.py @@ -15,6 +15,7 @@ from __future__ import annotations from sql_versioning import Versioned +from sqlalchemy import and_, or_ from .db import db from .filing import Filing @@ -61,6 +62,15 @@ def get_continuation_in_jurisdiction(cls, business_id) -> Jurisdiction: # pylint: disable=protected-access jurisdiction = (db.session.query(Jurisdiction).join(Filing). filter(Jurisdiction.business_id == business_id). - filter(Filing._filing_type == 'continuationIn'). + filter( + or_( + Filing._filing_type == 'continuationIn', + and_( + Filing._filing_type == 'conversion', + Filing._meta_data.op('->')('conversion'). + op('->>')('convFilingType') == 'continuationIn' + ) + ) + ). one_or_none()) return jurisdiction diff --git a/legal-api/src/legal_api/reports/business_document.py b/legal-api/src/legal_api/reports/business_document.py index e806d380c..b80f92283 100644 --- a/legal-api/src/legal_api/reports/business_document.py +++ b/legal-api/src/legal_api/reports/business_document.py @@ -327,6 +327,12 @@ def _set_business_state_changes(self, business: dict): 'continuationOut']): state_filings.append(self._format_state_filing(filing)) + # TODO: add conv liquidation etc. in the future work + for filing in Filing.get_conversion_filings_by_conv_types(self._business.id, ['dissolution', + 'continuationOut', + 'restoration']): + state_filings.append(self._format_state_filing(filing)) + # If it has linked amalgamating businesses # set placeholder info if this business is tombstone tombstone = self._business.is_tombstone @@ -410,34 +416,40 @@ def _set_business_changes(self, business: dict): def _format_state_filing(self, filing: Filing) -> dict: """Format state change filing data.""" filing_info = {} + filing_meta = filing.meta_data + if filing.filing_type == 'conversion': + filing_type = filing_meta.get('conversion').get('convFilingType') + filing_sub_type = filing_meta.get('conversion').get('convFilingSubType') + else: + filing_type = filing.filing_type + filing_sub_type = filing.filing_sub_type - filing_info['filingType'] = filing.filing_type - filing_info['filingSubType'] = filing.filing_sub_type + filing_info['filingType'] = filing_type + filing_info['filingSubType'] = filing_sub_type filing_info['filingDateTime'] = filing.filing_date.isoformat() filing_info['effectiveDateTime'] = filing.effective_date.isoformat() - filing_meta = filing.meta_data - if filing.filing_type == 'dissolution': + if filing_type == 'dissolution': filing_info['filingName'] = BusinessDocument.\ - _get_summary_display_name(filing.filing_type, + _get_summary_display_name(filing_type, filing_meta['dissolution']['dissolutionType'], self._business.legal_type) if self._business.legal_type in ['SP', 'GP'] and filing_meta['dissolution']['dissolutionType'] == \ 'voluntary': filing_info['dissolution_date_str'] = LegislationDatetime.as_legislation_timezone_from_date_str( filing.filing_json['filing']['dissolution']['dissolutionDate']).strftime(OUTPUT_DATE_FORMAT) - elif filing.filing_type == 'restoration': + elif filing_type == 'restoration': filing_info['filingName'] = BusinessDocument.\ - _get_summary_display_name(filing.filing_type, - filing.filing_sub_type, + _get_summary_display_name(filing_type, + filing_sub_type, self._business.legal_type) - if filing.filing_sub_type in ['limitedRestoration', 'limitedRestorationExtension']: + if filing_sub_type in ['limitedRestoration', 'limitedRestorationExtension']: expiry_date = filing_meta['restoration']['expiry'] expiry_date = LegislationDatetime.as_legislation_timezone_from_date_str(expiry_date) expiry_date = expiry_date.replace(minute=1) filing_info['limitedRestorationExpiryDate'] = LegislationDatetime.format_as_report_string(expiry_date) - elif filing.filing_type == 'continuationOut': - filing_info['filingName'] = BusinessDocument._get_summary_display_name(filing.filing_type, None, None) + elif filing_type == 'continuationOut': + filing_info['filingName'] = BusinessDocument._get_summary_display_name(filing_type, None, None) country_code = filing_meta['continuationOut']['country'] region_code = filing_meta['continuationOut']['region'] @@ -453,13 +465,14 @@ def _format_state_filing(self, filing: Filing) -> dict: filing_info['continuationOutDate'] = continuation_out_date.strftime(OUTPUT_DATE_FORMAT) else: filing_info['filingName'] = BusinessDocument.\ - _get_summary_display_name(filing.filing_type, None, None) + _get_summary_display_name(filing_type, None, None) return filing_info def _set_amalgamation_details(self, business: dict): """Set amalgamation filing data.""" amalgamated_businesses = [] - filings = Filing.get_filings_by_types(self._business.id, ['amalgamationApplication']) + filings = Filing.get_filings_by_types(self._business.id, ['amalgamationApplication']) or \ + Filing.get_conversion_filings_by_conv_types(self._business.id, ['amalgamationApplication']) if filings: amalgamation_application = filings[0] business['business']['amalgamatedEntity'] = True @@ -519,7 +532,8 @@ def _set_liquidation_details(self, business: dict): def _set_continuation_in_details(self, business: dict): """Set continuation in filing data.""" continuation_in_info = {} - continuation_in_filing = Filing.get_filings_by_types(self._business.id, ['continuationIn']) + continuation_in_filing = Filing.get_filings_by_types(self._business.id, ['continuationIn']) or \ + Filing.get_conversion_filings_by_conv_types(self._business.id, ['continuationIn']) if continuation_in_filing: continuation_in_filing = continuation_in_filing[0] jurisdiction = Jurisdiction.get_continuation_in_jurisdiction(continuation_in_filing.business_id) @@ -541,21 +555,16 @@ def _set_continuation_in_details(self, business: dict): jurisdiction_info = { 'id': jurisdiction.id, 'jurisdiction': location_jurisdiction, - 'identifier': jurisdiction.identifier, - 'legal_name': jurisdiction.legal_name, + 'identifier': jurisdiction.identifier or 'Not Available', + 'legal_name': jurisdiction.legal_name or 'Not Available', 'tax_id': jurisdiction.tax_id, 'incorporation_date': formatted_incorporation_date, 'expro_identifier': jurisdiction.expro_identifier, - 'expro_legal_name': jurisdiction.expro_legal_name, + 'expro_legal_name': jurisdiction.expro_legal_name or 'Not Available', 'business_id': jurisdiction.business_id, 'filing_id': jurisdiction.filing_id, } - # Imported from COLIN - if self._business.is_tombstone: - jurisdiction_info['expro_identifier'] = 'Not Available' - jurisdiction_info['expro_legal_name'] = 'Not Available' - continuation_in_info['foreignJurisdiction'] = jurisdiction_info business['continuationIn'] = continuation_in_info @@ -620,7 +629,8 @@ def _get_legal_type_description(legal_type: str) -> str: 'GP': 'Dissolution Application' }, 'involuntary': 'Involuntary Dissolution', - 'administrative': 'Administrative Dissolution' + 'administrative': 'Administrative Dissolution', + 'unknown': 'Dissolved' }, 'restorationApplication': 'Restoration Application', 'restoration': { diff --git a/legal-api/tests/unit/models/test_amalgamation.py b/legal-api/tests/unit/models/test_amalgamation.py index 52bc20473..7f2e0dda5 100644 --- a/legal-api/tests/unit/models/test_amalgamation.py +++ b/legal-api/tests/unit/models/test_amalgamation.py @@ -104,11 +104,23 @@ def test_valid_amalgamation_save(session): amalgamation_3.save() + amalgamation_4 = Amalgamation( + amalgamation_type=Amalgamation.AmalgamationTypes.unknown, + business_id=b.id, + filing_id=filing.id, + amalgamation_date=datetime.utcnow(), + court_approval=True + ) + + amalgamation_4.save() + # verify assert amalgamation_1.id assert amalgamation_2.id assert amalgamation_3.id + assert amalgamation_4.id for type in Amalgamation.AmalgamationTypes: assert type in [Amalgamation.AmalgamationTypes.horizontal, Amalgamation.AmalgamationTypes.vertical, - Amalgamation.AmalgamationTypes.regular] + Amalgamation.AmalgamationTypes.regular, + Amalgamation.AmalgamationTypes.unknown]