chore(letter): improve certificate interpolation and styling

This commit is contained in:
Steffen Jost 2023-04-05 16:10:53 +00:00
parent db0eadc746
commit 879b8a72be
7 changed files with 55 additions and 26 deletions

View File

@ -21,7 +21,7 @@ import qualified Data.CaseInsensitive as CI
import qualified Data.Set as Set import qualified Data.Set as Set
import qualified Data.Map as Map import qualified Data.Map as Map
import qualified Data.ByteString.Lazy as LBS -- import qualified Data.ByteString.Lazy as LBS
-- import qualified Data.Time.Zones as TZ -- import qualified Data.Time.Zones as TZ
import Database.Esqueleto.Experimental ((:&)(..)) import Database.Esqueleto.Experimental ((:&)(..))
@ -134,7 +134,10 @@ postTUsersR tid ssh csh tutn = do
apcIdent <- letterApcIdent l encRcvr now apcIdent <- letterApcIdent l encRcvr now
renderLetter rcvr l apcIdent >>= \case renderLetter rcvr l apcIdent >>= \case
Left err -> sendResponseStatus internalServerError500 $ "PDF generation failed: \n" <> err Left err -> sendResponseStatus internalServerError500 $ "PDF generation failed: \n" <> err
Right pdf -> void $ sendByteStringAsFile "demoPDF.pdf" (LBS.toStrict pdf) now Right pdf -> do -- void $ sendByteStringAsFile "demoPDF.pdf" (LBS.toStrict pdf) now
let typePDF :: ContentType
typePDF = "application/pdf"
sendResponse (typePDF, toContent pdf)
_ -> addMessageI Error MsgErrorUnknownFormAction _ -> addMessageI Error MsgErrorUnknownFormAction
(TutorialUserGrantQualificationData{..}, selectedUsers) (TutorialUserGrantQualificationData{..}, selectedUsers)
| tuQualification `Set.member` courseQids -> do | tuQualification `Set.member` courseQids -> do

View File

@ -138,7 +138,7 @@ renderLetter rcvrEnt@Entity{entityVal=rcvr} mdl apcIdent = do
formatter@DateTimeFormatter{ format } <- getDateTimeFormatterUser' rcvr formatter@DateTimeFormatter{ format } <- getDateTimeFormatterUser' rcvr
let lang = selectDeEn $ rcvr & userLanguages -- select either German or English only, default de; see Utils.Lang let lang = selectDeEn $ rcvr & userLanguages -- select either German or English only, default de; see Utils.Lang
kind = getLetterKind $ pure mdl kind = getLetterKind $ pure mdl
tmpl = getTemplate $ pure mdl tmpl = getTemplate mdl
meta = addApcIdent apcIdent meta = addApcIdent apcIdent
<> letterMeta mdl formatter lang rcvrEnt <> letterMeta mdl formatter lang rcvrEnt
<> mkMeta <> mkMeta

View File

@ -9,7 +9,7 @@ module Utils.Print.CourseCertificate where
import Import import Import
-- import Data.Char as Char -- import Data.Char as Char
-- import qualified Data.Text as Text import qualified Data.Text as Text
import qualified Data.CaseInsensitive as CI import qualified Data.CaseInsensitive as CI
import Data.FileEmbed (embedFile) import Data.FileEmbed (embedFile)
@ -37,6 +37,9 @@ instance MDLetter LetterCourseCertificate where
encrypPDFfor _ = NoPassword encrypPDFfor _ = NoPassword
getLetterKind _ = Plain getLetterKind _ = Plain
getLetterEnvelope _ = 'c' getLetterEnvelope _ = 'c'
getTemplate LetterCourseCertificate{ccCourseContent = Just ccc} =
Text.replace "%%%course-content%%%" (unlines ccc) $
decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/fraport_qualification.md")
getTemplate _ = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/fraport_qualification.md") getTemplate _ = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/fraport_qualification.md")
letterMeta LetterCourseCertificate{..} DateTimeFormatter{ format } lang _rcvrEnt = letterMeta LetterCourseCertificate{..} DateTimeFormatter{ format } lang _rcvrEnt =

View File

@ -225,7 +225,7 @@ class MDLetter l where
getPJId :: l -> PrintJobIdentification getPJId :: l -> PrintJobIdentification
getLetterEnvelope :: l -> Char getLetterEnvelope :: l -> Char
getLetterKind :: Proxy l -> LetterKind getLetterKind :: Proxy l -> LetterKind
getTemplate :: Proxy l -> Text getTemplate :: l -> Text
encrypPDFfor :: Proxy l -> EncryptPDFfor encrypPDFfor :: Proxy l -> EncryptPDFfor
letterApcIdent :: (MDLetter l, MonadHandler m) => l -> CryptoUUIDUser -> UTCTime -> m Text letterApcIdent :: (MDLetter l, MonadHandler m) => l -> CryptoUUIDUser -> UTCTime -> m Text

View File

@ -1,49 +1,69 @@
--- ---
### Metaddaten, welche hier eingestellt werden: ### Metaddaten, welche hier eingestellt werden:
# keine
### Metadaten, welche automatisch ersetzt werden: ### Metadaten, welche automatisch ersetzt werden:
lang: de-de lang: de-de
is-de: true is-de: true
date: 11.11.1111 date: 11.11.1111
test1: this **is really** a test
test2: 'this **is another** test'
test3: |
<h1>First</h1>
<p>Here is some text with <em>emphasis</em> to see.
... ...
\renewcommand{\familydefault}{\sfdefault}
$if(is-de)$ $if(is-de)$
# Teilnahmebescheinigung \medskip
## $participant$ \begin{huge}\sffamily\textbf{Teilnahmebescheinigung}\end{huge}
\vspace{\fill}
# $participant$ {-}
$if(fra-number)$ $if(fra-number)$
### $fra-number$ $fra-department$ ## $fra-number$ $fra-department$ {-}
$endif$ $endif$
$if(company)$ $if(company)$
### $company$ ## $company$ {-}
$endif$ $endif$
hat
Hat
$if(course-begin)$ $if(course-begin)$
von $course-begin$ bis $course-end$ von $course-begin$ bis $course-end$
$endif$ $endif$
an der Veranstaltung an der Veranstaltung
\centerline{\sffamily\LARGE{$course-name$}}
## $course-name$
der Fahrerausbildung der Fraport AG teilgenommen. der Fahrerausbildung der Fraport AG teilgenommen.
$if(course-content)$ \vspace{\fill}
### Inhalte: \vspace{\fill}
$if(course-content)$
## Inhalte: {-}
%%%course-content%%%
$course-content$
$endif$ $endif$
\vspace{\fill}
\vspace{\fill}
Mit Aushändigung der Teilnahmebescheinigung wird der erfolgreiche Abschluss des Kurses bestätigt. Mit Aushändigung der Teilnahmebescheinigung wird der erfolgreiche Abschluss des Kurses bestätigt.
Dieses Zertifikat wurde maschinell erstellt. Dieses Zertifikat wurde maschinell erstellt.
\medskip
Frankfurt am Main, $date$ Frankfurt am Main, $date$
Fraport College Fraport College
\vspace{\fill}
\vspace{\fill}
\vspace{\fill}
\vspace{\fill}
\vspace{\fill}
<!-- deutsche version --> <!-- deutsche version -->
$else$ $else$

View File

@ -59,6 +59,7 @@ $endif$
% if luatex or xetex % if luatex or xetex
\usepackage{fontspec} \usepackage{fontspec}
\setmonofont{DejaVu Sans Mono} \setmonofont{DejaVu Sans Mono}
%\renewcommand{\familydefault}{\sfdefault}
\fi \fi
$if(mathspec)$ $if(mathspec)$
@ -96,6 +97,8 @@ $endif$
\providecommand{\tightlist}{% \providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\pagestyle{empty}
\begin{document}% \begin{document}%
$if(apc-ident)$ $if(apc-ident)$
\begin{textblock}{200}(5,5)%hpos,vpos \begin{textblock}{200}(5,5)%hpos,vpos

View File

@ -942,11 +942,11 @@ fillDb = do
, courseTerm = tk , courseTerm = tk
, courseSchool = avn , courseSchool = avn
, courseCapacity = capacity , courseCapacity = capacity
, courseVisibleFrom = jtt TermDayStart 0 Nothing toMidnight , courseVisibleFrom = jtt TermDayStart 1 Nothing toMidnight
, courseVisibleTo = jtt TermDayEnd 0 Nothing beforeMidnight , courseVisibleTo = jtt TermDayEnd 10 Nothing beforeMidnight
, courseRegisterFrom = jtt TermDayStart 0 Nothing toMidnight , courseRegisterFrom = jtt TermDayLectureStart 0 Nothing toMidnight
, courseRegisterTo = jtt TermDayLectureStart (-1) Nothing toMidnight , courseRegisterTo = jtt TermDayLectureStart 1 Nothing toMidnight
, courseDeregisterUntil = jtt TermDayLectureStart (-5) (Just Monday) toMidnight , courseDeregisterUntil = jtt TermDayLectureStart 5 (Just Monday) toMidnight
, courseRegisterSecret = Nothing , courseRegisterSecret = Nothing
, courseMaterialFree = True , courseMaterialFree = True
} }