Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
2ccbfef
ecer-5359 LM considering users with different certificate types, fixe…
SoLetsDev Jul 16, 2026
09b6ec4
ecer-5359 adding additional situation where an active 5 year five yea…
SoLetsDev Jul 20, 2026
b28b98e
ecer-5359 fixing sonarcloud issues
SoLetsDev Jul 20, 2026
db64641
Merge branch 'fix/build-angle-sharp' into stories/ecer-5359
SoLetsDev Jul 20, 2026
be0c97c
fixing additional sonar cloud warnings
SoLetsDev Jul 20, 2026
290ca82
ecer-5359 fixing build issue with broken imports
SoLetsDev Jul 20, 2026
48a8e52
ecer-5359 quick fix for duplicated application requirements
SoLetsDev Jul 20, 2026
334a550
ecer-6573 enhancement to also remove post basic specialization choice…
SoLetsDev Jul 20, 2026
8cd3334
Merge pull request #2190 from bcgov/stories/ecer-5359
SoLetsDev Jul 21, 2026
643c99f
Merge branch 'release/labour-mobility' of github.com:bcgov/ECC-ECER i…
SoLetsDev Jul 21, 2026
1dc3ce4
ecer-5359 cleaning up logic. We don't have a situation where we hit t…
SoLetsDev Jul 23, 2026
bfce0f0
Merge pull request #2205 from bcgov/rework/ecer-5359
SoLetsDev Jul 23, 2026
2953e40
fixing guid validation so application does not throw validation error…
SoLetsDev Jul 27, 2026
953984d
Merge pull request #2207 from bcgov/fix/validation
SoLetsDev Jul 27, 2026
775296a
fixing validation, there was an edge case where frontend sends back u…
SoLetsDev Jul 28, 2026
6cb4bf8
Merge pull request #2210 from bcgov/fix2/validation
SoLetsDev Jul 28, 2026
5d0ac79
ecer-6590 content update for LM
SoLetsDev Jul 28, 2026
40e0e32
Merge pull request #2211 from bcgov/story/ecer-6590
SoLetsDev Jul 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using ECER.Clients.RegistryPortal.Server.Shared;
using ECER.Infrastructure.Common.Validators;
using ECER.Managers.Admin.Contract.Metadatas;
using ECER.Utilities.Hosting;
using Mediator;
Expand All @@ -16,7 +17,7 @@
var configuration = ctx.RequestServices.GetRequiredService<IConfiguration>();

var dynamicsConfig = await messageBus.Send(new DynamicsConfigQuery(), ct);
var appConfig = configuration.Get<ApplicationConfiguration>()!;

Check warning on line 20 in src/ECER.Clients.RegistryPortal/ECER.Clients.RegistryPortal.Server/ConfigurationEndpoints.cs

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this null-forgiving operator; nullable warnings are disabled here.

See more on https://sonarcloud.io/project/issues?id=bcgov_ECC-ECER&issues=AZ-qonJhAjHhlLEP6KBt&open=AZ-qonJhAjHhlLEP6KBt&pullRequest=2212

appConfig.ICRAFeatureEnabled = dynamicsConfig.config.ICRAFeatureEnabled;

Expand Down Expand Up @@ -54,6 +55,7 @@
var results = await messageBus.Send(new CertificationComparisonQuery() { ById = id, ByProvinceId = provinceId }, ct);
return TypedResults.Ok(configurationMapper.MapComparisonRecords(results.Items));
})
.AddGuidValidationQueryParams(["provinceId"], false)
.WithOpenApi("Handles certification comparison queries", string.Empty, "certificationComparison_get");

endpointRouteBuilder.MapGet("/api/postSecondaryInstitutionList/{id?}", async (string? id, string? name, string? provinceId, PostSecondaryInstitutionStatus? status, IMediator messageBus, IConfigurationMapper configurationMapper, CancellationToken ct) =>
Expand All @@ -62,6 +64,7 @@
var results = await messageBus.Send(new PostSecondaryInstitutionsQuery() { ById = id, ByName = name, ByProvinceId = provinceId, ByStatus = status }, ct);
return TypedResults.Ok(configurationMapper.MapPostSecondaryInstitutions(results.Items));
})
.AddGuidValidationQueryParams(["provinceId"], false)
.WithOpenApi("Handles psi queries", string.Empty, "psi_get");

endpointRouteBuilder.MapGet("/api/systemMessages", async (HttpContext ctx, IMediator messageBus, IConfigurationMapper configurationMapper, CancellationToken ct) =>
Expand All @@ -74,11 +77,12 @@

endpointRouteBuilder.MapGet("/api/identificationTypes", async ([AsParameters] IdentificationTypesQuery request, HttpContext ctx, IMediator messageBus, IConfigurationMapper configurationMapper, CancellationToken ct) =>
{
var query = new Managers.Admin.Contract.Metadatas.IdentificationTypesQuery() { ById = request.ById, ForPrimary = request.ForPrimary, ForSecondary = request.ForSecondary };
var query = new Managers.Admin.Contract.Metadatas.IdentificationTypesQuery() { ById = string.IsNullOrWhiteSpace(request.ById) ? null : request.ById, ForPrimary = request.ForPrimary, ForSecondary = request.ForSecondary };
var results = await messageBus.Send(query, ct);
return TypedResults.Ok(configurationMapper.MapIdentificationTypes(results.Items));
})
.WithOpenApi("Handles identification types queries", string.Empty, "identificationTypes_get")
.AddGuidValidationQueryParams(["ById"], false)
.CacheOutput(p => p.Expire(TimeSpan.FromMinutes(5)));

endpointRouteBuilder.MapGet("/api/captchaSiteKey", async (IOptions<CaptchaSettings> captchaSettings, CancellationToken ct) =>
Expand All @@ -103,9 +107,9 @@

public record OidcAuthenticationSettings
{
public string Authority { get; set; } = null!;

Check warning on line 110 in src/ECER.Clients.RegistryPortal/ECER.Clients.RegistryPortal.Server/ConfigurationEndpoints.cs

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this null-forgiving operator; nullable warnings are disabled here.

See more on https://sonarcloud.io/project/issues?id=bcgov_ECC-ECER&issues=AZ-qonJhAjHhlLEP6KBq&open=AZ-qonJhAjHhlLEP6KBq&pullRequest=2212
public string ClientId { get; set; } = null!;

Check warning on line 111 in src/ECER.Clients.RegistryPortal/ECER.Clients.RegistryPortal.Server/ConfigurationEndpoints.cs

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this null-forgiving operator; nullable warnings are disabled here.

See more on https://sonarcloud.io/project/issues?id=bcgov_ECC-ECER&issues=AZ-qonJhAjHhlLEP6KBr&open=AZ-qonJhAjHhlLEP6KBr&pullRequest=2212
public string Scope { get; set; } = null!;

Check warning on line 112 in src/ECER.Clients.RegistryPortal/ECER.Clients.RegistryPortal.Server/ConfigurationEndpoints.cs

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this null-forgiving operator; nullable warnings are disabled here.

See more on https://sonarcloud.io/project/issues?id=bcgov_ECC-ECER&issues=AZ-qonJhAjHhlLEP6KBs&open=AZ-qonJhAjHhlLEP6KBs&pullRequest=2212
public string? Idp { get; set; }
}
public record IdentificationType(string Id, string Name, bool ForPrimary, bool ForSecondary);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { setup } from "@storybook/vue3-vite"; // ✅ Use the setup function from
import { createVuetify } from "vuetify";
import "vuetify/styles"; // Import Vuetify base styles
import "@mdi/font/css/materialdesignicons.css"; // Optional: MDI icons
import { sb } from "storybook/test";

import * as components from "vuetify/components";
import * as directives from "vuetify/directives";
Expand All @@ -16,6 +17,8 @@ import { createPinia } from "pinia";

import "../src/styles/main.scss";

sb.mock(import("../src/api/configuration.ts"), { spy: true }); // Used to mock api calls

// ✅ Global setup: Register Vuetify and Pinia
setup((app) => {
const vuetify = createVuetify({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,21 @@
/>
<ECEFiveYearLaborMobilityRequirements
v-if="applicationStore.isDraftCertificateTypeFiveYears"
ref="ECEFiveYearLaborMobilityRequirements"
:is-post-basic="isPostBasic"
/>

<ECESneAndIteLabourMobilityRequirements
v-else-if="
applicationStore.isDraftCertificateTypeSne &&
applicationStore.isDraftCertificateTypeIte
"
/>
<ECESneLabourMobilityRequirements
v-else-if="applicationStore.isDraftCertificateTypeSne"
/>
<ECEIteLabourMobilityRequirements
v-else-if="applicationStore.isDraftCertificateTypeIte"
/>
</template>

<!-- Registrant -->
Expand Down Expand Up @@ -104,6 +116,9 @@ import ECEOneYearRenewalRequirements from "@/components/ECEOneYearRenewalRequire
import ECEAssistantLaborMobilityRequirements from "./ECEAssistantLaborMobilityRequirements.vue";
import ECEOneYearLaborMobilityRequirements from "./ECEOneYearLaborMobilityRequirements.vue";
import ECEFiveYearLaborMobilityRequirements from "./ECEFiveYearLaborMobilityRequirements.vue";
import ECESneLabourMobilityRequirements from "./ECESneLabourMobilityRequirements.vue";
import ECEIteLabourMobilityRequirements from "./ECEIteLabourMobilityRequirements.vue";
import ECESneAndIteLabourMobilityRequirements from "./ECESneAndIteLabourMobilityRequirements.vue";
import ECEOneYearRequirements from "@/components/ECEOneYearRequirements.vue";
import { useApplicationStore } from "@/store/application";
import { useCertificationStore } from "@/store/certification";
Expand All @@ -125,6 +140,9 @@ export default defineComponent({
ECEAssistantLaborMobilityRequirements,
ECEOneYearLaborMobilityRequirements,
ECEFiveYearLaborMobilityRequirements,
ECESneLabourMobilityRequirements,
ECEIteLabourMobilityRequirements,
ECESneAndIteLabourMobilityRequirements,
ECEAssistantRenewalRequirements,
ECEOneYearRenewalRequirements,
ECEFiveYearRenewalRequirements,
Expand Down Expand Up @@ -200,21 +218,6 @@ export default defineComponent({
this.router.push({ name: "declaration" });
}
} else if (this.applicationStore.isDraftApplicationLaborMobility) {
// handle case where user chooses 5 year specializations
if (
this.applicationStore.isDraftCertificateTypeFiveYears &&
this.applicationStore.isDraftCertificateTypeIte &&
this.applicationStore.isDraftCertificateTypeSne
) {
this.applicationStore.$patch({
draftApplication: {
certificationTypes: [
"FiveYears",
...this.specializationSelection,
],
},
});
}
this.router.push({ name: "declaration" });
} else if (this.applicationStore.isDraftApplicationRenewal) {
//for renewal applications we do not need to perform any additional checks. The certification types should be correctly set in the draft application store.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -554,6 +554,16 @@ export default defineComponent({
},
];

case "application-transfer":
return [
...this.baseItems,
{
title: "Check your transfer eligibility",
disabled: true,
href: "/application/transfer",
},
];

case "icra-eligibility":
return [
...this.baseItems,
Expand Down Expand Up @@ -690,7 +700,6 @@ export default defineComponent({
isApplicationRoute(routeName: string): boolean {
return [
"application-certification",
"application-transfer",
"application-requirements",
"consent-required",
"declaration",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
<template>
<v-row>
<v-col cols>
<h1 class="title-header">Transfer to ECE Five Year certification</h1>
<h1 class="title-header">
Transfer to ECE Five Year certification
{{ isPostBasic ? "with ITE and SNE certification" : "" }}
</h1>
</v-col>
</v-row>
<v-row>
<v-col>
<p>
You need the following information to apply to transfer your
certification to B.C.
certification to British Columbia.
</p>
</v-col>
</v-row>
Expand Down Expand Up @@ -97,26 +100,16 @@
</p>
</v-col>
</v-row>
<v-row v-if="isPostBasic">
<v-col cols="12">
<SpecializedCertificationOptions
ref="SpecializedCertificationOptions"
:pre-selected="['Ite', 'Sne']"
:is-labor-mobility="true"
/>
</v-col>
</v-row>
</template>

<script lang="ts">
import { defineComponent } from "vue";

import ECEHeader from "@/components/ECEHeader.vue";
import SpecializedCertificationOptions from "@/components/SpecializedCertificationOptions.vue";

export default defineComponent({
name: "ECEFiveYearLaborMobilityRequirements",
components: { ECEHeader, SpecializedCertificationOptions },
components: { ECEHeader },
props: {
isPostBasic: {
type: Boolean,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<template>
<v-row>
<v-col>
<h1>Transfer to Infant and Toddler Educator certification</h1>
<p class="mt-6">
This certification allows you to to work alone and/or as the primary
educator in licensed child care programs for children birth to 5 years
of age. It will also renew your ECE Five Year certificate. It is valid
for 5 years.
</p>
<p class="mt-6">
You need the following information to apply to transfer your
certification to British Columbia.
</p>
</v-col>
</v-row>
<v-row>
<v-col>
<ECEHeader title="Certificate information"></ECEHeader>
<div class="d-flex flex-column ga-3 mt-6">
<p>You will need to provide:</p>
<ul class="ml-10">
<li>
Your certification or registration number (if applicable to your
province)
</li>
<li>The name on your certificate</li>
</ul>
</div>
</v-col>
</v-row>
<v-row>
<v-col>
<ECEHeader title="Character reference" />
<p>
You will need to provide a character reference. You will enter their
name and email. We will contact them later after you submit your
application.
</p>
<br />
<p>Make sure you choose a person that:</p>
<br />
<ul class="ml-10">
<li>Can speak to your character</li>
<li>
Can speak to your ability to educate and care for young children
</li>
<li>Has known you for at least 6 months</li>
<li>Is not your relative, partner, spouse or yourself</li>
</ul>
<br />
<p>
We recommend the person is a certified ECE who has directly observed you
working with young children.
</p>
</v-col>
</v-row>
</template>

<script lang="ts">
import { defineComponent } from "vue";

import ECEHeader from "@/components/ECEHeader.vue";

export default defineComponent({
name: "ECEIteLabourMobilityRequirements",
components: { ECEHeader },
});
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
<template>
<v-row>
<v-col>
<h1>
Transfer to Special Needs Educator and Infant and Toddler Educator
certification
</h1>
<p class="mt-6">
This certification adds specializations to your ECE Five Year
certificate that allow you to work in licensed child care programs:
</p>
<ul class="ml-10">
<li>
alone and/or as the primary educator in inclusive settings with
children 3-5 years of age (SNE)
</li>
<li>
alone and/or as the primary educator with children birth to 5 years
(ITE)
</li>
</ul>
<p class="mt-6">
You need the following information to apply to transfer your
certification to British Columbia.
</p>
</v-col>
</v-row>
<v-row>
<v-col>
<ECEHeader title="Certificate information"></ECEHeader>
<div class="d-flex flex-column ga-3 mt-6">
<p>You will need to provide:</p>
<ul class="ml-10">
<li>
Your certification or registration number (if applicable to your
province)
</li>
<li>The name on your certificate</li>
</ul>
</div>
</v-col>
</v-row>

<v-row>
<v-col>
<ECEHeader title="Character reference" />
<p>
You will need to provide a character reference. You will enter their
name and email. We will contact them later after you submit your
application.
</p>
<br />
<p>Make sure you choose a person that:</p>
<br />
<ul class="ml-10">
<li>Can speak to your character</li>
<li>
Can speak to your ability to educate and care for young children
</li>
<li>Has known you for at least 6 months</li>
<li>Is not your relative, partner, spouse or yourself</li>
</ul>
<br />
<p>
We recommend the person is a certified ECE who has directly observed you
working with young children.
</p>
</v-col>
</v-row>
</template>

<script lang="ts">
import { defineComponent } from "vue";

import ECEHeader from "@/components/ECEHeader.vue";
import SpecializedCertificationOptions from "@/components/SpecializedCertificationOptions.vue";
export default defineComponent({
name: "ECESneAndIteLabourMobilityRequirements",
components: { ECEHeader, SpecializedCertificationOptions },
});
</script>
Loading
Loading