From 159951f1cd590355f0546972154796a5255fbdaf Mon Sep 17 00:00:00 2001
From: Laura Ketola
Date: Tue, 27 Aug 2024 13:42:39 +0300
Subject: [PATCH 1/2] VKT(Backend): Combine enrollment confirmation templates
[deploy]
---
.../fi/oph/vkt/service/PaymentService.java | 12 ++-
.../service/PublicEnrollmentEmailService.java | 84 +++++++++++++++---
.../vkt/service/PublicEnrollmentService.java | 18 ++--
.../fi/oph/vkt/util/TemplateRenderer.java | 26 ------
.../enrollment-confirmation.html | 68 +++++++++++++--
.../enrollment-free-koski-confirmation.html | 79 -----------------
.../enrollment-free-user-confirmation.html | 85 -------------------
.../enrollment-to-queue-confirmation.html | 70 ---------------
...ment-to-queue-free-koski-confirmation.html | 74 ----------------
...lment-to-queue-free-user-confirmation.html | 77 -----------------
.../PublicEnrollmentEmailServiceTest.java | 64 ++++++--------
.../fi/oph/vkt/util/TemplateRendererTest.java | 26 +++++-
12 files changed, 205 insertions(+), 478 deletions(-)
delete mode 100644 backend/vkt/src/main/resources/email-templates/enrollment-free-koski-confirmation.html
delete mode 100644 backend/vkt/src/main/resources/email-templates/enrollment-free-user-confirmation.html
delete mode 100644 backend/vkt/src/main/resources/email-templates/enrollment-to-queue-confirmation.html
delete mode 100644 backend/vkt/src/main/resources/email-templates/enrollment-to-queue-free-koski-confirmation.html
delete mode 100644 backend/vkt/src/main/resources/email-templates/enrollment-to-queue-free-user-confirmation.html
diff --git a/backend/vkt/src/main/java/fi/oph/vkt/service/PaymentService.java b/backend/vkt/src/main/java/fi/oph/vkt/service/PaymentService.java
index cd7b03ced..1e36f3c6e 100644
--- a/backend/vkt/src/main/java/fi/oph/vkt/service/PaymentService.java
+++ b/backend/vkt/src/main/java/fi/oph/vkt/service/PaymentService.java
@@ -132,13 +132,23 @@ public Payment finalizePayment(final Long paymentId, final Map p
}
final Enrollment enrollment = payment.getEnrollment();
+ FreeEnrollmentDetails freeEnrollmentDetails = enrollmentRepository.countEnrollmentsByPerson(enrollment.getPerson());
+
setEnrollmentStatus(enrollment, newStatus);
payment.setPaymentStatus(newStatus);
paymentRepository.saveAndFlush(payment);
if (newStatus == PaymentStatus.OK) {
- publicEnrollmentEmailService.sendEnrollmentConfirmationEmail(enrollment);
+ if (enrollment.getFreeEnrollment() != null) {
+ publicEnrollmentEmailService.sendPartiallyFreeEnrollmentConfirmationEmail(
+ enrollment,
+ enrollment.getPerson(),
+ freeEnrollmentDetails
+ );
+ } else {
+ publicEnrollmentEmailService.sendEnrollmentConfirmationEmail(enrollment);
+ }
}
return payment;
diff --git a/backend/vkt/src/main/java/fi/oph/vkt/service/PublicEnrollmentEmailService.java b/backend/vkt/src/main/java/fi/oph/vkt/service/PublicEnrollmentEmailService.java
index 0653d7316..76c436a94 100644
--- a/backend/vkt/src/main/java/fi/oph/vkt/service/PublicEnrollmentEmailService.java
+++ b/backend/vkt/src/main/java/fi/oph/vkt/service/PublicEnrollmentEmailService.java
@@ -9,6 +9,7 @@
import fi.oph.vkt.model.ExamEvent;
import fi.oph.vkt.model.Person;
import fi.oph.vkt.model.type.ExamLanguage;
+import fi.oph.vkt.model.type.FreeEnrollmentSource;
import fi.oph.vkt.service.email.EmailAttachmentData;
import fi.oph.vkt.service.email.EmailData;
import fi.oph.vkt.service.email.EmailService;
@@ -43,6 +44,7 @@ public class PublicEnrollmentEmailService {
public void sendEnrollmentConfirmationEmail(final Enrollment enrollment) throws IOException, InterruptedException {
final Person person = enrollment.getPerson();
final Map templateParams = getEmailParams(enrollment);
+ templateParams.put("type", "enrollment");
final String recipientName = person.getFirstName() + " " + person.getLastName();
final String recipientAddress = enrollment.getEmail();
@@ -66,6 +68,7 @@ public void sendEnrollmentConfirmationEmail(final Enrollment enrollment) throws
@Transactional
public void sendEnrollmentToQueueConfirmationEmail(final Enrollment enrollment, final Person person) {
final Map templateParams = getEmailParams(enrollment);
+ templateParams.put("type", "queue");
final String recipientName = person.getFirstName() + " " + person.getLastName();
final String recipientAddress = enrollment.getEmail();
@@ -74,7 +77,8 @@ public void sendEnrollmentToQueueConfirmationEmail(final Enrollment enrollment,
LocalisationUtil.translate(localeFI, "subject.enrollment-to-queue-confirmation"),
LocalisationUtil.translate(localeSV, "subject.enrollment-to-queue-confirmation")
);
- final String body = templateRenderer.renderEnrollmentToQueueConfirmationEmailBody(templateParams);
+
+ final String body = templateRenderer.renderEnrollmentConfirmationEmailBody(templateParams);
createEmail(recipientName, recipientAddress, subject, body, List.of(), EmailType.ENROLLMENT_TO_QUEUE_CONFIRMATION);
}
@@ -103,6 +107,9 @@ private Map getEmailParams(final Enrollment enrollment) {
params.put("partialExamsFI", getEmailParamPartialExams(enrollment, localeFI));
params.put("partialExamsSV", getEmailParamPartialExams(enrollment, localeSV));
+ params.put("type", "enrollment");
+ params.put("isFree", false);
+
return params;
}
@@ -177,7 +184,7 @@ public void sendFreeEnrollmentConfirmationEmail(
final FreeEnrollmentDetails freeEnrollmentDetails
) {
final Map templateParams = getEmailParams(enrollment);
- getFreeEmailParams(templateParams, freeEnrollmentDetails);
+ getFreeEmailParams(templateParams, freeEnrollmentDetails, enrollment.getFreeEnrollment().getSource(), "enrollment");
final String recipientName = person.getFirstName() + " " + person.getLastName();
final String recipientAddress = enrollment.getEmail();
@@ -186,10 +193,7 @@ public void sendFreeEnrollmentConfirmationEmail(
LocalisationUtil.translate(localeFI, "subject.enrollment-confirmation"),
LocalisationUtil.translate(localeSV, "subject.enrollment-confirmation")
);
- final String body = templateRenderer.renderFreeEnrollmentConfirmationEmailBody(
- templateParams,
- enrollment.getFreeEnrollment().getSource()
- );
+ final String body = templateRenderer.renderEnrollmentConfirmationEmailBody(templateParams);
createEmail(recipientName, recipientAddress, subject, body, List.of(), EmailType.ENROLLMENT_CONFIRMATION);
}
@@ -201,7 +205,7 @@ public void sendFreeEnrollmentToQueueConfirmationEmail(
final FreeEnrollmentDetails freeEnrollmentDetails
) {
final Map templateParams = getEmailParams(enrollment);
- getFreeEmailParams(templateParams, freeEnrollmentDetails);
+ getFreeEmailParams(templateParams, freeEnrollmentDetails, enrollment.getFreeEnrollment().getSource(), "queue");
final String recipientName = person.getFirstName() + " " + person.getLastName();
final String recipientAddress = enrollment.getEmail();
@@ -210,15 +214,73 @@ public void sendFreeEnrollmentToQueueConfirmationEmail(
LocalisationUtil.translate(localeFI, "subject.enrollment-to-queue-confirmation"),
LocalisationUtil.translate(localeSV, "subject.enrollment-to-queue-confirmation")
);
- final String body = templateRenderer.renderFreeEnrollmentToQueueConfirmationEmailBody(
- templateParams,
- enrollment.getFreeEnrollment().getSource()
+ final String body = templateRenderer.renderEnrollmentConfirmationEmailBody(templateParams);
+
+ createEmail(recipientName, recipientAddress, subject, body, List.of(), EmailType.ENROLLMENT_TO_QUEUE_CONFIRMATION);
+ }
+
+ @Transactional
+ public void sendPartiallyFreeEnrollmentConfirmationEmail(
+ final Enrollment enrollment,
+ final Person person,
+ final FreeEnrollmentDetails freeEnrollmentDetails
+ ) throws IOException, InterruptedException {
+ final Map templateParams = getEmailParams(enrollment);
+ getFreeEmailParams(templateParams, freeEnrollmentDetails, enrollment.getFreeEnrollment().getSource(), "queue");
+ templateParams.put("isFree", "false");
+ templateParams.put("type", "enrollment");
+
+ final String recipientName = person.getFirstName() + " " + person.getLastName();
+ final String recipientAddress = enrollment.getEmail();
+ final String subject = String.format(
+ "%s | %s",
+ LocalisationUtil.translate(localeFI, "subject.enrollment-to-queue-confirmation"),
+ LocalisationUtil.translate(localeSV, "subject.enrollment-to-queue-confirmation")
+ );
+ final String body = templateRenderer.renderEnrollmentConfirmationEmailBody(templateParams);
+
+ final List attachments = environment.getRequiredProperty(
+ "app.email.sending-enabled",
+ Boolean.class
+ )
+ ? List.of(createReceiptAttachment(enrollment, localeFI), createReceiptAttachment(enrollment, localeSV))
+ : List.of(); // for local development
+
+ createEmail(recipientName, recipientAddress, subject, body, attachments, EmailType.ENROLLMENT_CONFIRMATION);
+ }
+
+ @Transactional
+ public void sendPartiallyFreeEnrollmentToQueueConfirmationEmail(
+ final Enrollment enrollment,
+ final Person person,
+ final FreeEnrollmentDetails freeEnrollmentDetails
+ ) {
+ final Map templateParams = getEmailParams(enrollment);
+ getFreeEmailParams(templateParams, freeEnrollmentDetails, enrollment.getFreeEnrollment().getSource(), "queue");
+ templateParams.put("isFree", "false");
+ templateParams.put("type", "queue");
+
+ final String recipientName = person.getFirstName() + " " + person.getLastName();
+ final String recipientAddress = enrollment.getEmail();
+ final String subject = String.format(
+ "%s | %s",
+ LocalisationUtil.translate(localeFI, "subject.enrollment-to-queue-confirmation"),
+ LocalisationUtil.translate(localeSV, "subject.enrollment-to-queue-confirmation")
);
+ final String body = templateRenderer.renderEnrollmentConfirmationEmailBody(templateParams);
createEmail(recipientName, recipientAddress, subject, body, List.of(), EmailType.ENROLLMENT_TO_QUEUE_CONFIRMATION);
}
- public void getFreeEmailParams(Map params, FreeEnrollmentDetails details) {
+ public void getFreeEmailParams(
+ Map params,
+ FreeEnrollmentDetails details,
+ FreeEnrollmentSource source,
+ String type
+ ) {
+ params.put("isFree", true);
+ params.put("type", type);
+ params.put("source", source.name());
params.put(
"freeExamsLeftFI",
String.format(
diff --git a/backend/vkt/src/main/java/fi/oph/vkt/service/PublicEnrollmentService.java b/backend/vkt/src/main/java/fi/oph/vkt/service/PublicEnrollmentService.java
index 2b555b2bf..1ad23030f 100644
--- a/backend/vkt/src/main/java/fi/oph/vkt/service/PublicEnrollmentService.java
+++ b/backend/vkt/src/main/java/fi/oph/vkt/service/PublicEnrollmentService.java
@@ -492,11 +492,19 @@ public PublicEnrollmentDTO createEnrollmentToQueue(
);
if (freeEnrollmentDetails != null && freeEnrollment != null) {
- publicEnrollmentEmailService.sendFreeEnrollmentToQueueConfirmationEmail(
- enrollment,
- person,
- freeEnrollmentDetails
- );
+ if (freeEnrollmentDetails.textualSkillCount() == 0 || freeEnrollmentDetails.oralSkillCount() == 0) {
+ publicEnrollmentEmailService.sendPartiallyFreeEnrollmentToQueueConfirmationEmail(
+ enrollment,
+ person,
+ freeEnrollmentDetails
+ );
+ } else {
+ publicEnrollmentEmailService.sendFreeEnrollmentToQueueConfirmationEmail(
+ enrollment,
+ person,
+ freeEnrollmentDetails
+ );
+ }
} else {
publicEnrollmentEmailService.sendEnrollmentToQueueConfirmationEmail(enrollment, person);
}
diff --git a/backend/vkt/src/main/java/fi/oph/vkt/util/TemplateRenderer.java b/backend/vkt/src/main/java/fi/oph/vkt/util/TemplateRenderer.java
index ccdecf804..853dbb34d 100644
--- a/backend/vkt/src/main/java/fi/oph/vkt/util/TemplateRenderer.java
+++ b/backend/vkt/src/main/java/fi/oph/vkt/util/TemplateRenderer.java
@@ -15,36 +15,10 @@ public class TemplateRenderer {
private final TemplateEngine templateEngine;
- public String renderFreeEnrollmentConfirmationEmailBody(
- final Map params,
- FreeEnrollmentSource source
- ) {
- if (source.equals(FreeEnrollmentSource.KOSKI)) {
- return renderTemplate("enrollment-free-koski-confirmation", params, Optional.empty());
- } else {
- return renderTemplate("enrollment-free-user-confirmation", params, Optional.empty());
- }
- }
-
public String renderEnrollmentConfirmationEmailBody(final Map params) {
return renderTemplate("enrollment-confirmation", params, Optional.empty());
}
- public String renderEnrollmentToQueueConfirmationEmailBody(final Map params) {
- return renderTemplate("enrollment-to-queue-confirmation", params, Optional.empty());
- }
-
- public String renderFreeEnrollmentToQueueConfirmationEmailBody(
- final Map params,
- FreeEnrollmentSource source
- ) {
- if (source.equals(FreeEnrollmentSource.KOSKI)) {
- return renderTemplate("enrollment-to-queue-free-koski-confirmation", params, Optional.empty());
- } else {
- return renderTemplate("enrollment-to-queue-free-user-confirmation", params, Optional.empty());
- }
- }
-
public String renderReceipt(final Locale locale, final Map params) {
return renderTemplate("receipt", params, Optional.of(locale));
}
diff --git a/backend/vkt/src/main/resources/email-templates/enrollment-confirmation.html b/backend/vkt/src/main/resources/email-templates/enrollment-confirmation.html
index 98f2285f6..85324b38c 100644
--- a/backend/vkt/src/main/resources/email-templates/enrollment-confirmation.html
+++ b/backend/vkt/src/main/resources/email-templates/enrollment-confirmation.html
@@ -1,21 +1,46 @@
-
+
Hei,
-
- Olet ilmoittautunut Valtionhallinnon kielitutkintoon. Ohessa tiedot ilmoittautumisestasi. Liitteenä myös maksukuitti suomeksi ja ruotsiksi.
-
+
+ Olet ilmoittautunut Valtionhallinnon kielitutkintoon. Ohessa tiedot ilmoittautumisestasi. Liitteenä myös maksukuitti suomeksi ja ruotsiksi.
+
+
+ Olet ilmoittautunut jonotuspaikalle Valtionhallinnon kielitutkintoon. Olemme sinuun yhteydessä, mikäli tutkintotilaisuuteen vapautuu paikkoja. Ohessa tiedot ilmoittautumisestasi.
+
+
+ Olet ilmoittautunut Valtionhallinnon kielitutkintoon. Tietojemme mukaan olet oikeutettu maksuttomaan tutkintoon. Ohessa tiedot ilmoittautumisestasi.
+
+
+ Olet ilmoittautunut Valtionhallinnon kielitutkintoon. Olet ilmoittanut ilmoittautumislomakkeella, että olet oikeutettu maksuttomaan tutkintoon ja lisännyt todistusasiakirjoja.
+ Virkailija tarkastaa, täyttävätkö asiakirjat maksuttomuuden ehdot. Asiakirjat tarkastetaan mahdollisimman pian.
+ Jos ehdot täyttyvät, tutkinto on maksuton ja saat sähköpostilla vahvistuksen ilmoittautumisesta.
+ Jos ehdot eivät täyty, tutkinto on maksullinen ja saat sähköpostilla maksulinkin tutkintomaksun maksamista varten.
+ Ohessa tiedot ilmoittautumisestasi.
+
+
+ Olet ilmoittautunut jonotuspaikalle Valtionhallinnon kielitutkintoon. Olemme sinuun yhteydessä, mikäli tutkintotilaisuuteen vapautuu paikkoja.
+ Tietojemme mukaan olet oikeutettu maksuttomaan tutkintoon. Jos saat paikan tutkintoon, sinun ei tarvitse maksaa tutkintomaksua. Ohessa tiedot ilmoittautumisestasi.
+
+
+ Olet ilmoittautunut jonotuspaikalle Valtionhallinnon kielitutkintoon. Olemme sinuun yhteydessä, mikäli tutkintotilaisuuteen vapautuu paikkoja.
+ Olet ilmoittanut ilmoittautumislomakkeella, että olet oikeutettu maksuttomaan tutkintoon ja lisännyt todistusasiakirjoja. Jos saat paikan tutkintoon, virkailija tarkastaa, täyttävätkö asiakirjat maksuttomuuden ehdot.
+ Jos ehdot täyttyvät, tutkinto on maksuton ja saat sähköpostilla vahvistuksen ilmoittautumisesta.
+ Jos ehdot eivät täyty, tutkinto on maksullinen ja saat sähköpostilla maksulinkin tutkintomaksun maksamista varten.
+ Ohessa tiedot ilmoittautumisestasi.
+
Tutkinnon kieli:
Tutkinnon taso:
Tutkintopäivä:
- Oikeutettu maksuttomaan tutkintoon: Ei
+ Oikeutettu maksuttomaan tutkintoon: Ei
Valitsemasi taidot:
Valitsemasi osakokeet:
+ Maksuttomia tutkintokertoja jäljellä:
@@ -41,18 +66,43 @@
Hej,
-
- Du har anmält dig till Språkexamen för statsförvaltningen (VKT). Uppgifter om din anmälan hittar du nedan. Bifogat finns även kvittot för din examensavgift på finska och på svenska.
-
+
+ Du har anmält dig till Språkexamen för statsförvaltningen (VKT). Uppgifter om din anmälan hittar du nedan. Bifogat finns även kvittot för din examensavgift på finska och på svenska.
+
+
+ Du har en plats i kön för Språkexamen för statsförvaltningen (VKT). Vi kommer att kontakta dig om platser blir lediga. Uppgifter om din anmälan hittar du nedan.
+
+
+ Du har anmält dig till Språkexamen för statsförvaltningen (VKT). Enligt våra uppgifter har du rätt till avgiftsfri examen. Uppgifter om din anmälan hittar du nedan.
+
+
+ Du har anmält dig till Språkexamen för statsförvaltningen (VKT).
+ Du har uppgett på anmälningsblanketten att du har rätt till avgiftsfri examen och bifogat intyg. Dina intyg granskas vid Utbildningsstyrelsen så fort som möjligt.
+ Om du har rätt till avgiftsfri examen får du en bekräftelse på din anmälan per e-post.
+ Om du inte har rätt till avgiftsfri examen, får du en länk för att betala examensavgiften.
+ Uppgifter om din anmälan hittar du nedan.
+
+
+ Du har en plats i kön för Språkexamen för statsförvaltningen (VKT). Vi kommer att kontakta dig om platser blir lediga.
+ Enligt våra uppgifter har du rätt till avgiftsfri examen. Ifall du får plats vid examenstillfället behöver du inte betala examensavgift. Uppgifter om din anmälan hittar du nedan.
+
+
+ Du har en plats i kön för Språkexamen för statsförvaltningen (VKT). Vi kontaktar dig om platser blir lediga.
+ Du har uppgett på anmälningsblanketten att du har rätt till avgiftsfri examen och bifogat intyg. Om du får en plats vid examenstillfället granskas dina intyg vid Utbildningsstyrelsen.
+ Ifall du har rätt till avgiftsfri examen får du en bekräftelse på din anmälan per e-post.
+ Om du inte har rätt till avgiftsfri examen, får du en länk för att betala examensavgiften.
+ Uppgifter om din anmälan hittar du nedan.
+
Examensspråk:
Examensnivå:
Examensdatum:
- Rätt till avgiftsfri examen: Nej
+ Rätt till avgiftsfri examen: Nej
Förmågor som du har valt:
Delprov som du har valt:
+ Antal avgiftsfria examina kvar:
Information om examenstillfället
diff --git a/backend/vkt/src/main/resources/email-templates/enrollment-free-koski-confirmation.html b/backend/vkt/src/main/resources/email-templates/enrollment-free-koski-confirmation.html
deleted file mode 100644
index c127c1d9a..000000000
--- a/backend/vkt/src/main/resources/email-templates/enrollment-free-koski-confirmation.html
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
-
- Hei,
-
-
- Olet ilmoittautunut Valtionhallinnon kielitutkintoon. Tietojemme mukaan olet oikeutettu maksuttomaan tutkintoon. Ohessa tiedot ilmoittautumisestasi.
-
-
-
-
- Tutkinnon kieli:
- Tutkinnon taso:
- Tutkintopäivä:
- Oikeutettu maksuttomaan tutkintoon: Kyllä
- Valitsemasi taidot:
- Valitsemasi osakokeet:
- Maksuttomia tutkintokertoja jäljellä:
-
-
-
- Tietoa tutkintotilaisuudesta
-
- Tutkintotilaisuus järjestetään Opetushallituksen tiloissa osoitteessa Hakaniemenranta 6, 00530 Helsinki.
- Tutkinnon suorittamiseen kannattaa varata koko päivä. Tutkintotilaisuus alkaa klo 9.00 kirjallisen taidon tutkinnolla ja jatkuu iltapäivällä suullisen taidon tutkinnolla. Tutkinnon päättymisaika riippuu tutkintoon osallistuvien määrästä. Saat tarkemmat ohjeet tutkintopäivän kulusta viikkoa ennen tutkintopäivää.
- Jos sinulla on kysyttävää tutkinnosta, voit lähettää meille sähköpostia osoitteeseen kielitutkinnot@oph.fi. Ilmoitathan viipymättä, jos et pysty osallistumaan tutkintoon.
-
- Lisätietoa tutkinnosta löydät Opetushallituksen verkkopalvelusta:
- Valtionhallinnon kielitutkinnot (VKT)
-
-
-
-
- Älä vastaa tähän viestiin - viesti on lähetetty automaattisesti.
-
-
- Ystävällisin terveisin
- Opetushallitus
-
-
-
- Hej,
-
-
- Du har anmält dig till Språkexamen för statsförvaltningen (VKT). Enligt våra uppgifter har du rätt till avgiftsfri examen. Uppgifter om din anmälan hittar du nedan.
-
-
-
-
- Examensspråk:
- Examensnivå:
- Examensdatum:
- Rätt till avgiftsfri examen: Ja
- Förmågor som du har valt:
- Delprov som du har valt:
- Antal avgiftsfria examina kvar:
-
-
- Information om examenstillfället
-
- Examenstillfället ordnas vid Utbildningsstyrelsen på adressen Hagnäskajen 6, 00530 Helsingfors.
- Du bör reservera hela dagen för examen. Examenstillfället börjar klockan 9.00 med delprovet i skriftlig färdighet och fortsätter på eftermiddagen med delprovet i muntlig färdighet. Deltagarantalet avgör när examenstillfället slutar. Du får närmare anvisningar om examensdagens program en vecka före examensdagen.
- Om du har frågor om examen, kan du kontakta oss per e-post på adressen kielitutkinnot@oph.fi. Vänligen meddela omedelbart om du inte kan delta i examen.
-
- Närmare information om examen finns på Utbildningsstyrelsens webbplats:
- Språkexamina för statsförvaltningen (VKT)
-
-
-
-
- Svara inte på detta meddelande, det har skickats automatiskt.
-
-
- Med vänlig hälsning
- Utbildningsstyrelsen
-
-
-
diff --git a/backend/vkt/src/main/resources/email-templates/enrollment-free-user-confirmation.html b/backend/vkt/src/main/resources/email-templates/enrollment-free-user-confirmation.html
deleted file mode 100644
index 4b83b417e..000000000
--- a/backend/vkt/src/main/resources/email-templates/enrollment-free-user-confirmation.html
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
-
- Hei,
-
-
- Olet ilmoittautunut Valtionhallinnon kielitutkintoon. Olet ilmoittanut ilmoittautumislomakkeella, että olet oikeutettu maksuttomaan tutkintoon ja lisännyt todistusasiakirjoja.
-
- Virkailija tarkastaa, täyttävätkö asiakirjat maksuttomuuden ehdot. Asiakirjat tarkastetaan mahdollisimman pian.
- Jos ehdot täyttyvät, tutkinto on maksuton ja saat sähköpostilla vahvistuksen ilmoittautumisesta.
- Jos ehdot eivät täyty, tutkinto on maksullinen ja saat sähköpostilla maksulinkin tutkintomaksun maksamista varten.
- Ohessa tiedot ilmoittautumisestasi.
-
-
-
-
- Tutkinnon kieli:
- Tutkinnon taso:
- Tutkintopäivä:
- Oikeutettu maksuttomaan tutkintoon: Virkailija tarkastaa
- Valitsemasi taidot:
- Valitsemasi osakokeet:
- Maksuttomia tutkintokertoja jäljellä:
-
-
- Tietoa tutkintotilaisuudesta
-
- Tutkintotilaisuus järjestetään Opetushallituksen tiloissa osoitteessa Hakaniemenranta 6, 00530 Helsinki.
- Tutkinnon suorittamiseen kannattaa varata koko päivä. Tutkintotilaisuus alkaa klo 9.00 kirjallisen taidon tutkinnolla ja jatkuu iltapäivällä suullisen taidon tutkinnolla. Tutkinnon päättymisaika riippuu tutkintoon osallistuvien määrästä. Saat tarkemmat ohjeet tutkintopäivän kulusta viikkoa ennen tutkintopäivää.
- Jos sinulla on kysyttävää tutkinnosta, voit lähettää meille sähköpostia osoitteeseen kielitutkinnot@oph.fi. Ilmoitathan viipymättä, jos et pysty osallistumaan tutkintoon.
-
- Lisätietoa tutkinnosta löydät Opetushallituksen verkkopalvelusta:
- Valtionhallinnon kielitutkinnot (VKT)
-
-
-
-
- Älä vastaa tähän viestiin - viesti on lähetetty automaattisesti.
-
-
- Ystävällisin terveisin
- Opetushallitus
-
-
-
- Hej,
-
- Du har anmält dig till Språkexamen för statsförvaltningen (VKT).
- Du har uppgett på anmälningsblanketten att du har rätt till avgiftsfri examen och bifogat intyg. Dina intyg granskas vid Utbildningsstyrelsen så fort som möjligt.
- Om du har rätt till avgiftsfri examen får du en bekräftelse på din anmälan per e-post.
- Om du inte har rätt till avgiftsfri examen, får du en länk för att betala examensavgiften.
- Uppgifter om din anmälan hittar du nedan.
-
-
-
- Examensspråk:
- Examensnivå:
- Examensdatum:
- Rätt till avgiftsfri examen: Granskas vid Utbildningstyrelsen
- Förmågor som du har valt:
- Delprov som du har valt:
- Antal avgiftsfria examina kvar:
-
-
- Information om examenstillfället
-
- Examenstillfället ordnas vid Utbildningsstyrelsen på adressen Hagnäskajen 6, 00530 Helsingfors.
- Du bör reservera hela dagen för examen. Examenstillfället börjar klockan 9.00 med delprovet i skriftlig färdighet och fortsätter på eftermiddagen med delprovet i muntlig färdighet. Deltagarantalet avgör när examenstillfället slutar. Du får närmare anvisningar om examensdagens program en vecka före examensdagen.
- Om du har frågor om examen, kan du kontakta oss per e-post på adressen kielitutkinnot@oph.fi. Vänligen meddela omedelbart om du inte kan delta i examen.
-
- Närmare information om examen finns på Utbildningsstyrelsens webbplats:
- Språkexamina för statsförvaltningen (VKT)
-
-
-
-
- Svara inte på detta meddelande, det har skickats automatiskt.
-
-
- Med vänlig hälsning
- Utbildningsstyrelsen
-
-
-
diff --git a/backend/vkt/src/main/resources/email-templates/enrollment-to-queue-confirmation.html b/backend/vkt/src/main/resources/email-templates/enrollment-to-queue-confirmation.html
deleted file mode 100644
index 397c3c9f1..000000000
--- a/backend/vkt/src/main/resources/email-templates/enrollment-to-queue-confirmation.html
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
- Hei,
-
-
- Olet ilmoittautunut jonotuspaikalle Valtionhallinnon kielitutkintoon. Olemme sinuun yhteydessä, mikäli tutkintotilaisuuteen vapautuu paikkoja. Ohessa tiedot ilmoittautumisestasi.
-
-
-
-
- Tutkinnon kieli:
- Tutkinnon taso:
- Tutkintopäivä:
- Oikeutettu maksuttomaan tutkintoon: Ei
- Valitsemasi taidot:
- Valitsemasi osakokeet:
-
-
-
- Jos sinulla on kysyttävää tutkinnosta, voit lähettää meille sähköpostia osoitteeseen kielitutkinnot@oph.fi. Ilmoitathan viipymättä, jos et pysty osallistumaan tutkintoon.
-
- Lisätietoa tutkinnosta löydät Opetushallituksen verkkopalvelusta:
- Valtionhallinnon kielitutkinnot (VKT)
-
-
-
-
- Älä vastaa tähän viestiin - viesti on lähetetty automaattisesti.
-
-
- Ystävällisin terveisin
- Opetushallitus
-
-
-
- Hej,
-
-
- Du har en plats i kön för Språkexamen för statsförvaltningen (VKT). Vi kommer att kontakta dig om platser blir lediga. Uppgifter om din anmälan hittar du nedan.
-
-
-
-
- Examensspråk:
- Examensnivå:
- Examensdatum:
- Rätt till avgiftsfri examen: Nej
- Förmågor som du har valt:
- Delprov som du har valt:
-
-
-
- Om du har frågor om examen, kan du kontakta oss per e-post på adressen kielitutkinnot@oph.fi. Vänligen meddela omedelbart om du inte kan delta i examen.
-
- Närmare information om examen finns på Utbildningsstyrelsens webbplats:
- Språkexamina för statsförvaltningen (VKT)
-
-
-
-
- Svara inte på detta meddelande, det har skickats automatiskt.
-
-
- Med vänlig hälsning
- Utbildningsstyrelsen
-
-
-
diff --git a/backend/vkt/src/main/resources/email-templates/enrollment-to-queue-free-koski-confirmation.html b/backend/vkt/src/main/resources/email-templates/enrollment-to-queue-free-koski-confirmation.html
deleted file mode 100644
index 1b878e52d..000000000
--- a/backend/vkt/src/main/resources/email-templates/enrollment-to-queue-free-koski-confirmation.html
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
- Hei,
-
- Olet ilmoittautunut jonotuspaikalle Valtionhallinnon kielitutkintoon. Olemme sinuun yhteydessä, mikäli tutkintotilaisuuteen vapautuu paikkoja.
- Tietojemme mukaan olet oikeutettu maksuttomaan tutkintoon. Jos saat paikan tutkintoon, sinun ei tarvitse maksaa tutkintomaksua. Ohessa tiedot ilmoittautumisestasi.
-
-
-
- Tutkinnon kieli:
- Tutkinnon taso:
- Tutkintopäivä:
- Oikeutettu maksuttomaan tutkintoon: Kyllä
- Valitsemasi taidot:
- Valitsemasi osakokeet:
- Maksuttomia tutkintokertoja jäljellä:
-
-
-
- Jos sinulla on kysyttävää tutkinnosta, voit lähettää meille sähköpostia osoitteeseen kielitutkinnot@oph.fi. Ilmoitathan viipymättä, jos et pysty osallistumaan tutkintoon.
-
- Lisätietoa tutkinnosta löydät Opetushallituksen verkkopalvelusta:
- Valtionhallinnon kielitutkinnot (VKT)
-
-
-
-
- Älä vastaa tähän viestiin - viesti on lähetetty automaattisesti.
-
-
- Ystävällisin terveisin
- Opetushallitus
-
-
-
- Hej,
-
-
- Du har en plats i kön för Språkexamen för statsförvaltningen (VKT). Vi kommer att kontakta dig om platser blir lediga.
-
-
- Enligt våra uppgifter har du rätt till avgiftsfri examen. Ifall du får plats vid examenstillfället behöver du inte betala examensavgift. Uppgifter om din anmälan hittar du nedan.
-
-
-
-
- Examensspråk:
- Examensnivå:
- Examensdatum:
- Rätt till avgiftsfri examen: Ja
- Förmågor som du har valt:
- Delprov som du har valt:
- Antal avgiftsfria examina kvar:
-
-
-
- Om du har frågor om examen, kan du kontakta oss per e-post på adressen kielitutkinnot@oph.fi. Vänligen meddela omedelbart om du inte kan delta i examen.
-
- Närmare information om examen finns på Utbildningsstyrelsens webbplats:
- Språkexamina för statsförvaltningen (VKT)
-
-
-
-
- Svara inte på detta meddelande, det har skickats automatiskt.
-
-
- Med vänlig hälsning
- Utbildningsstyrelsen
-
-
-
diff --git a/backend/vkt/src/main/resources/email-templates/enrollment-to-queue-free-user-confirmation.html b/backend/vkt/src/main/resources/email-templates/enrollment-to-queue-free-user-confirmation.html
deleted file mode 100644
index a0628b59e..000000000
--- a/backend/vkt/src/main/resources/email-templates/enrollment-to-queue-free-user-confirmation.html
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
- Hei,
-
- Olet ilmoittautunut jonotuspaikalle Valtionhallinnon kielitutkintoon. Olemme sinuun yhteydessä, mikäli tutkintotilaisuuteen vapautuu paikkoja.
- Olet ilmoittanut ilmoittautumislomakkeella, että olet oikeutettu maksuttomaan tutkintoon ja lisännyt todistusasiakirjoja. Jos saat paikan tutkintoon, virkailija tarkastaa, täyttävätkö asiakirjat maksuttomuuden ehdot.
- Jos ehdot täyttyvät, tutkinto on maksuton ja saat sähköpostilla vahvistuksen ilmoittautumisesta.
- Jos ehdot eivät täyty, tutkinto on maksullinen ja saat sähköpostilla maksulinkin tutkintomaksun maksamista varten.
- Ohessa tiedot ilmoittautumisestasi.
-
-
-
- Tutkinnon kieli:
- Tutkinnon taso:
- Tutkintopäivä:
- Oikeutettu maksuttomaan tutkintoon: Virkailija tarkastaa
- Valitsemasi taidot:
- Valitsemasi osakokeet:
- Maksuttomia tutkintokertoja jäljellä:
-
-
-
- Jos sinulla on kysyttävää tutkinnosta, voit lähettää meille sähköpostia osoitteeseen kielitutkinnot@oph.fi. Ilmoitathan viipymättä, jos et pysty osallistumaan tutkintoon.
-
- Lisätietoa tutkinnosta löydät Opetushallituksen verkkopalvelusta:
- Valtionhallinnon kielitutkinnot (VKT)
-
-
-
-
- Älä vastaa tähän viestiin - viesti on lähetetty automaattisesti.
-
-
- Ystävällisin terveisin
- Opetushallitus
-
-
-
- Hej,
-
- Du har en plats i kön för Språkexamen för statsförvaltningen (VKT). Vi kontaktar dig om platser blir lediga.
- Du har uppgett på anmälningsblanketten att du har rätt till avgiftsfri examen och bifogat intyg. Om du får en plats vid examenstillfället granskas dina intyg vid Utbildningsstyrelsen.
- Ifall du har rätt till avgiftsfri examen får du en bekräftelse på din anmälan per e-post.
- Om du inte har rätt till avgiftsfri examen, får du en länk för att betala examensavgiften.
- Uppgifter om din anmälan hittar du nedan.
-
-
-
-
- Examensspråk:
- Examensnivå:
- Examensdatum:
- Rätt till avgiftsfri examen: Granskas på Utbildningstyrelsen
- Förmågor som du har valt:
- Delprov som du har valt:
- Antal avgiftsfria examina kvar:
-
-
-
- Om du har frågor om examen, kan du kontakta oss per e-post på adressen kielitutkinnot@oph.fi. Vänligen meddela omedelbart om du inte kan delta i examen.
-
- Närmare information om examen finns på Utbildningsstyrelsens webbplats:
- Språkexamina för statsförvaltningen (VKT)
-
-
-
-
- Svara inte på detta meddelande, det har skickats automatiskt.
-
-
- Med vänlig hälsning
- Utbildningsstyrelsen
-
-
-
diff --git a/backend/vkt/src/test/java/fi/oph/vkt/service/PublicEnrollmentEmailServiceTest.java b/backend/vkt/src/test/java/fi/oph/vkt/service/PublicEnrollmentEmailServiceTest.java
index 8cf7cf7a9..9cbfa7ea1 100644
--- a/backend/vkt/src/test/java/fi/oph/vkt/service/PublicEnrollmentEmailServiceTest.java
+++ b/backend/vkt/src/test/java/fi/oph/vkt/service/PublicEnrollmentEmailServiceTest.java
@@ -112,25 +112,18 @@ public void testSendEnrollmentConfirmationEmail() throws IOException, Interrupte
entityManager.persist(person);
entityManager.persist(enrollment);
- final Map expectedTemplateParams = Map.of(
- "examLanguageFI",
- "suomi",
- "examLanguageSV",
- "finska",
- "examLevelFI",
- "erinomainen taito",
- "examLevelSV",
- "utmärkta språkkunskaper",
- "examDate",
- "12.03.2025",
- "skillsFI",
- "suullinen taito",
- "skillsSV",
- "förmåga att använda finska i tal",
- "partialExamsFI",
- "puhuminen, puheen ymmärtäminen",
- "partialExamsSV",
- "muntlig färdighet, hörförståelse"
+ final Map expectedTemplateParams = Map.ofEntries(
+ Map.entry("examLanguageFI", "suomi"),
+ Map.entry("examLanguageSV", "finska"),
+ Map.entry("examLevelFI", "erinomainen taito"),
+ Map.entry("examLevelSV", "utmärkta språkkunskaper"),
+ Map.entry("examDate", "12.03.2025"),
+ Map.entry("skillsFI", "suullinen taito"),
+ Map.entry("skillsSV", "förmåga att använda finska i tal"),
+ Map.entry("partialExamsFI", "puhuminen, puheen ymmärtäminen"),
+ Map.entry("partialExamsSV", "muntlig färdighet, hörförståelse"),
+ Map.entry("type", "enrollment"),
+ Map.entry("isFree", false)
);
when(environment.getRequiredProperty("app.email.sending-enabled", Boolean.class)).thenReturn(true);
@@ -188,28 +181,21 @@ public void testSendEnrollmentToQueueConfirmationEmail() {
entityManager.persist(person);
entityManager.persist(enrollment);
- final Map expectedTemplateParams = Map.of(
- "examLanguageFI",
- "ruotsi",
- "examLanguageSV",
- "svenska",
- "examLevelFI",
- "erinomainen taito",
- "examLevelSV",
- "utmärkta språkkunskaper",
- "examDate",
- "12.03.2025",
- "skillsFI",
- "kirjallinen taito, ymmärtämisen taito",
- "skillsSV",
- "förmåga att använda svenska i skrift, förmåga att förstå svenska",
- "partialExamsFI",
- "kirjoittaminen, tekstin ymmärtäminen, puheen ymmärtäminen",
- "partialExamsSV",
- "skriftlig färdighet, läsförståelse, hörförståelse"
+ final Map expectedTemplateParams = Map.ofEntries(
+ Map.entry("examLanguageFI", "ruotsi"),
+ Map.entry("examLanguageSV", "svenska"),
+ Map.entry("examLevelFI", "erinomainen taito"),
+ Map.entry("examLevelSV", "utmärkta språkkunskaper"),
+ Map.entry("examDate", "12.03.2025"),
+ Map.entry("skillsFI", "kirjallinen taito, ymmärtämisen taito"),
+ Map.entry("skillsSV", "förmåga att använda svenska i skrift, förmåga att förstå svenska"),
+ Map.entry("partialExamsFI", "kirjoittaminen, tekstin ymmärtäminen, puheen ymmärtäminen"),
+ Map.entry("partialExamsSV", "skriftlig färdighet, läsförståelse, hörförståelse"),
+ Map.entry("type", "queue"),
+ Map.entry("isFree", false)
);
- when(templateRenderer.renderEnrollmentToQueueConfirmationEmailBody(expectedTemplateParams))
+ when(templateRenderer.renderEnrollmentConfirmationEmailBody(expectedTemplateParams))
.thenReturn("enrollment-to-queue");
publicEnrollmentEmailService.sendEnrollmentToQueueConfirmationEmail(enrollment, person);
diff --git a/backend/vkt/src/test/java/fi/oph/vkt/util/TemplateRendererTest.java b/backend/vkt/src/test/java/fi/oph/vkt/util/TemplateRendererTest.java
index e108c8d8b..cc141cb91 100644
--- a/backend/vkt/src/test/java/fi/oph/vkt/util/TemplateRendererTest.java
+++ b/backend/vkt/src/test/java/fi/oph/vkt/util/TemplateRendererTest.java
@@ -5,6 +5,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import jakarta.annotation.Resource;
+import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@@ -24,15 +25,32 @@ public void testRenderEnrollmentConfirmation() {
assertCommonEnrollmentConfirmationEmailContent(content);
assertTrue(content.contains("maksukuitti"));
+ assertFalse(content.contains("oikeutettu maksuttomaan"));
}
@Test
public void testRenderEnrollmentToQueueConfirmation() {
final Map params = getCommonEnrollmentConfirmationParams();
- final String content = templateRenderer.renderEnrollmentToQueueConfirmationEmailBody(params);
+ final HashMap queueParams = new HashMap(params);
+ queueParams.put("type", "queue");
+ final String content = templateRenderer.renderEnrollmentConfirmationEmailBody(queueParams);
assertCommonEnrollmentConfirmationEmailContent(content);
assertFalse(content.contains("maksukuitti"));
+ assertFalse(content.contains("oikeutettu maksuttomaan"));
+ }
+
+ @Test
+ public void testRenderFreeEnrollmentConfirmation() {
+ final Map params = getCommonEnrollmentConfirmationParams();
+ final HashMap queueParams = new HashMap(params);
+ queueParams.put("isFree", true);
+ queueParams.put("source", "KOSKI");
+ final String content = templateRenderer.renderEnrollmentConfirmationEmailBody(queueParams);
+
+ assertCommonEnrollmentConfirmationEmailContent(content);
+ assertFalse(content.contains("maksukuitti"));
+ assertTrue(content.contains("oikeutettu maksuttomaan"));
}
private Map getCommonEnrollmentConfirmationParams() {
@@ -48,7 +66,11 @@ private Map getCommonEnrollmentConfirmationParams() {
"partialExamsFI",
"kirjoittaminen, tekstin ymmärtäminen, puhuminen",
"examLanguageSV",
- "finska"
+ "finska",
+ "type",
+ "enrollment",
+ "isFree",
+ false
);
}
From 0094eb0f2583bfaebb310034819665d55a8006dd Mon Sep 17 00:00:00 2001
From: Laura Ketola
Date: Fri, 13 Sep 2024 16:01:42 +0300
Subject: [PATCH 2/2] VKT(Backend): Improve building free enrollment email
contents
---
.../service/PublicEnrollmentEmailService.java | 49 +++++++++++++------
.../enrollment-confirmation.html | 4 +-
2 files changed, 35 insertions(+), 18 deletions(-)
diff --git a/backend/vkt/src/main/java/fi/oph/vkt/service/PublicEnrollmentEmailService.java b/backend/vkt/src/main/java/fi/oph/vkt/service/PublicEnrollmentEmailService.java
index 76c436a94..000362087 100644
--- a/backend/vkt/src/main/java/fi/oph/vkt/service/PublicEnrollmentEmailService.java
+++ b/backend/vkt/src/main/java/fi/oph/vkt/service/PublicEnrollmentEmailService.java
@@ -183,8 +183,12 @@ public void sendFreeEnrollmentConfirmationEmail(
final Person person,
final FreeEnrollmentDetails freeEnrollmentDetails
) {
- final Map templateParams = getEmailParams(enrollment);
- getFreeEmailParams(templateParams, freeEnrollmentDetails, enrollment.getFreeEnrollment().getSource(), "enrollment");
+ final Map templateParams = withFreeEmailParams(
+ getEmailParams(enrollment),
+ freeEnrollmentDetails,
+ enrollment.getFreeEnrollment().getSource(),
+ "enrollment"
+ );
final String recipientName = person.getFirstName() + " " + person.getLastName();
final String recipientAddress = enrollment.getEmail();
@@ -204,8 +208,12 @@ public void sendFreeEnrollmentToQueueConfirmationEmail(
final Person person,
final FreeEnrollmentDetails freeEnrollmentDetails
) {
- final Map templateParams = getEmailParams(enrollment);
- getFreeEmailParams(templateParams, freeEnrollmentDetails, enrollment.getFreeEnrollment().getSource(), "queue");
+ final Map templateParams = withFreeEmailParams(
+ getEmailParams(enrollment),
+ freeEnrollmentDetails,
+ enrollment.getFreeEnrollment().getSource(),
+ "queue"
+ );
final String recipientName = person.getFirstName() + " " + person.getLastName();
final String recipientAddress = enrollment.getEmail();
@@ -225,10 +233,13 @@ public void sendPartiallyFreeEnrollmentConfirmationEmail(
final Person person,
final FreeEnrollmentDetails freeEnrollmentDetails
) throws IOException, InterruptedException {
- final Map templateParams = getEmailParams(enrollment);
- getFreeEmailParams(templateParams, freeEnrollmentDetails, enrollment.getFreeEnrollment().getSource(), "queue");
+ final Map templateParams = withFreeEmailParams(
+ getEmailParams(enrollment),
+ freeEnrollmentDetails,
+ enrollment.getFreeEnrollment().getSource(),
+ "enrollment"
+ );
templateParams.put("isFree", "false");
- templateParams.put("type", "enrollment");
final String recipientName = person.getFirstName() + " " + person.getLastName();
final String recipientAddress = enrollment.getEmail();
@@ -255,10 +266,13 @@ public void sendPartiallyFreeEnrollmentToQueueConfirmationEmail(
final Person person,
final FreeEnrollmentDetails freeEnrollmentDetails
) {
- final Map templateParams = getEmailParams(enrollment);
- getFreeEmailParams(templateParams, freeEnrollmentDetails, enrollment.getFreeEnrollment().getSource(), "queue");
+ final Map templateParams = withFreeEmailParams(
+ getEmailParams(enrollment),
+ freeEnrollmentDetails,
+ enrollment.getFreeEnrollment().getSource(),
+ "queue"
+ );
templateParams.put("isFree", "false");
- templateParams.put("type", "queue");
final String recipientName = person.getFirstName() + " " + person.getLastName();
final String recipientAddress = enrollment.getEmail();
@@ -272,16 +286,17 @@ public void sendPartiallyFreeEnrollmentToQueueConfirmationEmail(
createEmail(recipientName, recipientAddress, subject, body, List.of(), EmailType.ENROLLMENT_TO_QUEUE_CONFIRMATION);
}
- public void getFreeEmailParams(
+ public Map withFreeEmailParams(
Map params,
FreeEnrollmentDetails details,
FreeEnrollmentSource source,
String type
) {
- params.put("isFree", true);
- params.put("type", type);
- params.put("source", source.name());
- params.put(
+ Map freeParams = new HashMap<>(params);
+ freeParams.put("isFree", true);
+ freeParams.put("type", type);
+ freeParams.put("source", source.name());
+ freeParams.put(
"freeExamsLeftFI",
String.format(
"%s: %s/3. %s: %s/3",
@@ -291,7 +306,7 @@ public void getFreeEmailParams(
EnrollmentUtil.getFreeExamsLeft(details.oralSkillCount())
)
);
- params.put(
+ freeParams.put(
"freeExamsLeftSV",
String.format(
"%s: %s/3. %s: %s/3",
@@ -301,5 +316,7 @@ public void getFreeEmailParams(
EnrollmentUtil.getFreeExamsLeft(details.oralSkillCount())
)
);
+
+ return freeParams;
}
}
diff --git a/backend/vkt/src/main/resources/email-templates/enrollment-confirmation.html b/backend/vkt/src/main/resources/email-templates/enrollment-confirmation.html
index 85324b38c..4c2b6315a 100644
--- a/backend/vkt/src/main/resources/email-templates/enrollment-confirmation.html
+++ b/backend/vkt/src/main/resources/email-templates/enrollment-confirmation.html
@@ -40,7 +40,7 @@
Oikeutettu maksuttomaan tutkintoon: Ei
Valitsemasi taidot:
Valitsemasi osakokeet:
- Maksuttomia tutkintokertoja jäljellä:
+ Maksuttomia tutkintokertoja jäljellä:
@@ -102,7 +102,7 @@
Rätt till avgiftsfri examen: Nej
Förmågor som du har valt:
Delprov som du har valt:
- Antal avgiftsfria examina kvar:
+ Antal avgiftsfria examina kvar:
Information om examenstillfället