Skip to content

Commit

Permalink
- worked on amalgamating businesses data/types (WIP)
Browse files Browse the repository at this point in the history
  • Loading branch information
severinbeauvais committed Dec 5, 2023
1 parent 78f3da6 commit e2d964c
Show file tree
Hide file tree
Showing 15 changed files with 171 additions and 106 deletions.
1 change: 1 addition & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
"array-move": "^4.0.0",
"axios": "^0.27.2",
"core-js": "^3.30.1",
"country-list": "^2.2.0",
"http-status-codes": "^2.2.0",
"launchdarkly-js-client-sdk": "^2.24.2",
"lodash": "^4.17.21",
Expand Down
6 changes: 3 additions & 3 deletions src/components/Amalgamation/AmalgamatingBusinesses.vue
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@
Mailing Address: {{ business.officeAddress.mailingAddress }} <br>
State: {{ business.state }} <br>
Good Standing: {{ business.goodStanding }} <br>
</template>
</template>
<template v-else>
Legal Name: {{ business.name }} <br>
Legal Type: {{ business.legalType }} <br>
Expand Down Expand Up @@ -142,7 +142,7 @@ import { useStore } from '@/store/store'
import { CommonMixin } from '@/mixins'
import { BusinessLookupServices, LegalServices } from '@/services'
import { BusinessLookup } from '@bcrs-shared-components/business-lookup'
import { BusinessLookupIF, EmptyBusinessLookup } from '@/interfaces'
import { AmalgamatingBusinessIF, BusinessLookupIF, EmptyBusinessLookup } from '@/interfaces'
import BusinessTable from '@/components/Amalgamation/BusinessTable.vue'
@Component({
Expand All @@ -152,7 +152,7 @@ import BusinessTable from '@/components/Amalgamation/BusinessTable.vue'
}
})
export default class AmalgamatingBusinesses extends Mixins(CommonMixin) {
@Getter(useStore) getAmalgamatingBusinesses!: Array<any>
@Getter(useStore) getAmalgamatingBusinesses!: AmalgamatingBusinessIF[]
@Getter(useStore) getShowErrors!: boolean
@Getter(useStore) isAmalgamationFilingHorizontal!: boolean
@Getter(useStore) isRoleStaff!: boolean
Expand Down
50 changes: 25 additions & 25 deletions src/components/Amalgamation/BusinessStatus.vue
Original file line number Diff line number Diff line change
Expand Up @@ -25,65 +25,65 @@

<script lang="ts">
import { Component, Prop, Vue } from 'vue-property-decorator'
import { BusinessStatuses } from '@/enums'
import { AmalgamatingStatuses } from '@/enums'
@Component({})
export default class BusinessStatus extends Vue {
@Prop({ required: true }) readonly status!: BusinessStatuses
@Prop({ required: true }) readonly status!: AmalgamatingStatuses
get icon (): string {
switch (this.status) {
case BusinessStatuses.OK: return 'mdi-check'
case AmalgamatingStatuses.OK: return 'mdi-check'
case BusinessStatuses.ERROR_AFFILIATION:
case BusinessStatuses.ERROR_CCC_MISMATCH:
case BusinessStatuses.ERROR_FOREIGN:
case BusinessStatuses.ERROR_NIGS: return 'mdi-alert'
case AmalgamatingStatuses.ERROR_AFFILIATION:
case AmalgamatingStatuses.ERROR_CCC_MISMATCH:
case AmalgamatingStatuses.ERROR_FOREIGN:
case AmalgamatingStatuses.ERROR_NIGS: return 'mdi-alert'
default: return 'mdi-help' // should never happen
default: return 'mdi-alert-circle-outline' // should never happen
}
}
get color (): string {
switch (this.status) {
case BusinessStatuses.OK: return 'success'
case AmalgamatingStatuses.OK: return 'success'
case BusinessStatuses.ERROR_AFFILIATION:
case BusinessStatuses.ERROR_CCC_MISMATCH:
case BusinessStatuses.ERROR_FOREIGN:
case BusinessStatuses.ERROR_NIGS: return 'warning'
case AmalgamatingStatuses.ERROR_AFFILIATION:
case AmalgamatingStatuses.ERROR_CCC_MISMATCH:
case AmalgamatingStatuses.ERROR_FOREIGN:
case AmalgamatingStatuses.ERROR_NIGS: return 'warning'
default: return 'gray7' // should never happen
default: return 'error' // should never happen
}
}
get text (): string {
switch (this.status) {
case BusinessStatuses.OK: return 'Ready'
case AmalgamatingStatuses.OK: return 'Ready'
case BusinessStatuses.ERROR_AFFILIATION:
case BusinessStatuses.ERROR_CCC_MISMATCH:
case BusinessStatuses.ERROR_FOREIGN:
case BusinessStatuses.ERROR_NIGS: return 'Attention Required'
case AmalgamatingStatuses.ERROR_AFFILIATION:
case AmalgamatingStatuses.ERROR_CCC_MISMATCH:
case AmalgamatingStatuses.ERROR_FOREIGN:
case AmalgamatingStatuses.ERROR_NIGS: return 'Attention Required'
default: return 'Unknown' // should never happen
default: return '(Unknown)' // should never happen
}
}
get tooltip (): string {
switch (this.status) {
case BusinessStatuses.OK:
case AmalgamatingStatuses.OK:
return ''
case BusinessStatuses.ERROR_AFFILIATION:
case AmalgamatingStatuses.ERROR_AFFILIATION:
return 'This business is not affiliated with the currently selected BC Registries account. ' +
'Affiliate this business with the account on My Business Registry page.'
case BusinessStatuses.ERROR_CCC_MISMATCH:
case AmalgamatingStatuses.ERROR_CCC_MISMATCH:
return 'A BC Community Contribution Company must amalgamate to form a new BC Community ' +
'Contribution Company.'
case BusinessStatuses.ERROR_FOREIGN:
case AmalgamatingStatuses.ERROR_FOREIGN:
return 'A foreign corporation must not amalgamate with a limited company and continue as ' +
'an unlimited liability company.'
case BusinessStatuses.ERROR_NIGS:
case AmalgamatingStatuses.ERROR_NIGS:
return 'This business is not in good standing. This filing cannot be submitted until all ' +
'businesses are in good standing.'
Expand Down
37 changes: 26 additions & 11 deletions src/components/Amalgamation/BusinessTable.vue
Original file line number Diff line number Diff line change
Expand Up @@ -15,27 +15,29 @@
<tbody>
<tr
v-for="(item, index) in businesses"
:key="item.businessId"
:key="item.identifier"
>
<td class="business-name">
<strong>{{ item.name }}</strong><br>{{ item.email }}
</td>

<td class="business-type">
{{ GetCorpFullDescription(item.type) }}
{{ GetCorpFullDescription(item.legalType) }}
</td>

<td class="business-address">
<BaseAddress
v-if="item.address"
:address="item.address"
/>
<span v-else-if="item.jurisdiction">{{ item.jurisdiction }}</span>
<span v-else-if="item.foreignJurisdiction">{{ jurisdiction(item) }}</span>
<span v-else>Affiliate to view</span>
</td>

<td class="business-role">
{{ item.role }}
<span v-if="item.role === AmlRoles.AMALGAMATING">Amalgamating Business</span>
<span v-else-if="item.role === AmlRoles.HOLDING">Holding Company</span>
<span v-else>(Unknown)</span>
</td>

<td class="business-status">
Expand Down Expand Up @@ -66,9 +68,10 @@
<script lang="ts">
import { Component, Emit, Vue, Watch } from 'vue-property-decorator'
import { Getter, Action } from 'pinia-class'
import { getName } from 'country-list'
import { useStore } from '@/store/store'
import { BusinessStatuses } from '@/enums'
import { DefineCompanyIF } from '@/interfaces'
import { AmalgamatingStatuses, AmlRoles } from '@/enums'
import { AmalgamatingBusinessIF, DefineCompanyIF } from '@/interfaces'
import { BaseAddress } from '@bcrs-shared-components/base-address'
import BusinessStatus from './BusinessStatus.vue'
import { GetCorpFullDescription } from '@bcrs-shared-components/corp-type-module'
Expand All @@ -80,28 +83,40 @@ import { GetCorpFullDescription } from '@bcrs-shared-components/corp-type-module
}
})
export default class BusinessTable extends Vue {
readonly AmlRoles = AmlRoles
readonly GetCorpFullDescription = GetCorpFullDescription
@Getter(useStore) getAmalgamatingBusinesses!: any[]
@Getter(useStore) getAmalgamatingBusinesses!: AmalgamatingBusinessIF[]
@Getter(useStore) getDefineCompanyStep!: DefineCompanyIF
@Getter(useStore) getNameTranslationsValid!: boolean
@Getter(useStore) getShowErrors!: boolean
@Getter(useStore) isBaseCompany!: boolean
@Getter(useStore) isRoleStaff!: boolean
@Action(useStore) setAmalgamatingBusinesses!: (x: any[]) => void
@Action(useStore) setAmalgamatingBusinesses!: (x: AmalgamatingBusinessIF[]) => void
@Action(useStore) setDefineCompanyStepValidity!: (x: boolean) => void
@Action(useStore) setIgnoreChanges!: (x: boolean) => void
get businesses (): any[] {
// *** TODO: use "map" to compute status from other info
// eg, if business.goodStanding != true then status = ERROR_NIGS
return this.getAmalgamatingBusinesses.map(business => {
if (!business.goodStanding) business.status = BusinessStatuses.ERROR_NIGS
if (!business.goodStanding) business.status = AmalgamatingStatuses.ERROR_NIGS
return business
})
}
jurisdiction (item: any): string {
const fj = item?.foreignJurisdiction
if (fj?.country) {
const country = getName(fj.country)
const region = (fj.region === 'FEDERAL' ? 'Federal' : fj.region)
if (region) return `${region}, ${country}`
return country
}
return null // should never happen
}
removeBusiness (index: number): void {
const temp = this.getAmalgamatingBusinesses
temp.splice(index, 1)
Expand All @@ -111,7 +126,7 @@ export default class BusinessTable extends Vue {
@Watch('businesses', { deep: true, immediate: true })
@Emit('valid')
private emitValidity (): boolean {
return this.businesses.every(business => business.status === BusinessStatuses.OK)
return this.businesses.every(business => business.status === AmalgamatingStatuses.OK)
}
}
</script>
Expand Down Expand Up @@ -167,7 +182,7 @@ export default class BusinessTable extends Vue {
max-width: 120px;
}
& td.business-status {
max-width: 100px;
max-width: 120px;
}
& td.business-actions {
max-width: 125px;
Expand Down
12 changes: 12 additions & 0 deletions src/enums/amalgamationEnums.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export enum AmalgamatingStatuses {
OK,
ERROR_AFFILIATION,
ERROR_CCC_MISMATCH,
ERROR_FOREIGN,
ERROR_NIGS
}

export enum AmlRoles {
AMALGAMATING = 'amalgamating',
HOLDING = 'holding'
}
7 changes: 0 additions & 7 deletions src/enums/businessStatuses.ts

This file was deleted.

2 changes: 1 addition & 1 deletion src/enums/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export * from './amalgamationEnums'
export * from './bulletListTypes'
export * from './businessStatuses'
export * from './dissolutionStatementTypes'
export * from './dissolutionTypes'
export * from './effectOfOrders'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,55 @@
import { AmalgamationTypes } from '@/enums'
import { AddressIF } from '@/interfaces'
import { AmalgamatingStatuses, AmalgamationTypes, AmlRoles } from '@/enums'
import { CorpTypeCd } from '@bcrs-shared-components/corp-type-module'

/** Interface for LEAR amalgamating businesses. */
interface AmalgamatingLearIF {
type: 'lear'
role: AmlRoles
identifier: string
name: string
email: string
legalType: CorpTypeCd
address: AddressIF
goodStanding: boolean
status: AmalgamatingStatuses
}

/** Interface for foreign amalgamating businesses. */
interface AmalgamatingForeignIF {
type: 'foreign',
role: AmlRoles
foreignJurisdiction: {
region: string
country: string
}
legalName: string
identifier: string
status: AmalgamatingStatuses
}

/**
* Interface for amalgamating business data.
* NB: this is very similar to the actual schema
*/
// export interface AmalgamatingBusinessIF {
// identifier: string // also used as corpNumber for a foreign business
// name: string // also used as legalName for a foreign business
// email: string // may be null
// legalType: CorpTypeCd // is null for a foreign business
// address?: AddressIF // mailing address
// foreignJurisdiction?: any // for a foreign business only
// role: AmlRoles
// goodStanding?: boolean // may be null
// status: AmalgamatingStatuses
// }

// type alias (union type)
export type AmalgamatingBusinessIF = AmalgamatingLearIF | AmalgamatingForeignIF

/** State interface for amalgamation-specific data. */
export interface AmalgamationStateIF {
amalgamatingBusinesses: Array<any>
amalgamatingBusinesses: Array<AmalgamatingBusinessIF>
courtApproval: boolean
type: AmalgamationTypes
}
Loading

0 comments on commit e2d964c

Please sign in to comment.