+ This is the location of the home prior to the transport permit being issued and will be the
+ registered location of the home.
+
+
+
+
@@ -235,7 +271,7 @@
-
+
{
+ return props.isPrevTransportPermitLocation ? !homeLocationInfo.pidNumber : getIsManualLocation.value
+ }),
hasAddress: computed((): boolean => {
return !!(homeLocationInfo.address?.street ||
homeLocationInfo.address?.streetAdditional ||
@@ -708,7 +754,6 @@ export default defineComponent({
RouteNames,
MhrSectVal,
getStepValidation,
- getIsManualLocation,
isMhrManufacturerRegistration,
shortPacificDate,
getMhrRegistrationLocation,
@@ -717,6 +762,7 @@ export default defineComponent({
isNotManufacturersLot,
isAmendLocationActive,
isChangeLocationActive,
+ isCancelChangeLocationActive,
correctionState,
isMhrCorrection,
...toRefs(localState)
@@ -742,4 +788,8 @@ export default defineComponent({
.error-text {
font-size: 16px;
}
+
+.cancelled-location-info {
+ opacity: 0.5;
+}
diff --git a/ppr-ui/src/components/registration/RegistrationBarTypeAheadList.vue b/ppr-ui/src/components/registration/RegistrationBarTypeAheadList.vue
index 96cc15139..6377f36fe 100644
--- a/ppr-ui/src/components/registration/RegistrationBarTypeAheadList.vue
+++ b/ppr-ui/src/components/registration/RegistrationBarTypeAheadList.vue
@@ -72,6 +72,7 @@
{
setMhrTransferAttentionReference,
setMhrTransferConsideration,
setMhrAccountSubmittingParty,
- setMhrInformationPermitData
+ setMhrInformationPermitData,
+ setMhrTransportPermitPreviousLocation,
+ setTransportPermitChangeAllowed
} = useStore()
const {
// Getters
@@ -164,6 +166,12 @@ export const useMhrInformation = () => {
// Set Transports Permit Data when it's present
if(!!data?.permitStatus) await parseMhrPermitData(data)
+ // previous location of the Transport Permit (used to cancel the permit)
+ data?.previousLocation && parsePreviousLocation(data.previousLocation)
+
+ // parse the flag for Transport Permit changes (eg QS can only cancel its own permits)
+ data?.changePermit && setTransportPermitChangeAllowed(data.changePermit)
+
// Parse transfer details conditionally.
// Some situations call for it being pre-populated from base registration.
includeDetails && parseTransferDetails(data)
@@ -351,6 +359,20 @@ export const useMhrInformation = () => {
setMhrTransferOwnLand(data?.ownLand || null)
}
+ // Parse previous location of home - user for transport permit cancellation
+ const parsePreviousLocation = (previousLocation: MhrRegistrationHomeLocationIF): void => {
+
+ const otherTypes = [HomeLocationTypes.OTHER_RESERVE, HomeLocationTypes.OTHER_STRATA, HomeLocationTypes.OTHER_TYPE]
+
+ // otherType location is used in UI only
+ if (otherTypes.includes(previousLocation.locationType)) {
+ previousLocation.otherType = previousLocation.locationType
+ previousLocation.locationType = HomeLocationTypes.OTHER_LAND
+ }
+
+ setMhrTransportPermitPreviousLocation(previousLocation);
+ }
+
/** Filing Submission Helpers **/
const parseOwnerGroups = (isDraft: boolean = false): MhrRegistrationHomeOwnerGroupIF[] => {
diff --git a/ppr-ui/src/composables/mhrInformation/useTransportPermits.ts b/ppr-ui/src/composables/mhrInformation/useTransportPermits.ts
index 51060cafc..b84e83395 100644
--- a/ppr-ui/src/composables/mhrInformation/useTransportPermits.ts
+++ b/ppr-ui/src/composables/mhrInformation/useTransportPermits.ts
@@ -17,6 +17,7 @@ import { cloneDeep, get, isEqual } from 'lodash'
// Global constants
const isChangeLocationActive: Ref = ref(false)
const isAmendLocationActive: Ref = ref(false)
+const isCancelChangeLocationActive: Ref = ref(false)
export const useTransportPermits = () => {
const {
@@ -51,12 +52,18 @@ export const useTransportPermits = () => {
getFeatureFlag('mhr-transport-permit-enabled')
})
- /** Returns true when staff and the feature flag is enabled **/
+ /** Returns true when staff and the feature flag is enabled to amend transport **/
const isAmendChangeLocationEnabled: ComputedRef = computed((): boolean => {
return (isRoleStaffReg.value || isRoleQualifiedSupplier.value || isRoleStaffSbc.value) &&
getFeatureFlag('mhr-amend-transport-permit-enabled')
})
+ /** Returns true when staff and the feature flag is enabled to cancel transport permit**/
+ const isCancelChangeLocationEnabled: ComputedRef = computed((): boolean => {
+ return (isRoleStaffReg.value || isRoleQualifiedSupplier.value || isRoleStaffSbc.value) &&
+ getFeatureFlag('mhr-cancel-transport-permit-enabled')
+ })
+
/** Checks if Home's current location is not on Manufacturer's Lot **/
const isNotManufacturersLot: ComputedRef = computed((): boolean =>
getMhrRegistrationLocation.value.locationType !== HomeLocationTypes.LOT
@@ -92,6 +99,11 @@ export const useTransportPermits = () => {
isAmendLocationActive.value = val
}
+ /** Toggle Amend location change flow **/
+ const setCancelLocationChange = (val: boolean) => {
+ isCancelChangeLocationActive.value = val
+ }
+
const setLocationChangeType = (locationChangeType: LocationChangeTypes) => {
setMhrTransportPermitLocationChangeType(locationChangeType)
}
@@ -250,6 +262,7 @@ export const useTransportPermits = () => {
const initTransportPermit = (): MhrTransportPermitIF => {
isAmendLocationActive.value = false
+ isCancelChangeLocationActive.value = false
return {
documentId: '',
submittingParty: {
@@ -307,6 +320,7 @@ export const useTransportPermits = () => {
reserveNumber: '',
exceptionPlan: ''
} as MhrRegistrationHomeLocationIF,
+ previousLocation: null,
ownLand: null,
registrationStatus: ''
}
@@ -318,8 +332,10 @@ export const useTransportPermits = () => {
resetTransportPermit,
isChangeLocationActive,
isAmendLocationActive,
+ isCancelChangeLocationActive,
isChangeLocationEnabled,
isAmendChangeLocationEnabled,
+ isCancelChangeLocationEnabled,
isNotManufacturersLot,
isActiveHomeOutsideBc,
isMovingWithinSamePark,
@@ -331,6 +347,7 @@ export const useTransportPermits = () => {
setLocationChange,
setLocationChangeType,
setAmendLocationChange,
+ setCancelLocationChange,
getUiLocationType,
getUiFeeSummaryLocationType,
populateLocationInfoForSamePark,
diff --git a/ppr-ui/src/enums/transportPermits.ts b/ppr-ui/src/enums/transportPermits.ts
index e829dbdee..22ea85866 100644
--- a/ppr-ui/src/enums/transportPermits.ts
+++ b/ppr-ui/src/enums/transportPermits.ts
@@ -1,5 +1,6 @@
export enum LocationChangeTypes {
TRANSPORT_PERMIT = 'TRANSPORT_PERMIT',
TRANSPORT_PERMIT_SAME_PARK = 'TRANSPORT_PERMIT_SAME_PARK',
+ TRANSPORT_PERMIT_CANCEL = 'CANCEL_PERMIT',
REGISTERED_LOCATION = 'REGISTERED_LOCATION'
}
diff --git a/ppr-ui/src/interfaces/mhr-registration-interfaces/MhrTransportPermitIF.ts b/ppr-ui/src/interfaces/mhr-registration-interfaces/MhrTransportPermitIF.ts
index 8ebc5d313..74fd46171 100644
--- a/ppr-ui/src/interfaces/mhr-registration-interfaces/MhrTransportPermitIF.ts
+++ b/ppr-ui/src/interfaces/mhr-registration-interfaces/MhrTransportPermitIF.ts
@@ -8,6 +8,7 @@ export interface MhrTransportPermitIF {
submittingParty: SubmittingPartyIF,
locationChangeType: LocationChangeTypes,
newLocation: MhrRegistrationHomeLocationIF,
+ previousLocation: MhrRegistrationHomeLocationIF, // used when cancelling the permits
ownLand: boolean,
landStatusConfirmation?: boolean,
amendment?: boolean
diff --git a/ppr-ui/src/interfaces/ppr-api-interfaces/registration-interfaces.ts b/ppr-ui/src/interfaces/ppr-api-interfaces/registration-interfaces.ts
index af71a2941..fbd845b9f 100644
--- a/ppr-ui/src/interfaces/ppr-api-interfaces/registration-interfaces.ts
+++ b/ppr-ui/src/interfaces/ppr-api-interfaces/registration-interfaces.ts
@@ -172,6 +172,7 @@ export interface MhRegistrationSummaryIF {
lienRegistrationType?: string
frozenDocumentType?: string
exemptDateTime?: string
+ changePermit?: boolean // used to determine if QS can cancel MHR Transport Permit
permitDateTime?: string
permitExpiryDateTime?: string
permitRegistrationNumber?: string
diff --git a/ppr-ui/src/store/store.ts b/ppr-ui/src/store/store.ts
index d10987e8a..c100fcf41 100644
--- a/ppr-ui/src/store/store.ts
+++ b/ppr-ui/src/store/store.ts
@@ -833,11 +833,20 @@ export const useStore = defineStore('assetsStore', () => {
return omit(state.value.mhrOriginalTransportPermit?.newLocation, 'address')
})
+ const getMhrTransportPermitPreviousLocation = computed((): MhrRegistrationHomeLocationIF => {
+ return state.value.mhrTransportPermit.previousLocation
+ })
+
// get original status of the registration when working with amendments
const getMhrOriginalTransportPermitRegStatus = computed((): string => {
return state.value.mhrOriginalTransportPermit.registrationStatus
})
+ // get a flag to indicate if change to the Transport Permit are allowed
+ const getTransportPermitChangeAllowed = computed((): boolean => {
+ return state.value.mhrInformation.changePermit
+ })
+
/** Actions **/
function resetNewRegistration () {
state.value.registration.registrationNumber = null
@@ -1276,6 +1285,10 @@ export const useStore = defineStore('assetsStore', () => {
state.value.mhrInformation[`permit${permitKey}`] = permitData
}
+ function setTransportPermitChangeAllowed (changePermit: boolean) {
+ state.value.mhrInformation.changePermit = changePermit
+ }
+
function setMhrUnitNotes (unitNotes: Array) {
state.value.mhrUnitNotes = unitNotes
}
@@ -1322,6 +1335,10 @@ export const useStore = defineStore('assetsStore', () => {
setUnsavedChanges(true)
}
+ function setMhrTransportPermitPreviousLocation (prevLocation: MhrRegistrationHomeLocationIF) {
+ state.value.mhrTransportPermit.previousLocation = prevLocation
+ }
+
/** Original Transport Permit filing when working with Amendments */
function setMhrOriginalTransportPermit ({ key, value }) {
state.value.mhrOriginalTransportPermit[key] = value
@@ -1631,7 +1648,9 @@ export const useStore = defineStore('assetsStore', () => {
getMhrTransportPermitHomeLocation,
getMhrOriginalTransportPermit,
getMhrOriginalTransportPermitHomeLocation,
+ getMhrTransportPermitPreviousLocation,
getMhrOriginalTransportPermitRegStatus,
+ getTransportPermitChangeAllowed,
// ACTIONS
@@ -1744,7 +1763,9 @@ export const useStore = defineStore('assetsStore', () => {
setMhrTransportPermitNewLocation,
setMhrTransportPermitNewPad,
setMhrTransportPermitNewCivicAddress,
+ setMhrTransportPermitPreviousLocation,
setMhrOriginalTransportPermit,
+ setTransportPermitChangeAllowed,
// MHR Unit Notes
setMhrUnitNoteType,
diff --git a/ppr-ui/src/utils/feature-flags.ts b/ppr-ui/src/utils/feature-flags.ts
index cb322ba2e..4314e62fa 100644
--- a/ppr-ui/src/utils/feature-flags.ts
+++ b/ppr-ui/src/utils/feature-flags.ts
@@ -19,6 +19,7 @@ export const defaultFlagSet: LDFlagSet = {
'mhr-non-res-exemption-enabled': false, // Enables Non-Residential Exemption for Staff
'mhr-transport-permit-enabled': false,
'mhr-amend-transport-permit-enabled': false,
+ 'mhr-cancel-transport-permit-enabled': true,
'mhr-user-access-enabled': false,
'sentry-enable': false, // by default, no sentry logs
'banner-text': '' // by default, there is no banner text
diff --git a/ppr-ui/src/views/mhrInformation/MhrInformation.vue b/ppr-ui/src/views/mhrInformation/MhrInformation.vue
index aa76c916f..8baccd83d 100644
--- a/ppr-ui/src/views/mhrInformation/MhrInformation.vue
+++ b/ppr-ui/src/views/mhrInformation/MhrInformation.vue
@@ -367,7 +367,7 @@
:validate="validate"
:disabledDueToLocation="disableRoleBaseLocationChange"
@updateLocationType="validate = false"
- @cancelTransportPermitChanges="handleCancelTransportPermitChanges()"
+ @cancelTransportPermitChanges="handleCancelTransportPermitChanges($event)"
/>
+
+
@@ -407,9 +415,7 @@
class="pl-1"
color="primary"
:ripple="false"
- :disabled="isFrozenMhrDueToAffidavit || isFrozenMhrDueToUnitNote ||
- ((hasLien && !isLienRegistrationTypeSA) &&
- (!isRoleStaffReg || isChangeLocationActive || disableRoleBaseTransfer))"
+ :disabled="isChangeOwnershipBtnDisabled"
@click="toggleTypeSelector()"
>
@@ -502,7 +508,7 @@
/>
@@ -524,7 +533,7 @@
@@ -533,13 +542,13 @@
:setShowButtons="true"
:setBackBtn="showBackBtn"
:setCancelBtn="'Cancel'"
- :setSaveBtn="isChangeLocationActive ? '' : 'Save and Resume Later'"
+ :setSaveBtn="(isChangeLocationActive || isCancelChangeLocationActive) ? '' : 'Save and Resume Later'"
:setSubmitBtn="reviewConfirmText"
:setRightOffset="true"
:setShowFeeSummary="true"
:setFeeType="feeType"
:setErrMsg="transferErrorMsg"
- :transferType="isChangeLocationActive
+ :transferType="(isChangeLocationActive || isCancelChangeLocationActive)
? getUiFeeSummaryLocationType(transportPermitLocationType)
: getUiTransferType()"
:setIsLoading="submitBtnLoading"
@@ -798,6 +807,7 @@ export default defineComponent({
isChangeLocationActive,
isChangeLocationEnabled,
isAmendLocationActive,
+ isCancelChangeLocationActive,
isTransportPermitDisabled,
isRegisteredLocationChange,
setLocationChange,
@@ -843,6 +853,17 @@ export default defineComponent({
disableRoleBaseLocationChange: false, // disabled state of location change/transport permit btn
submitBtnLoading: false,
hasTransactionInProgress: false,
+ isChangeOwnershipBtnDisabled: computed((): boolean => {
+ const isFrozenMhr = isFrozenMhrDueToAffidavit.value || isFrozenMhrDueToUnitNote.value
+
+ const isTransportPermitDisabled = isChangeLocationActive.value ||
+ isAmendLocationActive.value || isCancelChangeLocationActive.value
+
+ const isRoleBasedTransferDisabled = !isRoleStaffReg.value || localState.disableRoleBaseTransfer
+
+ return isFrozenMhr || isTransportPermitDisabled ||
+ ((hasLien.value && !localState.isLienRegistrationTypeSA) && isRoleBasedTransferDisabled)
+ }),
// Transport Permit
showCancelTransportPermitDialog: false,
@@ -869,6 +890,8 @@ export default defineComponent({
feeType: computed((): FeeSummaryTypes => {
if (isAmendLocationActive.value && isChangeLocationActive.value) {
return FeeSummaryTypes.MHR_AMEND_TRANSPORT_PERMIT
+ } else if (isCancelChangeLocationActive.value) {
+ return FeeSummaryTypes.MHR_TRANSPORT_PERMIT_CANCEL
} else {
return isChangeLocationActive.value ? FeeSummaryTypes.MHR_TRANSPORT_PERMIT : FeeSummaryTypes.MHR_TRANSFER
}
@@ -1399,8 +1422,8 @@ export default defineComponent({
localState.showTransferType = !localState.showTransferType
}
- const handleCancelTransportPermitChanges = () => {
- if (hasUnsavedChanges.value) {
+ const handleCancelTransportPermitChanges = (showConfirmationDialog = true) => {
+ if (hasUnsavedChanges.value && showConfirmationDialog) {
// show dialog
localState.showCancelTransportPermitDialog = true
} else {
@@ -1467,7 +1490,9 @@ export default defineComponent({
})
/** Inform root level components when there is an MHR action in Progress **/
- watch(() => [localState.showTransferType, isChangeLocationActive.value], (watchedConditions) => {
+ watch(() => [
+ localState.showTransferType, isChangeLocationActive.value, isCancelChangeLocationActive.value
+ ], (watchedConditions) => {
context.emit('actionInProgress', watchedConditions.includes(true))
}, { immediate: true })
@@ -1538,6 +1563,7 @@ export default defineComponent({
isValidTransportPermit,
isValidTransportPermitReview,
isRegisteredLocationChange,
+ isCancelChangeLocationActive,
isAmendLocationActive,
getMhrTransportPermit,
setMhrTransportPermit,
diff --git a/ppr-ui/src/views/mhrInformation/MhrTransportPermit.vue b/ppr-ui/src/views/mhrInformation/MhrTransportPermit.vue
index a64a3a21e..55b2305a9 100644
--- a/ppr-ui/src/views/mhrInformation/MhrTransportPermit.vue
+++ b/ppr-ui/src/views/mhrInformation/MhrTransportPermit.vue
@@ -24,7 +24,7 @@
>
{{ isChangeLocationActive ? 'Cancel Transport Permit Amendment' : 'Amend Transport Permit' }}
-
+
-
-
+
+
mdi-delete
@@ -79,6 +85,23 @@
+
+
+ mdi-undo
+ Undo Cancellation
+
+
- Note: A transport permit has already been issued for this home. The
- transport permit location can be only amended by the qualified supplier who issued the permit or by BC
- Registries staff.
+ Note: A transport permit has been issued for this home. The transport
+ permit location can be only amended or cancelled by the qualified supplier who issued the permit,
+ Service BC Staff, or BC Registries staff.
+
+ Cancelling the transport permit will restore the previous registered location for this home.
+
Transport permits are issued by changing the location on the manufactured home. Transport permits expire 30 days
@@ -158,106 +188,119 @@
mdi-open-in-new
+
-
-
-
-
- Help with Transport Permit
-
-
-
-
A manufactured home cannot be moved without a transport permit.
-
- Please note the following conditions and requirements under the Manufactured Home Act and the
- Manufactured Home Regulations:
-
-
-
-
- Unless stated below as an exception, a tax certificate is required confirming that all local taxes
- have been paid. A tax certificate can be obtained from the local municipality or rural tax authority
- having taxing authority over the manufactured home. Exceptions to obtaining a tax certificate
- include:
-
-
-
moving the manufactured home to a different pad within the same park, or
-
- moving the manufactured home from locations on a manufacturer or dealer’s lot.
-
-
-
- This permit expires 30 days after the date of issue. If the manufactured home is not moved before
- the transport permit expires, you must report the physical location of the manufactured home within
- 3 days of expiry of the permit.
-
-
- If the home is permanently moved to a different location than what is specified on the transport
- permit, you must report the physical location of the manufactured home within 3 days of the move.
-
-
- This transport permit is valid for one (1) move only. A new transport permit must be obtained for
- any subsequent move of the manufactured home.
-
-
- Upon leaving British Columbia, a manufactured home is exempt from the Manufactured Home Act. The
- home must be re-registered under the same number if it re-enters British Columbia. A manufactured
- home may not be moved out of British Columbia unless an exemption is issued by the Registrar.
+
+
+
+
+
+ Help with Transport Permit
+
+
+
+
A manufactured home cannot be moved without a transport permit.
+
+ Please note the following conditions and requirements under the Manufactured Home Act and the
+ Manufactured Home Regulations:
+
+
+
+
+ Unless stated below as an exception, a tax certificate is required confirming that all local taxes
+ have been paid. A tax certificate can be obtained from the local municipality or rural tax authority
+ having taxing authority over the manufactured home. Exceptions to obtaining a tax certificate
+ include:
+
+
+
moving the manufactured home to a different pad within the same park, or
+
+ moving the manufactured home from locations on a manufacturer or dealer’s lot.
-
-
-
- Note: A manufactured home may be subject to routing restrictions in accordance with the
- requirements of the Ministry of Transportation and Infrastructure. You are responsible for confirming
- any such restrictions and you may visit
-
- onRouteBC - Home (gov.bc.ca)
- mdi-open-in-new
-
- or contact the Provincial Permit Centre for details.
-
-
+
+
+ This permit expires 30 days after the date of issue. If the manufactured home is not moved before
+ the transport permit expires, you must report the physical location of the manufactured home within
+ 3 days of expiry of the permit.
+
+
+ If the home is permanently moved to a different location than what is specified on the transport
+ permit, you must report the physical location of the manufactured home within 3 days of the move.
+
+
+ This transport permit is valid for one (1) move only. A new transport permit must be obtained for
+ any subsequent move of the manufactured home.
+
+
+ Upon leaving British Columbia, a manufactured home is exempt from the Manufactured Home Act. The
+ home must be re-registered under the same number if it re-enters British Columbia. A manufactured
+ home may not be moved out of British Columbia unless an exemption is issued by the Registrar.
+
+
+
+
+ Note: A manufactured home may be subject to routing restrictions in accordance with the
+ requirements of the Ministry of Transportation and Infrastructure. You are responsible for confirming
+ any such restrictions and you may visit
+
+ onRouteBC - Home (gov.bc.ca)
+ mdi-open-in-new
+
+ or contact the Provincial Permit Centre for details.
+
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+ Verify Home Location Details
+
+
Verify the location details. If the restored details are incorrect, please contact BC Registries staff.