diff --git a/nix/docker/default.nix b/nix/docker/default.nix index cc8897469..8252a192b 100644 --- a/nix/docker/default.nix +++ b/nix/docker/default.nix @@ -26,7 +26,7 @@ let cups # needed for interface with print center #texlive.combined.scheme-medium # too large for container in LMU build environment. (texlive.combine { - inherit (texlive) scheme-basic xcolor + inherit (texlive) scheme-basic xcolor "scrlttr2" # lualatex luatexbase unicode-math lualatex-math selnolig ; diff --git a/package.yaml b/package.yaml index 90563c088..4f1b83ff8 100644 --- a/package.yaml +++ b/package.yaml @@ -145,6 +145,7 @@ dependencies: - rfc5051 - unidecode - pandoc + - pandoc-types - token-bucket - async - pointedlist diff --git a/shell.nix b/shell.nix index f34fe2909..8c4467c71 100644 --- a/shell.nix +++ b/shell.nix @@ -74,14 +74,12 @@ in pkgs.mkShell { ++ (with pkgs; [ nodejs-14_x postgresql_12 openldap google-chrome exiftool memcached minio minio-client gup skopeo - # texlive.combined.scheme-medium + texlive.combined.scheme-medium # texlive.combined.scheme-small - (texlive.combine { - inherit (texlive) scheme-basic xcolor - # lualatex - luatexbase unicode-math lualatex-math selnolig - ; - }) + #(texlive.combine { + # inherit (texlive) scheme-basic xcolor scrlttr2 luatexbase unicode-math lualatex-math selnolig; + # ERROR: attribute 'scrlttr2' missing - gleicher Fehler kommt bei ausgedachten Namen, auch ohne Zahl am Ende + #}) ] ) ++ (with pkgs.haskellPackages; [ stack yesod-bin hlint cabal-install weeder profiteur ]); diff --git a/src/Handler/Admin/Test.hs b/src/Handler/Admin/Test.hs index 4c9695be0..7b7798f1e 100644 --- a/src/Handler/Admin/Test.hs +++ b/src/Handler/Admin/Test.hs @@ -10,6 +10,7 @@ import Jobs import Data.Char (isDigit) import qualified Data.Text as Text +import qualified Data.Text.IO as Text import qualified Data.ByteString.Lazy as L import qualified Data.Set as Set @@ -17,7 +18,7 @@ import qualified Data.Map as Map import qualified Text.Pandoc as P import qualified Text.Pandoc.PDF as P --- import qualified Text.Pandoc.Builder as P +import qualified Text.Pandoc.Builder as P import Handler.Admin.Test.Download (testDownload) @@ -239,7 +240,7 @@ postAdminTestR = do

#{tshow res} |] - + i18nIdent <- newIdent let i18nForm' = wrapForm i18nWidget FormSettings { formMethod = POST @@ -276,22 +277,31 @@ postAdminTestR = do getAdminTestPdfR :: Handler TypedContent getAdminTestPdfR = do - -- let -- typePDF = "application/pdf" :: ContentType - -- typePDF = Settings.Mime.mimeLookup "pdfdemo.pdf" - content <- liftIO . P.runIO $ do - tmpl <- P.compileDefaultTemplate "latex" - let - md = "# Hello \n\n This is some *more* Text." :: Text - texopts = [] - writeropts = def { P.writerTemplate = Just tmpl } - doc <- P.readMarkdown def md - -- P.makePDF "pdflatex" texopts P.writeLaTeX writeropts doc -- xcolor.sty not found - P.makePDF "lualatex" texopts P.writeLaTeX writeropts doc -- unicode-math.sty not found - case content of - Right (Right bs) -> do - liftIO $ L.writeFile "/tmp/generated.pdf" bs - now <- liftIO getCurrentTime - sendByteStringAsFile "demoPDF.pdf" (L.toStrict bs) now - -- sendResponse (typePDF, toContent bs) - Right (Left err) -> sendResponseStatus internalServerError500 $ tshow err - Left err -> sendResponseStatus internalServerError500 $ P.renderError err \ No newline at end of file + templates <- liftIO $ do + letter_md <- Text.readFile "templates/letter/fraport_renewal.md" + letter_tp <- P.compileTemplate "" letter_md + din5008 <- Text.readFile "templates/letter/din5008.latex" >>= P.compileTemplate "" + now <- getCurrentTime + return (now, letter_md, letter_tp, din5008) + case templates of + (_,_,Left err,_) -> sendResponseStatus internalServerError500 $ tshow err + (_,_,_,Left err) -> sendResponseStatus internalServerError500 $ tshow err + (now, md, Right templ, Right latex) -> do + content <- liftIO . P.runIO $ do + let texopts = [] + readeropts = def { P.readerExtensions = P.pandocExtensions } + writeropts1 = def { P.writerTemplate = Just templ } + writeropts2 = def { P.writerTemplate = Just latex } + -- https://github.com/jgm/pandoc/issues/1950 + -- using markdown as a template for itself for interpolation: + doc1 <- P.readMarkdown readeropts md + doc2 <- P.writeMarkdown writeropts1 doc1 + doc3 <- P.readMarkdown readeropts doc2 + P.makePDF "pdflatex" texopts P.writeLaTeX writeropts2 $ + P.setDate (P.text . tshow $ utctDay now) doc3 + case content of + Right (Right bs) -> do + liftIO $ L.writeFile "/tmp/generated.pdf" bs + sendByteStringAsFile "demoPDF.pdf" (L.toStrict bs) now + Right (Left err) -> sendResponseStatus internalServerError500 $ tshow err + Left err -> sendResponseStatus internalServerError500 $ P.renderError err diff --git a/templates/letter/din5008.latex b/templates/letter/din5008.latex new file mode 100644 index 000000000..9af7f1941 --- /dev/null +++ b/templates/letter/din5008.latex @@ -0,0 +1,98 @@ +%Based upon https://github.com/benedictdudel/pandoc-letter-din5008 +\documentclass[ + foldmarks=BTm, % show foldmarks top, middle, bottom + foldmarks=false, % don't print foldmarks + fromalign=left, % letter head on the right + fromphone=true, % show phone number + fromemail=true, % show email + fromlogo=false, % don't show logo in letter head + version=last % latest version of KOMA letter + pagenumber=botright % show pagenumbers on bottom right +]{scrlttr2} + +\usepackage[ngerman]{babel} +\usepackage{iftex} +\ifPDFTeX + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex +$if(mathspec)$ + \ifXeTeX + \usepackage{mathspec} + \else + \usepackage{unicode-math} + \fi +$else$ + \usepackage{unicode-math} +$endif$ + +\usepackage{parskip} + +\usepackage{graphics} + +\usepackage{booktabs} +\usepackage{longtable} + +\usepackage[right]{eurosym} + +\usepackage[hyphens]{url} +\usepackage{enumitem} + +\makeatletter + \setlength{\@tempskipa}{-1.2cm}% + \@addtoplength{toaddrheight}{\@tempskipa} +\makeatother + +\setlength{\oddsidemargin}{\useplength{toaddrhpos}} +\addtolength{\oddsidemargin}{-1in} +\setlength{\textwidth}{\useplength{firstheadwidth}} + +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} + +\begin{document} + \setkomavar{fromname}{$author$} + \renewcommand*{\raggedsignature}{\raggedright} + \setkomavar{fromaddress}{ + $for(return-address)$ + $return-address$$sep$\\ + $endfor$ + } + \setkomavar{fromphone}{$phone$} + \setkomavar{fromemail}{$email$} + \setkomavar{signature}{$author$} + + \setkomavar{date}{$date$} + \setkomavar{place}{$place$} + + \setkomavar{subject}{$subject$} + + \begin{letter}{% + $for(address)$ + $address$$sep$\\ + $endfor$ + } + + \opening{$opening$} + + This paragraph is fixed within the template. + Not sure if this is the way to go though. + + \begin{description}[leftmargin=!,labelwidth=1.5cm,labelindent=1cm] + \item[Login] $login$ + \item[Pin] $pin$ + \end{description} + + $body$ + + \closing{$closing$} + + \ps $postskriptum$ + + $if(encludes)$ + \setkomavar*{enclseparator}{Anlage} + \encl{$encludes$} + $endif$ + \end{letter} +\end{document} diff --git a/templates/letter/fraport_renewal.md b/templates/letter/fraport_renewal.md new file mode 100644 index 000000000..9769aaea7 --- /dev/null +++ b/templates/letter/fraport_renewal.md @@ -0,0 +1,58 @@ +--- +### Metadaten, welche hier eingestellt werden: +# Absender +subject: Verlängerung Vorfeldführerschein +author: Fraport AG - Fahrerausbildung (AVN-AR) +phone: +49 69 690-30306 +email: fahrerausbildung@fraport.de +place: Frankfurt/Main +return-address: + - 60547 Frankfurt +opening: Sehr geehrte Damen und Herren, +closing: | + Mit freundlichen Grüßen, + Ihre Fahrerausbildung. +encludes: + +### Metadaten, welche automatisch ersetzt werden: +date: 11.11.1111 +lang: de-de +is-de: NULL +lms-login: 123456 +lms-pin: abcdef +# Emfpänger +name: E. M. Pfänger +address: + - Musterfirma GmbH + - E. M. Pfänger + - Musterstraße 11 + - 12345 Musterstadt +... + +die Gültigkeit Ihres Vorfeldführerscheines läuft demnächst ab. +Durch die erfolgreiche Teilnahme an einem E-Lernen können Sie +die Gültigkeit um 2 Jahre verlängern. Verwenden Sie dazu folgende +Login-Daten. + +URL + + : + +Name: + + : $name$ + +Login + + : $login$ + +Pin + + : $pin$ + + +Sobald die Frist abgelaufen ist, muss zur Wiedererlangung des Vorfeldführerscheins +erneut der Grundkurs bei der Fahrerausbildung absolviert werden. + + +Bei Fragen können Sie sich gerne an das Team der Fahrerausbildung wenden. diff --git a/templates/letter/fraport_renewal_template.md b/templates/letter/fraport_renewal_template.md new file mode 100644 index 000000000..e7a18f956 --- /dev/null +++ b/templates/letter/fraport_renewal_template.md @@ -0,0 +1,91 @@ +--- +### Metadaten, welche hier eingestellt werden: +# Absender +subject: Verlängerung Vorfeldführerschein +author: Fraport AG - Fahrerausbildung (AVN-AR) +phone: +49 69 690-30306 +email: fahrerausbildung@fraport.de +place: Frankfurt/Main +return-address: + - 60547 Frankfurt +opening: Sehr geehrte Damen und Herren, +closing: | + Mit freundlichen Grüßen, + Ihre Fahrerausbildung. +encludes: null + +### Metadaten, welche automatisch ersetzt werden: +date: 11.11.1111 +lang: de-de +is-de: NULL +lms-login: 123456 +lms-pin: abcdef +# Emfpänger +name: E. M. Pfänger +address: + - Musterfirma GmbH + - E. M. Pfänger + - Musterstraße 11 + - 12345 Musterstadt +... +$if(is-de)$ + +[comment]: <> (This is a comment, it will not be included) +die Gültigkeit Ihres Vorfeldführerscheines läuft demnächst ab. +Durch die erfolgreiche Teilnahme an einem E-Lernen können Sie +die Gültigkeit um 2 Jahre verlängern. Verwenden Sie dazu folgende +Login-Daten. + +URL + + : + +Name: + + : $name$ + +Login + + : $login$ + +Pin + + : $pin$ + + +Sobald die Frist abgelaufen ist, muss zur Wiedererlangung des Vorfeldführerscheins +erneut der Grundkurs bei der Fahrerausbildung absolviert werden. + + +Bei Fragen können Sie sich gerne an das Team der Fahrerausbildung wenden. +$else$ + +your apron diving licence is about to expire soon. +You may renew your apron driving licence by two years through successfully +completing an e-learning course. Please use the following login data. + +URL + + : + +Name: + + : $name$ + +Login + + : $login$ + +Pin + + : $pin$ + + +Should your apron driving licence expire before completing this +e-learning course, then a renewal requires your full participation +of the basic training course again. + + +Please do not hesitate to contact the Fraport driving school team, if you need any assistance. + +$endif$ diff --git a/templates/generic_template.latex b/templates/letter/generic_template.latex similarity index 100% rename from templates/generic_template.latex rename to templates/letter/generic_template.latex