chore(letter): improve certificate interpolation and styling
This commit is contained in:
parent
db0eadc746
commit
879b8a72be
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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 =
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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$
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user