diff --git a/messages/uniworx/categories/qualification/de-de-formal.msg b/messages/uniworx/categories/qualification/de-de-formal.msg index c0e62cfcb..a8315ef26 100644 --- a/messages/uniworx/categories/qualification/de-de-formal.msg +++ b/messages/uniworx/categories/qualification/de-de-formal.msg @@ -63,7 +63,7 @@ LmsErrorNoRefreshElearning: Fehler: E-Learning wird nicht automatisch gestartet, MailSubjectQualificationRenewal qname@Text: Qualifikation #{qname} muss demnächst erneuert werden MailSubjectQualificationExpiry qname@Text: Qualifikation #{qname} läuft demnächst ab MailSubjectQualificationExpired qname@Text: Qualifikation #{qname} ist ab sofort ungültig -MailBodyQualificationRenewal qname@Text: Sie müssen Qualifikation #{qname} demnächst durch einen E-Learning Kurs erneuern, siehe Anhang. +MailBodyQualificationRenewal qname@Text: Sie müssen die Qualifikation #{qname} demnächst durch einen E-Learning Kurs erneuern, siehe Anhang. MailBodyQualificationExpiry: Diese Qualifikation läuft bald ab. Tätigkeiten, welche diese Qualifikation voraussetzen dürfen dann nicht länger ausgeübt werden! MailBodyQualificationExpired: Diese Qualifikation is nun abgelaufen. Tätigkeiten, welche diese Qualifikation voraussetzen dürfen ab sofort nicht länger ausgeübt werden! Es ist möglich, dass die Qualifikation vorzeit ungültig wurde, z.B. wegen erfolgloser Teilnahme an einem verpflichtendem E-Learning. LmsRenewalInstructions: Anweisungen zur Verlängerung finden Sie im angehängten PDF. Um Missbrauch zu verhindern wurde das PDF dem von Ihnen in FRADrive hinterlegten PDF-Passwort verschlüsselt. Falls kein PDF-Passwort manuell hinterlegt wurde, ist das PDF-Passwort Ihre Flughafen Ausweisnummer, inklusive Punkt und der Ziffer danach. diff --git a/src/Handler/Utils/Users.hs b/src/Handler/Utils/Users.hs index eacfb92a7..d2707ff66 100644 --- a/src/Handler/Utils/Users.hs +++ b/src/Handler/Utils/Users.hs @@ -59,11 +59,11 @@ abbrvName User{userDisplayName, userFirstName, userSurname} = assemble = Text.intercalate "." --- deprecated, used getPostalAddressIfPreferred +-- deprecated, used getPostalPreferenceAndAddress userPrefersLetter :: User -> Bool userPrefersLetter = fst . getPostalPreferenceAndAddress --- deprecated, used getPostalAddressIfPreferred +-- deprecated, used getPostalPreferenceAndAddress userPrefersEmail :: User -> Bool userPrefersEmail = not . userPrefersLetter diff --git a/src/Jobs/Handler/SendNotification/Qualification.hs b/src/Jobs/Handler/SendNotification/Qualification.hs index 0d519e183..a10f320bd 100644 --- a/src/Jobs/Handler/SendNotification/Qualification.hs +++ b/src/Jobs/Handler/SendNotification/Qualification.hs @@ -73,16 +73,18 @@ dispatchNotificationQualificationRenewal nQualification jRecipient = do <*> getBy (UniqueQualificationUser nQualification jRecipient) <*> getBy (UniqueLmsQualificationUser nQualification jRecipient) case query of - (Just User{userDisplayName}, Just Qualification{..}, Just (Entity _ QualificationUser{..}), Just(Entity luid LmsUser{..})) -> do + (Just User{userDisplayName, userSurname}, Just Qualification{..}, Just (Entity _ QualificationUser{..}), Just(Entity luid LmsUser{..})) -> do let qname = CI.original qualificationName let letter = LetterRenewQualificationF { lmsLogin = lmsUserIdent , lmsPin = lmsUserPin , qualHolder = userDisplayName + , qualHolderSN = userSurname , qualExpiry = qualificationUserValidUntil - , qualId = nQualification + , qualId = nQualification , qualName = qname , qualShort = CI.original qualificationShorthand + , qualSchool = qualificationSchool , qualDuration = qualificationValidDuration } $logInfoS "LMS" $ "Notify " <> tshow encRecipient <> " for renewal of qualification " <> qname diff --git a/src/Utils/Print.hs b/src/Utils/Print.hs index fd03915d5..2700c2fad 100644 --- a/src/Utils/Print.hs +++ b/src/Utils/Print.hs @@ -42,7 +42,7 @@ import System.Process.Typed -- for calling pdftk for pdf encryption import Handler.Utils.Users import Handler.Utils.DateTime import Handler.Utils.Mail -import Handler.Utils.Widgets (nameHtml') +import Handler.Utils.Widgets (nameHtml, nameHtml') import Handler.Utils.Avs (updateReceivers) import Jobs.Handler.SendNotification.Utils @@ -368,28 +368,47 @@ convertProto f (IsTime t) = P.toMetaValue $ f t class MDLetter l where getTemplate :: Proxy l -> Text - getMailSubject :: l -> SomeMessage UniWorX -- only used if letter is sent by email as pdf attachment - getMailBody :: l -> SomeMessage UniWorX -- only used if letter is sent by email as pdf attachment - letterMeta :: l -> Lang -> DateTimeFormatter -> P.Meta + getMailSubject :: l -> SomeMessage UniWorX -- only used if letter is sent by email as pdf attachment + getMailBody :: l -> DateTimeFormatter -> HtmlUrlI18n (SomeMessage UniWorX) (Route UniWorX) -- only used if letter is sent by email as pdf attachment + letterMeta :: l -> DateTimeFormatter -> Lang -> P.Meta getPJId :: l -> PrintJobIdentification data LetterRenewQualificationF = LetterRenewQualificationF { lmsLogin :: LmsIdent , lmsPin :: Text , qualHolder :: UserDisplayName + , qualHolderSN :: UserSurname , qualExpiry :: Day , qualId :: QualificationId , qualName :: Text , qualShort :: Text + , qualSchool :: SchoolId , qualDuration :: Maybe Int } deriving (Eq, Show) +-- this type is specific to this letter to avoid code duplication for derived data or constants +data LetterRenewQualificationFData = LetterRenewQualificationFData { lmsUrl, lmsUrlLogin, lmsIdent :: Text } + deriving (Eq, Show) + +letterRenewalQualificationFData :: LetterRenewQualificationF -> LetterRenewQualificationFData +letterRenewalQualificationFData LetterRenewQualificationF{lmsLogin} = LetterRenewQualificationFData{..} + where + lmsUrl = "https://drive.fraport.de" + lmsUrlLogin = lmsUrl <> "/?login=" <> lmsIdent + lmsIdent = getLmsIdent lmsLogin + instance MDLetter LetterRenewQualificationF where getTemplate _ = templateRenewal getMailSubject l = SomeMessage $ MsgMailSubjectQualificationRenewal $ qualShort l - getMailBody l = SomeMessage $ MsgMailBodyQualificationRenewal $ qualName l - letterMeta LetterRenewQualificationF{..} _lang DateTimeFormatter{ format } = mkMeta + -- getMailBody l = SomeMessage $ MsgMailBodyQualificationRenewal $ qualName l + getMailBody l@LetterRenewQualificationF{..} DateTimeFormatter{ format } = + let LetterRenewQualificationFData{..} = letterRenewalQualificationFData l + in $(ihamletFile "templates/mail/body/qualificationRenewal.hamlet") + + letterMeta l@LetterRenewQualificationF{..} DateTimeFormatter{ format } _lang = + let LetterRenewQualificationFData{..} = letterRenewalQualificationFData l + in mkMeta [ toMeta "login" lmsIdent , toMeta "pin" lmsPin , toMeta "examinee" qualHolder @@ -398,10 +417,7 @@ instance MDLetter LetterRenewQualificationF where , toMeta "url-text" lmsUrl , toMeta "url" lmsUrlLogin ] - where - lmsUrl = "https://drive.fraport.de" - lmsUrlLogin = lmsUrl <> "/?login=" <> lmsIdent - lmsIdent = getLmsIdent lmsLogin + getPJId LetterRenewQualificationF{..} = PrintJobIdentification { pjiName = "Renewal" @@ -418,8 +434,7 @@ sendEmailOrLetter recipient letter = do let tmpl = getTemplate $ pure letter pjid = getPJId letter -- Below are only needed if sent by email - mailSubject = getMailSubject letter - mailBody = getMailBody letter + mailSubject = getMailSubject letter undername = underling ^. _userDisplayName -- nameHtml' underling undermail = CI.original $ underling ^. _userEmail now <- liftIO getCurrentTime @@ -428,7 +443,8 @@ sendEmailOrLetter recipient letter = do let (preferPost, postal) = getPostalPreferenceAndAddress rcvrUsr isSupervised = recipient /= svr lang = selectDeEn $ rcvrUsr & userLanguages -- select either German or English only, default de; see Utils.Lang - lMeta = letterMeta letter lang formatter <> mkMeta ( + mailBody = getMailBody letter formatter + lMeta = letterMeta letter formatter lang <> mkMeta ( ( if isSupervised then [ toMeta "supervisor" (rcvrUsr & userDisplayName) diff --git a/templates/letter/fraport_renewal.md b/templates/letter/fraport_renewal.md index 0aab28550..07978d9ed 100644 --- a/templates/letter/fraport_renewal.md +++ b/templates/letter/fraport_renewal.md @@ -89,7 +89,7 @@ Sollte bis zum Ablaufdatum das E-Learning nicht erfolgreich abgeschlossen sein, zur Wiedererlangung der Fahrberechtigung "F" erneut ein Grundkurs bei der Fahrerausbildung absolviert werden. Bei Fragen können Sie sich gerne an das Team der Fahrerausbildung wenden. -(Please contact us if you prefer letters in English.) +(Please contact us if you prefer letters in English.!) $else$ diff --git a/templates/mail/body/qualificationRenewal.hamlet b/templates/mail/body/qualificationRenewal.hamlet new file mode 100644 index 000000000..66a619e37 --- /dev/null +++ b/templates/mail/body/qualificationRenewal.hamlet @@ -0,0 +1,25 @@ +$newline never + +$# SPDX-FileCopyrightText: 2022 Steffen Jost +$# +$# SPDX-License-Identifier: AGPL-3.0-or-later + +

+ _{SomeMessage $ MsgMailBodyQualificationRenewal qualName} + +

+

+
_{SomeMessage MsgQualificationName} +
+ + #{qualName} +
_{SomeMessage MsgLmsUser} +
#{nameHtml qualHolder qualHolderSN} +
_{SomeMessage MsgLmsQualificationValidUntil} +
#{format SelFormatDate qualExpiry} + +

+ _{SomeMessage MsgLmsRenewalInstructions} # + + + _{SomeMessage MsgMppURL} #{lmsUrl} diff --git a/templates/mail/genericMailLetter.hamlet b/templates/mail/genericMailLetter.hamlet index 703596b65..434debd80 100644 --- a/templates/mail/genericMailLetter.hamlet +++ b/templates/mail/genericMailLetter.hamlet @@ -18,8 +18,7 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later

_{mailSubject} -

- _{mailBody} + ^{mailBody} $if isSupervised

_{SomeMessage MsgMailSupervisorNote}