93 lines
3.9 KiB
Haskell
93 lines
3.9 KiB
Haskell
-- SPDX-FileCopyrightText: 2023 Steffen Jost <jost@tcs.ifi.lmu.de>
|
|
--
|
|
-- SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
{-# OPTIONS_GHC -fno-warn-unused-top-binds #-}
|
|
|
|
module Utils.Print.ExpireQualification where
|
|
|
|
import Import
|
|
import Text.Hamlet
|
|
|
|
-- import Data.Char as Char
|
|
-- import qualified Data.Text as Text
|
|
import qualified Data.CaseInsensitive as CI
|
|
|
|
import Data.FileEmbed (embedFile)
|
|
|
|
import Utils.Print.Letters
|
|
import Handler.Utils.Widgets (nameHtml) -- , nameHtml')
|
|
|
|
|
|
data LetterExpireQualificationF = LetterExpireQualificationF
|
|
{ leqfHolderCFN :: CryptoFileNameUser
|
|
, leqfHolderID :: UserId
|
|
, leqfHolderDN :: UserDisplayName
|
|
, leqfHolderSN :: UserSurname
|
|
, leqfExpiry :: Maybe Day
|
|
, leqfId :: QualificationId
|
|
, leqfName :: Text
|
|
, leqfShort :: Text
|
|
, leqfSchool :: SchoolId
|
|
, leqfUrl :: Maybe Text
|
|
}
|
|
deriving (Eq, Show)
|
|
|
|
-- TODO: use markdown to generate the Letter
|
|
instance MDMail LetterExpireQualificationF where
|
|
attachPDFLetter _ = False
|
|
getMailSubject l = SomeMessage $ MsgMailSubjectQualificationExpired $ leqfShort l
|
|
getMailBody LetterExpireQualificationF{..} DateTimeFormatter{ format } = return $
|
|
let expiryDate = format SelFormatDate <$> leqfExpiry
|
|
userDisplayName = leqfHolderDN
|
|
userSurname = leqfHolderSN
|
|
qualificationName = leqfName
|
|
qualificationShorthand = CI.mk leqfShort
|
|
qualificationSchool = leqfSchool
|
|
qname = qualificationName
|
|
ihamletSomeMessage _ _ _ = (mempty :: Html) -- TODO: use markdown for letter
|
|
editNotifications = () -- TODO: use markdown for letter
|
|
in $(ihamletFile "templates/mail/qualificationExpired.hamlet")
|
|
-- const $ const html
|
|
-- Html -> HtmlUrlI18n (SomeMessage UniWorX) (Route UniWorX)
|
|
-- foo _ _ html -> html
|
|
-- [shamlet|#Ansprache #{html}|] um Html umzuwandeln!
|
|
--
|
|
|
|
|
|
instance MDLetter LetterExpireQualificationF where
|
|
encryptPDFfor _ = NoPassword
|
|
getLetterKind _ = Din5008
|
|
getLetterEnvelope _ = 'e'
|
|
getTemplate _ = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/fraport_f_expiry.md")
|
|
|
|
letterMeta LetterExpireQualificationF{..} DateTimeFormatter{ format } lang Entity{entityKey=rcvrId, entityVal=User{userDisplayName}} =
|
|
let isSupervised = rcvrId /= leqfHolderID
|
|
in mkMeta $
|
|
guardMonoid isSupervised
|
|
[ toMeta "supervisor" userDisplayName
|
|
] <>
|
|
[ toMeta "lang" lang
|
|
, toMeta "licenceholder" leqfHolderDN
|
|
, mbMeta "expiry" (format SelFormatDate <$> leqfExpiry)
|
|
, mbMeta "licence-url" leqfUrl
|
|
, toMeta "de-opening" $ bool ("Guten Tag " <> leqfHolderDN <> ",") "Sehr geehrte Damen und Herren," isSupervised
|
|
, toMeta "en-opening" $ bool ("Dear " <> leqfHolderDN <> ",") "Dear supervisor," isSupervised
|
|
]
|
|
|
|
getPJId LetterExpireQualificationF{..} =
|
|
PrintJobIdentification
|
|
{ pjiName = "Expiry"
|
|
, pjiApcAcknowledge = "ex-" <> toPathPiece leqfHolderCFN
|
|
, pjiRecipient = Nothing -- to be filled later
|
|
, pjiSender = Nothing
|
|
, pjiCourse = Nothing
|
|
, pjiQualification = Just leqfId
|
|
, pjiLmsUser = Nothing
|
|
, pjiFileName = "expire_" <> CI.original (unSchoolKey leqfSchool) <> "-" <> leqfShort <> "_" <> leqfHolderSN
|
|
-- let nameRecipient = abbrvName <$> recipient
|
|
-- nameSender = abbrvName <$> sender
|
|
-- nameCourse = CI.original . courseShorthand <$> course
|
|
-- nameQuali = CI.original . qualificationShorthand <$> quali
|
|
-- in .. = T.replace " " "-" (T.intercalate "_" . catMaybes $ [Just printJobName, nameQuali, nameCourse, nameSender, nameRecipient])
|
|
} |