Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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-lT1CdaiuYSm368-Ay&open=AZ-lT1CdaiuYSm368-Ay&pullRequest=2206

appConfig.ICRAFeatureEnabled = dynamicsConfig.config.ICRAFeatureEnabled;

Expand Down Expand Up @@ -50,18 +51,20 @@

endpointRouteBuilder.MapGet("/api/certificationComparison/{id?}", async (string? id, string? provinceId, HttpContext ctx, IMediator messageBus, IConfigurationMapper configurationMapper, CancellationToken ct) =>
{
bool IdIsNotGuid = !Guid.TryParse(id, out _); if (IdIsNotGuid && id != null) { id = null; }
var results = await messageBus.Send(new CertificationComparisonQuery() { ById = id, ByProvinceId = provinceId }, ct);
return TypedResults.Ok(configurationMapper.MapComparisonRecords(results.Items));
})
.AddGuidValidationQueryParams(["provinceId"], false)
.AddGuidValidation("id", 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) =>
{
bool IdIsNotGuid = !Guid.TryParse(id, out _); if (IdIsNotGuid && id != null) { id = null; }
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)
.AddGuidValidation("id", 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-lT1CdaiuYSm368-Av&open=AZ-lT1CdaiuYSm368-Av&pullRequest=2206
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-lT1CdaiuYSm368-Aw&open=AZ-lT1CdaiuYSm368-Aw&pullRequest=2206
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-lT1CdaiuYSm368-Ax&open=AZ-lT1CdaiuYSm368-Ax&pullRequest=2206
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 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 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