From 9451d90a9e00d08a2a7d169c4674d99ff1018ee9 Mon Sep 17 00:00:00 2001 From: Steffen Date: Thu, 23 May 2024 17:08:30 +0200 Subject: [PATCH 1/2] fix(avs): company update checks uniques and ignores those updates if necessary --- src/Handler/Utils/Avs.hs | 36 ++++++++++++++++++++---------------- src/Utils/DB.hs | 26 +++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/Handler/Utils/Avs.hs b/src/Handler/Utils/Avs.hs index 9f4951f49..becae74c6 100644 --- a/src/Handler/Utils/Avs.hs +++ b/src/Handler/Utils/Avs.hs @@ -565,16 +565,16 @@ getAvsCompany afi = in firstJustM $ bcons (compAvsId > 0) ( getBy $ UniqueCompanyAvsId compAvsId ) - [ getEntity $ CompanyKey compShorthand - , getBy $ UniqueCompanyName compName + [ getBy $ UniqueCompanyName compName + , getEntity $ CompanyKey compShorthand ] -- | insert a company from AVS firm info or update an existing one based on previous values upsertAvsCompany :: AvsFirmInfo -> Maybe AvsFirmInfo -> DB (Entity Company) upsertAvsCompany newAvsFirmInfo mbOldAvsFirmInfo = do - mbFirmEnt <- getAvsCompany newAvsFirmInfo + mbFirmEnt <- getAvsCompany newAvsFirmInfo -- primarily by AvsId, then Shorthand, then name case (mbFirmEnt, mbOldAvsFirmInfo) of - (Nothing, _) -> do -- insert new company + (Nothing, _) -> do -- insert new company, neither AvsId, Shorthand or Name are known to exist let upd = flip updateRecord newAvsFirmInfo dmy = Company -- mostly dummy, values are actually prodcued through firmInfo2company below for consistency { companyName = newAvsFirmInfo ^. _avsFirmFirm . from _CI @@ -583,32 +583,36 @@ upsertAvsCompany newAvsFirmInfo mbOldAvsFirmInfo = do , companyPrefersPostal = True , companyPostAddress = newAvsFirmInfo ^. _avsFirmPostAddress , companyEmail = newAvsFirmInfo ^? _avsFirmPrimaryEmail . _Just . from _CI - } - newCmp <- insertEntity $ foldl' upd dmy $ firmInfo2key : firmInfo2company + } + newCmp <- insertEntity $ foldl' upd dmy $ firmInfo2key : firmInfo2companyUniques <> firmInfo2company reportAdminProblem $ AdminProblemNewCompany $ entityKey newCmp return newCmp (Just Entity{entityKey=firmid, entityVal=firm}, oldAvsFirmInfo) -> do -- possibly update existing company, if isJust oldAvsFirmInfo and changed occurred - let cmp_ups = mapMaybe (mkUpdate' firm newAvsFirmInfo oldAvsFirmInfo) firmInfo2company - key_ups = mkUpdate' firm newAvsFirmInfo oldAvsFirmInfo firmInfo2key - res_cmp <- updateGetEntity firmid cmp_ups + let cmp_ups = mapMaybe (mkUpdate' firm newAvsFirmInfo oldAvsFirmInfo) firmInfo2company + key_ups = mkUpdate' firm newAvsFirmInfo oldAvsFirmInfo firmInfo2key + uniq_ups <- maybeMapM (mkUpdateCheckUnique' firm newAvsFirmInfo oldAvsFirmInfo) firmInfo2companyUniques + res_cmp <- updateGetEntity firmid $ cmp_ups <> uniq_ups case key_ups of Nothing -> return res_cmp Just key_up -> do - let uniq_cmp = UniqueCompanyAvsId $ res_cmp ^. _entityVal . _companyAvsId + let compId = res_cmp ^. _entityVal . _companyAvsId + uniq_cmp = if compId > 0 then UniqueCompanyAvsId compId + else UniqueCompanyName $ res_cmp ^. _entityVal . _companyName updateBy uniq_cmp [key_up] -- this is ok, since we have OnUpdateCascade on all CompanyId entries maybeM (return res_cmp) return $ getBy uniq_cmp - where - firmInfo2key = + firmInfo2key = CheckUpdate CompanyShorthand $ _avsFirmAbbreviation . from _CI -- Updating primary key works in principle thanks to OnUpdateCascade, but fails due to update get + firmInfo2companyUniques = + [ CheckUpdate CompanyName $ _avsFirmFirm . from _CI -- Updating unique turned out to be problematic, who would have thought! + , CheckUpdate CompanyAvsId _avsFirmFirmNo -- Updating unique turned out to be problematic, who would have thought! + ] firmInfo2company = - [ CheckUpdate CompanyName $ _avsFirmFirm . from _CI - , CheckUpdate CompanyAvsId _avsFirmFirmNo -- Updating unique might be problematic - -- , CheckUpdate CompanyPrefersPostal _avsFirmPrefersPostal -- Guessing here is not useful, since postal preference is ignored anyway when there is only one option available - , CheckUpdate CompanyPostAddress _avsFirmPostAddress + [ CheckUpdate CompanyPostAddress _avsFirmPostAddress , CheckUpdate CompanyEmail $ _avsFirmPrimaryEmail . _Just . from _CI . re _Just + -- , CheckUpdate CompanyPrefersPostal _avsFirmPrefersPostal -- Guessing here is not useful, since postal preference is ignored anyway when there is only one option available ] diff --git a/src/Utils/DB.hs b/src/Utils/DB.hs index 6420dccc2..e624ef497 100644 --- a/src/Utils/DB.hs +++ b/src/Utils/DB.hs @@ -364,4 +364,28 @@ updateRecord :: PersistEntity record => record -> iraw -> CheckUpdate record ira updateRecord ent new (CheckUpdate up l) = let newval = new ^. l lensRec = fieldLensVal up - in ent & lensRec .~ newval \ No newline at end of file + in ent & lensRec .~ newval + +-- | like mkUpdate' but only returns the update if the new value would be unique +-- mkUpdateCheckUnique' :: PersistEntity record => record -> iraw -> Maybe iraw -> CheckUpdate record iraw -> DB (Maybe (Update record)) + +mkUpdateCheckUnique' :: (MonadIO m, PersistQueryRead backend, PersistEntity record, PersistEntityBackend record ~ BaseBackend backend) + => record -> a -> Maybe a -> CheckUpdate record a -> ReaderT backend m (Maybe (Update record)) + +mkUpdateCheckUnique' ent new Nothing (CheckUpdate up l) + | let newval = new ^. l + , let entval = ent ^. fieldLensVal up + , newval /= entval + = do + newval_exists <- exists [up ==. newval] + return $ toMaybe (not newval_exists) (up =. newval) +mkUpdateCheckUnique' ent new (Just old) (CheckUpdate up l) + | let newval = new ^. l + , let oldval = old ^. l + , let entval = ent ^. fieldLensVal up + , newval /= entval + , oldval == entval + = do + newval_exists <- exists [up ==. newval] + return $ toMaybe (not newval_exists) (up =. newval) +mkUpdateCheckUnique' _ _ _ _ = return Nothing From 9814712c61d7b1b1c81070e4cdc8016952052854 Mon Sep 17 00:00:00 2001 From: Steffen Date: Thu, 23 May 2024 18:18:13 +0200 Subject: [PATCH 2/2] refactor(letter): first test version of new letters --- src/Handler/PrintCenter.hs | 5 +- src/Utils/Print.hs | 4 +- src/Utils/Print/Letters.hs | 4 + src/Utils/Print/RenewQualification.hs | 38 +- src/Utils/Print/RenewQualificationF.hs | 100 + templates/letter/din5008with_pin_new.latex | 206 ++ templates/letter/fraport_renewal.md | 2 + templates/letter/fraport_renewal_new.md | 130 ++ uniworx.cabal.bak | 2137 -------------------- 9 files changed, 470 insertions(+), 2156 deletions(-) create mode 100644 src/Utils/Print/RenewQualificationF.hs create mode 100644 templates/letter/din5008with_pin_new.latex create mode 100644 templates/letter/fraport_renewal_new.md delete mode 100644 uniworx.cabal.bak diff --git a/src/Handler/PrintCenter.hs b/src/Handler/PrintCenter.hs index 084cc74d6..6616ee91b 100644 --- a/src/Handler/PrintCenter.hs +++ b/src/Handler/PrintCenter.hs @@ -25,7 +25,8 @@ import qualified Database.Esqueleto.Legacy as E import qualified Database.Esqueleto.Utils as E import Database.Esqueleto.Utils.TH -import Utils.Print +import Utils.Print hiding (LetterRenewQualificationF) +import Utils.Print.RenewQualification import qualified Data.Aeson as Aeson -- import qualified Data.Text as Text @@ -82,7 +83,7 @@ lrqf2letter LRQF{..} usr <- getUser lrqfUser rcvr <- mapM getUser lrqfSuper now <- liftIO getCurrentTime - let letter = LetterRenewQualificationF + let letter = LetterRenewQualification { lmsLogin = lrqfIdent , lmsPin = lrqfPin , qualHolderID = usr ^. _entityKey diff --git a/src/Utils/Print.hs b/src/Utils/Print.hs index 6f3f19f0a..9b6bea074 100644 --- a/src/Utils/Print.hs +++ b/src/Utils/Print.hs @@ -23,6 +23,7 @@ module Utils.Print -- , MDLetter , SomeLetter(..) , LetterRenewQualificationF(..) + -- , LetterRenewQualification(..) , LetterExpireQualification(..) -- , LetterCourseCertificate() , makeCourseCertificates @@ -59,7 +60,8 @@ import Jobs.Handler.SendNotification.Utils import Utils.Print.Instances () import Utils.Print.Letters import Utils.Print.SomeLetter -import Utils.Print.RenewQualification +import Utils.Print.RenewQualificationF +import Utils.Print.RenewQualification() import Utils.Print.ExpireQualification import Utils.Print.CourseCertificate diff --git a/src/Utils/Print/Letters.hs b/src/Utils/Print/Letters.hs index 0718a294b..58715bd1b 100644 --- a/src/Utils/Print/Letters.hs +++ b/src/Utils/Print/Letters.hs @@ -129,6 +129,7 @@ defWriterOpts t = def { P.writerExtensions = P.pandocExtensions, P.writerTemplat data LetterKind = Din5008 -- scrlttr2: Standard postal letter with address field, expects peprinted FraportLogo | PinLetter -- Like Din5008, but for special paper with a protected pin field + | PinNew -- New Variant for Pin Letters for R. TODO: Remove/rename/replace PinLetter | Plain -- scrartcl: Empty, expects empty paper with no preprints | PlainLogo -- Like plain, but expects to be printed on paper with Logo -- | Logo -- Like plain, but prints Fraport Logo in the upper right corner @@ -139,15 +140,18 @@ templateLatex = let tDin5008 = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/din5008.latex") tPinLetter = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/din5008with_pin.latex") + tPinNew = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/din5008with_pin_new.latex") tPlain = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/plain_article.latex") in \case PinLetter -> tPinLetter + PinNew -> tPinNew Din5008 -> tDin5008 PlainLogo -> tPlain Plain -> tPlain paperKind :: LetterKind -> Text -- Muss genau 5 Zeichen haben! paperKind PinLetter = "a4pin" -- Pin-Brief +paperKind PinNew = "a4pin" -- Pin-Brief paperKind Plain = "a4wht" -- Ohne Logo paperKind Din5008 = "a4log" -- Mit Logo paperKind PlainLogo = "a4log" diff --git a/src/Utils/Print/RenewQualification.hs b/src/Utils/Print/RenewQualification.hs index db417b9b6..ae9692541 100644 --- a/src/Utils/Print/RenewQualification.hs +++ b/src/Utils/Print/RenewQualification.hs @@ -19,7 +19,7 @@ import Utils.Print.Letters import Handler.Utils.Widgets (nameHtml) -- , nameHtml') -data LetterRenewQualificationF = LetterRenewQualificationF +data LetterRenewQualification = LetterRenewQualification { lmsLogin :: LmsIdent , lmsPin :: Text , qualHolderID :: UserId @@ -37,30 +37,31 @@ data LetterRenewQualificationF = LetterRenewQualificationF -- this datatype is specific to this letter only, and just to avoid code duplication for derived data or constants -data LetterRenewQualificationFData = LetterRenewQualificationFData { lmsUrl, lmsUrlLogin, lmsIdent :: Text } +data LetterRenewQualificationData = LetterRenewQualificationData { lmsUrl, lmsUrlLogin, lmsIdent :: Text } deriving (Eq, Show) -letterRenewalQualificationFData :: LetterRenewQualificationF -> LetterRenewQualificationFData -letterRenewalQualificationFData LetterRenewQualificationF{lmsLogin} = LetterRenewQualificationFData{..} +letterRenewalQualificationFData :: LetterRenewQualification -> LetterRenewQualificationData +letterRenewalQualificationFData LetterRenewQualification{lmsLogin} = LetterRenewQualificationData{..} where - lmsUrl = "https://drive.fraport.de" - lmsUrlLogin = lmsUrl <> "/?login=" <> lmsIdent + lmsUrl = "drive.fraport.de" + lmsUrlLogin = "https://" <> lmsUrl <> "/?login=" <> lmsIdent lmsIdent = getLmsIdent lmsLogin -instance MDLetter LetterRenewQualificationF where +instance MDLetter LetterRenewQualification where encryptPDFfor _ = PasswordUnderling - getLetterKind _ = PinLetter + getLetterKind _ = PinNew getLetterEnvelope _ = 'f' -- maybe 'q' (Char.toLower . fst) $ Text.uncons (qualShort l) - getTemplate _ = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/fraport_renewal.md") + getTemplate _ = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/fraport_renewal_new.md") getMailSubject l = SomeMessage $ MsgMailSubjectQualificationRenewal $ qualShort l - getMailBody l@LetterRenewQualificationF{..} = Just $ \DateTimeFormatter{ format } -> - let LetterRenewQualificationFData{..} = letterRenewalQualificationFData l + getMailBody l@LetterRenewQualification{..} = Just $ \DateTimeFormatter{ format } -> + let LetterRenewQualificationData{..} = letterRenewalQualificationFData l in $(ihamletFile "templates/mail/body/qualificationRenewal.hamlet") - letterMeta l@LetterRenewQualificationF{..} DateTimeFormatter{ format } lang Entity{entityKey=rcvrId, entityVal=User{userDisplayName}} = - let LetterRenewQualificationFData{..} = letterRenewalQualificationFData l + letterMeta l@LetterRenewQualification{..} DateTimeFormatter{ format } lang Entity{entityKey=rcvrId, entityVal=User{userDisplayName}} = + let LetterRenewQualificationData{..} = letterRenewalQualificationFData l isSupervised = rcvrId /= qualHolderID + newExpire = addDays (fromIntegral $ fromMaybe 0 qualDuration) qualExpiry in mkMeta $ guardMonoid isSupervised [ toMeta "supervisor" userDisplayName @@ -79,10 +80,15 @@ instance MDLetter LetterRenewQualificationF where , mbMeta "validduration" (show <$> qualDuration) , toMeta "url-text" lmsUrl , toMeta "url" lmsUrlLogin + , toMeta "notice" [ [st|Ein Zertifikat für Ihre Unterlagen kann nur direkt nach dem erfolgreichen Test erstellt werden. Das Zertifikat wird auf die Benutzerkennung ausgestellt. Zusammen mit diesem Schreiben können Sie Ihrem Arbeitgeber zeigen, dass Sie bestanden haben. Bei erfolgreichem Abschluss der Schulung verlängert sich das Ablaufdatum automatisch auf den #{format SelFormatDate newExpire}. Wir empfehlen die Schulung zeitnah durchzuführen. Sollte bis zum Ablaufdatum das E-Learning nicht erfolgreich abgeschlossen sein oder der Test nach 5 Versuchen nicht bestanden werden, muss zur Wiedererlangung der Fahrberechtigung „#{qualShort}“ ein Grundkurs #{qualName} bei der Fahrerausbildung absolviert werden.|] + , "Benötigen Sie die Fahrberechtigung nicht mehr, informieren Sie bitte die Fahrerausbildung."::Text + , "(Please contact us if you prefer letters in English.)" + ] + , toMeta "de-subject" [st|Verlängerung Fahrberechtigung „#{qualShort}“ (#{qualName})|] + , toMeta "en-subject" [st|Renewal of driving licence „#{qualShort}“ (#{qualName})|] + ] -- TODO use [st|some simple text with interpolation|] - ] - - getPJId LetterRenewQualificationF{..} = + getPJId LetterRenewQualification{..} = PrintJobIdentification { pjiName = bool "Renewal" "Renewal Reminder" isReminder , pjiApcAcknowledge = "lms-" <> getLmsIdent lmsLogin diff --git a/src/Utils/Print/RenewQualificationF.hs b/src/Utils/Print/RenewQualificationF.hs new file mode 100644 index 000000000..b2c5338b8 --- /dev/null +++ b/src/Utils/Print/RenewQualificationF.hs @@ -0,0 +1,100 @@ +-- SPDX-FileCopyrightText: 2023 Steffen Jost +-- +-- SPDX-License-Identifier: AGPL-3.0-or-later + +{-# OPTIONS_GHC -fno-warn-unused-top-binds #-} + +module Utils.Print.RenewQualificationF 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 LetterRenewQualificationF = LetterRenewQualificationF + { lmsLogin :: LmsIdent + , lmsPin :: Text + , qualHolderID :: UserId + , qualHolderDN :: UserDisplayName + , qualHolderSN :: UserSurname + , qualExpiry :: Day + , qualId :: QualificationId + , qualName :: Text + , qualShort :: Text + , qualSchool :: SchoolId + , qualDuration :: Maybe Int + , isReminder :: Bool + } + deriving (Eq, Show) + + +-- this datatype is specific to this letter only, and just 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 + encryptPDFfor _ = PasswordUnderling + getLetterKind _ = PinLetter + getLetterEnvelope _ = 'f' -- maybe 'q' (Char.toLower . fst) $ Text.uncons (qualShort l) + getTemplate _ = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/fraport_renewal.md") + getMailSubject l = SomeMessage $ MsgMailSubjectQualificationRenewal $ qualShort l + getMailBody l@LetterRenewQualificationF{..} = Just $ \DateTimeFormatter{ format } -> + let LetterRenewQualificationFData{..} = letterRenewalQualificationFData l + in $(ihamletFile "templates/mail/body/qualificationRenewal.hamlet") + + letterMeta l@LetterRenewQualificationF{..} DateTimeFormatter{ format } lang Entity{entityKey=rcvrId, entityVal=User{userDisplayName}} = + let LetterRenewQualificationFData{..} = letterRenewalQualificationFData l + isSupervised = rcvrId /= qualHolderID + in mkMeta $ + guardMonoid isSupervised + [ toMeta "supervisor" userDisplayName + , toMeta "de-opening" ("Sehr geehrte Damen und Herren,"::Text) + , toMeta "en-opening" ("Dear Sir or Madam,"::Text) + ] <> + guardMonoid isReminder + [ toMeta "reminder" ("reminder"::Text) + ] <> + [ toMeta "lang" lang + , toMeta "login" lmsIdent + , toMeta "pin" lmsPin + , toMeta "examinee" qualHolderDN + , toMeta "subject-meta" qualHolderDN + , toMeta "expiry" (format SelFormatDate qualExpiry) + , mbMeta "validduration" (show <$> qualDuration) + , toMeta "url-text" lmsUrl + , toMeta "url" lmsUrlLogin + + ] + + getPJId LetterRenewQualificationF{..} = + PrintJobIdentification + { pjiName = bool "Renewal" "Renewal Reminder" isReminder + , pjiApcAcknowledge = "lms-" <> getLmsIdent lmsLogin + , pjiRecipient = Nothing -- to be filled later + , pjiSender = Nothing + , pjiCourse = Nothing + , pjiQualification = Just qualId + , pjiLmsUser = Just lmsLogin + , pjiFileName = "renew_" <> CI.original (unSchoolKey qualSchool) <> "-" <> qualShort <> "_" <> qualHolderSN + -- 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]) + } \ No newline at end of file diff --git a/templates/letter/din5008with_pin_new.latex b/templates/letter/din5008with_pin_new.latex new file mode 100644 index 000000000..83eaf63fd --- /dev/null +++ b/templates/letter/din5008with_pin_new.latex @@ -0,0 +1,206 @@ +%Based upon https://github.com/benedictdudel/pandoc-letter-din5008 +\documentclass[ + paper=A4, + 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 + firstfoot=false % first-page footer +]{scrlttr2} + +\PassOptionsToPackage{hyphens}{url} +\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} +\hypersetup{ +$if(subject-meta)$ + pdfsubject={$subject-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(lang)$ + pdflang={$lang$}, +$endif$ +$if(is-de)$ + $if(de-subject)$ + pdftitle={$de-subject$}, + $endif$ +$else$ + $if(en-subject)$ + pdftitle={$en-subject$}, + $endif$ +$endif$ +$if(apc-ident)$ + pdfkeywords={$apc-ident$}, +$endif$ +} +\usepackage{url} + +\usepackage{iftex} + +%\usepackage[ngerman]{babel} +$if(lang)$ +\ifLuaTeX +\usepackage[bidi=basic]{babel} +\else +\usepackage[bidi=default]{babel} +\fi +\babelprovide[main,import]{$babel-lang$} +$for(babel-otherlangs)$ +\babelprovide[import]{$babel-otherlangs$} +$endfor$ +% get rid of language-specific shorthands (see #6817): +\let\LanguageShortHands\languageshorthands +\def\languageshorthands#1{} +$endif$ + +\ifLuaTeX + \usepackage{selnolig} % disable illegal ligatures +\fi + +\usepackage[sfdefault]{roboto} + +\ifPDFTeX + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols + % \usepackage{DejaVuSansMono} % better monofont +\else + % if luatex or xetex + \usepackage{fontspec} + % \setmonofont{DejaVu Sans Mono} +\fi +\renewcommand{\familydefault}{\sfdefault} + +$if(mathspec)$ + \ifXeTeX + \usepackage{mathspec} + \else + \usepackage{unicode-math} + \fi +$else$ + \usepackage{unicode-math} +$endif$ + +%\usepackage[a4paper, bottom=8cm, top=3cm]{geometry} %%% THIS HAD NO EFFECT AT ALL + +\usepackage{parskip}% might be useful for pandoc tightlist + +\usepackage{graphics} +\usepackage{xcolor} + +\usepackage{booktabs} +\usepackage{longtable} + +\usepackage[right]{eurosym} + +\usepackage{enumitem} + +\makeatletter + \setplength{firstheadvpos}{1.8cm} + \setplength{toaddrvpos}{5.5cm} + \setlength{\@tempskipa}{-1.2cm}% + \@addtoplength{toaddrheight}{\@tempskipa} +\makeatother + +\setlength{\oddsidemargin}{\useplength{toaddrhpos}} +\addtolength{\oddsidemargin}{-1in} +\setlength{\textwidth}{\useplength{firstheadwidth}} + +\usepackage[absolute,quiet,overlay]{textpos}%,showboxes +\setlength{\TPHorizModule}{1mm} +\setlength{\TPVertModule}{1mm} + +\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$} + %if there is a handwritten signature + %\setkomavar{signature}{$author$} + %if there is no handwritten signature + \setkomavar{signature}{} + \setplength{sigbeforevskip}{-\baselineskip} + + \setkomavar{date}{$date$} + \setkomavar{place}{$place$} + + $if(is-de)$ + \setkomavar{subject}{$de-subject$} + $else$ + \setkomavar{subject}{$en-subject$} + $endif$ + + \begin{letter}{% + $for(address)$ + $address$$sep$\\ + $endfor$ + } + + $if(apc-ident)$ + \begin{textblock}{200}(5,5)%hpos,vpos + \textcolor{white!0}{$apc-ident$}% + \end{textblock}% + $endif$ + + $if(is-de)$ + \opening{$de-opening$} + $else$ + \opening{$en-opening$} + $endif$ + + \begin{textblock}{65}(84,232)%hpos,vpos + \textcolor{black!39}{ + \begin{labeling}{Password:}%Achtung! Die Position des Logins muss sprachunabhängig immer an der gleichen Position sein, sonst kannn die Rückmeldung der Druckerei den Ident nicht mehr identifizieren! + $if(is-de)$ + \item[Benutzer:] \texttt{$login$} + \item[Passwort:] \texttt{$pin$} + $else$ + \item[User:] \texttt{$login$} + \item[Password:] \texttt{$pin$} + $endif$ + \end{labeling} + ~} + \end{textblock} + + $body$ + + $if(is-de)$ + \closing{$de-closing$} + $else$ + \closing{$en-closing$} + $endif$ + + %\ps $postskriptum$ + + $if(encludes)$ + \setkomavar*{enclseparator}{Anlage} + \encl{$encludes$} + $endif$ + + $if(notice)$ + \begin{textblock}{170}(20,258)%hpos,vpos + \scriptsize + \textbf{Hinweise für den Schulungsteilnehmer:} + \newline + $for(notice)$ + $notice$ + $sep$\newline + $endfor$ + \end{textblock} + $endif$ + \end{letter} +\end{document} diff --git a/templates/letter/fraport_renewal.md b/templates/letter/fraport_renewal.md index 930370547..cf7ea0a5d 100644 --- a/templates/letter/fraport_renewal.md +++ b/templates/letter/fraport_renewal.md @@ -86,6 +86,8 @@ $else$ $endif$ Die Durchführung des Lernprogramms und des Abschlusstests dauert etwa 2,5h. +This is the new version + Fahrberechtigungsinhaber : $examinee$ diff --git a/templates/letter/fraport_renewal_new.md b/templates/letter/fraport_renewal_new.md new file mode 100644 index 000000000..e90db735b --- /dev/null +++ b/templates/letter/fraport_renewal_new.md @@ -0,0 +1,130 @@ +--- +### Metadaten, welche hier eingestellt werden: +# Absender +de-subject: 'Verlängerung Fahrberechtigung "F" (Vorfeldführerschein)' +en-subject: Renewal of apron driving license +author: Fraport AG - Fahrerausbildung (AVN-AR) +phone: +49 69 690-30306 +email: fahrerausbildung@fraport.de +place: Frankfurt am Main +return-address: + - 60547 Frankfurt +de-opening: Liebe Fahrberechtigungsinhaber, +en-opening: Dear driver, +de-closing: | + Mit freundlichen Grüßen, + Ihre Fraport Fahrerausbildung +en-closing: | + With kind regards, + Your Fraport Driver Training +encludes: +hyperrefoptions: hidelinks + +### Metadaten, welche automatisch ersetzt werden: +url-text: 'drive.fraport.de' +url: 'https://drive.fraport.de' +date: 11.11.1111 +expiry: 00.00.0000 +lang: de-de +is-de: true +login: 123456 +pin: abcdef +paper: pin +# Emfpänger +examinee: P. Rüfling +address: + - E. M. Pfänger + - Musterfirma GmbH + - Musterstraße 11 + - 12345 Musterstadt +... +$if(titleblock)$ +$titleblock$ + +$endif$ +$for(header-includes)$ +$header-includes$ + +$endfor$ +$for(include-before)$ +$include-before$ + +$endfor$ + +$if(is-de)$ + + + +um die Rollfeldfahrberechtigung von \textbf{$examinee$} zu erhalten, benötigen wir bis zum $date$ den Nachweis, dass die theoretische und praktische flughafenspezifische Rollfeld Recurrent Schulung der Fraport AG gemäß Verordnung der Europäische Union Nr. 139/2014 absolviert wurde. + +Die Online-Schulung der Fraport AG ist erreichbar unter folgendem Link: +[$url-text$]($url$) + +Der erforderliche Benutzername und das Passwort für die Fraport Online-Schulung finden Sie untenstehend. Die Weitergabe der persönlichen Benutzerdaten an Dritte ist untersagt. Ausschließlich Sie sind berechtigt, die Benutzerdaten an den Schulungsteilnehmer auszuhändigen. + +Für die Absolvierung der Schulungsmaßnahme werden 1-2 Stunden benötigt. Der Abschluss der Schulung wird automatisch an das System der Fahrerausbildung übermittelt. + +Nach erfolgreichem Abschluss der Online-Schulung muss \textbf{$examinee$} sich von Ihrer Firma zum praktischen Teil der Schulung einplanen lassen. Im Rahmen der 3--4-stündigen praktischen Auffrischung erfolgen Funkübungen sowie die Durchführung einer Übungsfahrt mit Prüfungscharakter im Start-/Landebahnsystem. + +$else$ + + +$if(reminder)$ + this is a last **reminder**: as of $date$, +$if(supervisor)$ + $examinee$ has +$else$ + you have +$endif$ + not yet completed the below detailed e‑learning. + The qualification will expire automatically, + if the e‑learning is not concluded in time! +$else$ +$if(supervisor)$ + the apron diving license of $examinee$ +$else$ + your apron diving license +$endif$ + is about to expire soon. +$endif$ +The validity will be extended +$if(validduration)$ + by $validduration$ months +$endif$ +by successfully participating in +an e‑learning. +$if(supervisor)$ + Supervisors are kindly requested to forward the login data + below confidentially to the examinee. +$else$ + Please use the login data from the protected area below. +$endif$ +Reserve 2.5h for the entire e-learning, including the exam. + +Examinee + + : $examinee$ + +Expiry + + : $expiry$ + +E-learning website + + : [$url-text$]($url$) + + +If the apron driving license expires before completing this e-learning, +$if(supervisor)$ + the examinee has to participate in a basic training course again to regain + to regain the apron driving licence. +$else$ + you have to participate in a basic training course again to regain + your apron driving licence. +$endif$ + + +Please contact the Fraport driving school team, if you need any assistance. +(Kontaktieren Sie uns bitte, wenn Sie zukünftige Briefe in deutscher Sprache bevorzugen.) + +$endif$ diff --git a/uniworx.cabal.bak b/uniworx.cabal.bak deleted file mode 100644 index 58d80a244..000000000 --- a/uniworx.cabal.bak +++ /dev/null @@ -1,2137 +0,0 @@ -cabal-version: 1.12 - --- This file has been generated from package.yaml by hpack version 0.35.0. --- --- see: https://github.com/sol/hpack - -name: uniworx -version: 27.4.58 -build-type: Simple -data-files: - testdata/AbgabeH10-1.hs - testdata/avs_json.hs - testdata/fradrive_f_results_2022051910.csv - testdata/fradrive_f_results_2022051910.csv.license - testdata/H10-2.hs - testdata/H10-3.hs - testdata/ProMo_Uebung10.pdf - testdata/ProMo_Uebung10.pdf.license - testdata/test.pdf - testdata/test.pdf.license - testdata/test_letters.hs - testdata/test_results.csv - testdata/test_results.csv.license - -flag dev - description: Turn on development settings, like auto-reload templates. - manual: False - default: False - -flag library-only - description: Build for use with "yesod devel" - manual: False - default: False - -flag pedantic - description: Be very pedantic about warnings and errors - manual: False - default: True - -library - exposed-modules: - Application - Audit - Audit.Types - Auth.Dummy - Auth.LDAP - Auth.LDAP.AD - Auth.PWHash - Colonnade.Instances - Control.Arrow.Instances - Control.Monad.Catch.Instances - Control.Monad.Trans.Except.Instances - Control.Monad.Trans.Memo.StateCache.Instances - Control.Monad.Trans.Random.Instances - Cron - Cron.Types - Crypto.Hash.Instances - Crypto.Random.Instances - CryptoID - CryptoID.Cached - CryptoID.TH - Data.Aeson.Types.Instances - Data.Bool.Instances - Data.CaseInsensitive.Instances - Data.CryptoID.Instances - Data.Encoding.Instances - Data.Fixed.Instances - Data.HashSet.Instances - Data.Maybe.Instances - Data.Monoid.Instances - Data.MonoTraversable.Instances - Data.MultiSet.Instances - Data.NonNull.Instances - Data.Scientific.Instances - Data.SemVer.Instances - Data.Set.Instances - Data.Sum.Instances - Data.Time.Calendar.Instances - Data.Time.Clock.Instances - Data.Time.Clock.Instances.TH - Data.Time.Format.Instances - Data.Time.LocalTime.Instances - Data.Universe.Instances.Reverse.Hashable - Data.Universe.Instances.Reverse.JSON - Data.Universe.Instances.Reverse.MonoTraversable - Data.Universe.Instances.Reverse.WithIndex - Data.Universe.TH - Data.UUID.Instances - Data.Void.Instances - Data.Word.Word24.Instances - Database.Esqueleto.Instances - Database.Esqueleto.Utils - Database.Esqueleto.Utils.TH - Database.Persist.Class.Instances - Database.Persist.Sql.Types.Instances - Database.Persist.TH.Directory - Database.Persist.Types.Instances - Foundation - Foundation.Authorization - Foundation.DB - Foundation.I18n - Foundation.I18n.TH - Foundation.Instances - Foundation.Instances.ButtonClass - Foundation.Navigation - Foundation.Routes - Foundation.Routes.Definitions - Foundation.Servant - Foundation.Servant.Types - Foundation.SiteLayout - Foundation.Type - Foundation.Types - Foundation.Yesod.Auth - Foundation.Yesod.ErrorHandler - Foundation.Yesod.Middleware - Foundation.Yesod.Persist - Foundation.Yesod.Session - Foundation.Yesod.StaticContent - Handler.Admin - Handler.Admin.Avs - Handler.Admin.Crontab - Handler.Admin.ErrorMessage - Handler.Admin.Ldap - Handler.Admin.Test - Handler.Admin.Test.Download - Handler.Admin.Tokens - Handler.ApiDocs - Handler.Course - Handler.Course.Communication - Handler.Course.Delete - Handler.Course.Edit - Handler.Course.Events - Handler.Course.Events.Delete - Handler.Course.Events.Edit - Handler.Course.Events.Form - Handler.Course.Events.New - Handler.Course.LecturerInvite - Handler.Course.List - Handler.Course.News - Handler.Course.News.Delete - Handler.Course.News.Download - Handler.Course.News.Edit - Handler.Course.News.Form - Handler.Course.News.New - Handler.Course.News.Show - Handler.Course.ParticipantInvite - Handler.Course.Register - Handler.Course.Show - Handler.Course.User - Handler.Course.Users - Handler.CryptoIDDispatch - Handler.Error - Handler.Exam - Handler.Exam.AddUser - Handler.Exam.AutoOccurrence - Handler.Exam.Correct - Handler.Exam.CorrectorInvite - Handler.Exam.Edit - Handler.Exam.Form - Handler.Exam.List - Handler.Exam.New - Handler.Exam.Register - Handler.Exam.RegistrationInvite - Handler.Exam.Show - Handler.Exam.Users - Handler.ExamOffice - Handler.ExamOffice.Course - Handler.ExamOffice.Exam - Handler.ExamOffice.Exams - Handler.ExamOffice.ExternalExam - Handler.ExamOffice.Fields - Handler.ExamOffice.Users - Handler.ExternalExam - Handler.ExternalExam.Correct - Handler.ExternalExam.Edit - Handler.ExternalExam.Form - Handler.ExternalExam.List - Handler.ExternalExam.New - Handler.ExternalExam.Show - Handler.ExternalExam.StaffInvite - Handler.ExternalExam.Users - Handler.Firm - Handler.Health - Handler.Health.Interface - Handler.Help - Handler.Info - Handler.Info.TH - Handler.LMS - Handler.LMS.Fake - Handler.LMS.Learners - Handler.LMS.Report - Handler.LMS.Users - Handler.Material - Handler.Metrics - Handler.News - Handler.Participants - Handler.PrintCenter - Handler.Profile - Handler.Qualification - Handler.SAP - Handler.School - Handler.Sheet - Handler.Sheet.CorrectorInvite - Handler.Sheet.Current - Handler.Sheet.Delete - Handler.Sheet.Download - Handler.Sheet.Edit - Handler.Sheet.Form - Handler.Sheet.List - Handler.Sheet.New - Handler.Sheet.PersonalisedFiles - Handler.Sheet.PersonalisedFiles.Meta - Handler.Sheet.PersonalisedFiles.Types - Handler.Sheet.Pseudonym - Handler.Sheet.Show - Handler.StorageKey - Handler.Submission - Handler.Submission.Assign - Handler.Submission.AuthorshipStatements - Handler.Submission.Correction - Handler.Submission.Create - Handler.Submission.Delete - Handler.Submission.Download - Handler.Submission.Grade - Handler.Submission.Helper - Handler.Submission.Helper.ArchiveTable - Handler.Submission.List - Handler.Submission.New - Handler.Submission.Show - Handler.Submission.SubmissionUserInvite - Handler.Submission.Upload - Handler.Swagger - Handler.SystemMessage - Handler.Term - Handler.Tutorial - Handler.Tutorial.Communication - Handler.Tutorial.Delete - Handler.Tutorial.Edit - Handler.Tutorial.Form - Handler.Tutorial.List - Handler.Tutorial.New - Handler.Tutorial.Register - Handler.Tutorial.TutorInvite - Handler.Tutorial.Users - Handler.Upload - Handler.Users - Handler.Users.Add - Handler.Utils - Handler.Utils.AuthorshipStatement - Handler.Utils.Avs - Handler.Utils.Communication - Handler.Utils.Company - Handler.Utils.Concurrent - Handler.Utils.ContentDisposition - Handler.Utils.Corrections - Handler.Utils.Course - Handler.Utils.Csv - Handler.Utils.Database - Handler.Utils.DateTime - Handler.Utils.Delete - Handler.Utils.Download - Handler.Utils.Exam - Handler.Utils.ExamOffice.Course - Handler.Utils.ExamOffice.Exam - Handler.Utils.ExamOffice.ExternalExam - Handler.Utils.ExternalExam - Handler.Utils.ExternalExam.Users - Handler.Utils.Files - Handler.Utils.Form - Handler.Utils.Form.MassInput - Handler.Utils.Form.MassInput.Liveliness - Handler.Utils.Form.MassInput.TH - Handler.Utils.Form.Occurrences - Handler.Utils.Form.Types - Handler.Utils.I18n - Handler.Utils.Invitations - Handler.Utils.LdapSystemFunctions - Handler.Utils.LMS - Handler.Utils.Mail - Handler.Utils.Memcached - Handler.Utils.Minio - Handler.Utils.News - Handler.Utils.Occurrences - Handler.Utils.Pandoc - Handler.Utils.Profile - Handler.Utils.Qualification - Handler.Utils.Random - Handler.Utils.Rating - Handler.Utils.Rating.Format - Handler.Utils.Rating.Format.Legacy - Handler.Utils.Routes - Handler.Utils.Sheet - Handler.Utils.SheetType - Handler.Utils.StudyFeatures - Handler.Utils.Submission - Handler.Utils.Table - Handler.Utils.Table.Cells - Handler.Utils.Table.Columns - Handler.Utils.Table.Pagination - Handler.Utils.Table.Pagination.CsvColumnExplanations - Handler.Utils.Table.Pagination.Types - Handler.Utils.Term - Handler.Utils.TermCandidates - Handler.Utils.Tutorial - Handler.Utils.Users - Handler.Utils.Widgets - Handler.Utils.Zip - Import - Import.NoFoundation - Import.NoModel - Import.Servant - Import.Servant.NoFoundation - Jobs - Jobs.Crontab - Jobs.Handler.ChangeUserDisplayEmail - Jobs.Handler.DistributeCorrections - Jobs.Handler.ExternalApis - Jobs.Handler.Files - Jobs.Handler.HelpRequest - Jobs.Handler.Intervals.Utils - Jobs.Handler.Invitation - Jobs.Handler.LMS - Jobs.Handler.PersonalisedSheetFiles - Jobs.Handler.Print - Jobs.Handler.PruneInvitations - Jobs.Handler.PruneOldSentMails - Jobs.Handler.QueueNotification - Jobs.Handler.SendCourseCommunication - Jobs.Handler.SendNotification - Jobs.Handler.SendNotification.CorrectionsAssigned - Jobs.Handler.SendNotification.CorrectionsNotDistributed - Jobs.Handler.SendNotification.CourseRegistered - Jobs.Handler.SendNotification.ExamActive - Jobs.Handler.SendNotification.ExamOffice - Jobs.Handler.SendNotification.ExamResult - Jobs.Handler.SendNotification.Qualification - Jobs.Handler.SendNotification.SheetActive - Jobs.Handler.SendNotification.SheetInactive - Jobs.Handler.SendNotification.SubmissionEdited - Jobs.Handler.SendNotification.SubmissionRated - Jobs.Handler.SendNotification.UserAuthModeUpdate - Jobs.Handler.SendNotification.UserRightsUpdate - Jobs.Handler.SendNotification.Utils - Jobs.Handler.SendPasswordReset - Jobs.Handler.SendTestEmail - Jobs.Handler.SetLogSettings - Jobs.Handler.StudyFeatures - Jobs.Handler.SynchroniseAvs - Jobs.Handler.SynchroniseLdap - Jobs.Handler.TransactionLog - Jobs.HealthReport - Jobs.Offload - Jobs.Queue - Jobs.Types - Jose.Jwk.Instances - Jose.Jwt.Instances - Language.Haskell.TH.Instances - Ldap.Client.Instances - Ldap.Client.Pool - Mail - Model - Model.Migration - Model.Migration.Definitions - Model.Migration.Types - Model.Migration.Version - Model.Rating - Model.Submission - Model.Tokens - Model.Tokens.Bearer - Model.Tokens.Lens - Model.Tokens.Session - Model.Tokens.Upload - Model.Types - Model.Types.Apis - Model.Types.Avs - Model.Types.Changelog - Model.Types.Common - Model.Types.Communication - Model.Types.Course - Model.Types.Csv - Model.Types.DateTime - Model.Types.Exam - Model.Types.ExamOffice - Model.Types.File - Model.Types.Health - Model.Types.Languages - Model.Types.Lms - Model.Types.Mail - Model.Types.Markup - Model.Types.Misc - Model.Types.Room - Model.Types.School - Model.Types.Security - Model.Types.Sheet - Model.Types.Submission - Model.Types.SystemMessage - Model.Types.TH.Binary - Model.Types.TH.JSON - Model.Types.TH.PathPiece - Model.Types.TH.Wordlist - Model.Types.Upload - Model.Types.User - Network.HTTP.Types.Method.Instances - Network.IP.Addr.Instances - Network.Mail.Mime.Instances - Network.Mime.TH - Network.Minio.Instances - Network.URI.Instances - Numeric.Natural.Instances - Prometheus.Instances - Servant.Client.Core.BaseUrl.Instances - Servant.Docs.Internal.Pretty.Instances - Servant.Server.Instances - ServantApi - ServantApi.ExternalApis - ServantApi.ExternalApis.Type - Settings - Settings.Cluster - Settings.Cluster.Volatile - Settings.Cookies - Settings.Locale - Settings.Log - Settings.Mime - Settings.StaticFiles - Settings.StaticFiles.Generator - Settings.StaticFiles.Webpack - Settings.WellKnownFiles - Settings.WellKnownFiles.TH - System.Clock.Instances - System.FilePath.Glob.TH - System.FilePath.Instances - Text.Blaze.Instances - Text.Shakespeare.Text.Instances - UnliftIO.Async.Utils - Utils - Utils.Approot - Utils.ARC - Utils.Auth - Utils.Avs - Utils.Cookies - Utils.Cookies.Registered - Utils.Course - Utils.Csv - Utils.Csv.Mail - Utils.DateTime - Utils.DB - Utils.Exam.Correct - Utils.Failover - Utils.Files - Utils.Form - Utils.Frontend.I18n - Utils.Frontend.Modal - Utils.Frontend.Notification - Utils.Holidays - Utils.HttpConditional - Utils.I18n - Utils.Icon - Utils.Lang - Utils.Lens - Utils.Lens.TH - Utils.LRU - Utils.Mail - Utils.Memo - Utils.Message - Utils.Metrics - Utils.NTop - Utils.Occurrences - Utils.Pandoc - Utils.Parameters - Utils.PathPiece - Utils.Persist - Utils.PersistentTokenBucket - Utils.Pool - Utils.Postgresql - Utils.Print - Utils.Print.CourseCertificate - Utils.Print.ExpireQualification - Utils.Print.Instances - Utils.Print.Letters - Utils.Print.RenewQualification - Utils.Print.SomeLetter - Utils.Room - Utils.Route - Utils.Session - Utils.Set - Utils.Sheet - Utils.Sql - Utils.SystemMessage - Utils.Term - Utils.TH - Utils.TH.AlphaConversion - Utils.TH.Routes - Utils.Tokens - Utils.Users - Utils.VolatileClusterSettings - Utils.Widgets - Web.Cookie.Instances - Web.PathPieces.Instances - Web.ServerSession.Backend.Persistent.Memcached - Web.ServerSession.Frontend.Yesod.Jwt - Yesod.Core.Instances - Yesod.Core.Types.Instances - Yesod.Core.Types.Instances.Catch - Yesod.Form.Fields.Instances - Yesod.Form.Types.Instances - Yesod.Servant - Yesod.Servant.HttpApiDataInjective - other-modules: - Paths_uniworx - hs-source-dirs: - src - default-extensions: - OverloadedStrings - PartialTypeSignatures - ScopedTypeVariables - TemplateHaskell - QuasiQuotes - CPP - TypeSynonymInstances - KindSignatures - ConstraintKinds - ViewPatterns - TypeOperators - TupleSections - TypeFamilies - GADTs - StandaloneDeriving - RecordWildCards - RankNTypes - PatternGuards - PatternSynonyms - ParallelListComp - NumDecimals - MultiWayIf - NamedFieldPuns - NoImplicitPrelude - LambdaCase - MultiParamTypeClasses - FlexibleContexts - FlexibleInstances - FunctionalDependencies - EmptyDataDecls - ExistentialQuantification - DefaultSignatures - DeriveDataTypeable - DeriveGeneric - DeriveLift - DeriveFunctor - DeriveFoldable - DeriveTraversable - DeriveAnyClass - DerivingStrategies - DerivingVia - GeneralizedNewtypeDeriving - DataKinds - BinaryLiterals - PolyKinds - PackageImports - TypeApplications - RecursiveDo - TypeFamilyDependencies - QuantifiedConstraints - EmptyDataDeriving - StandaloneKindSignatures - NoStarIsType - other-extensions: - GeneralizedNewtypeDeriving - IncoherentInstances - OverloadedLists - UndecidableInstances - ApplicativeDo - ghc-options: -Wall -Wmissing-home-modules -Wredundant-constraints -Widentities -Wincomplete-uni-patterns -fno-warn-type-defaults -fno-warn-unrecognised-pragmas -fno-warn-partial-type-signatures -fno-max-relevant-binds -j -freduction-depth=0 -fprof-auto-calls -g - build-depends: - Glob - , HaskellNet - , HaskellNet-SSL - , HsYAML - , HsYAML-aeson - , IntervalMap - , MonadRandom - , acid-state - , aeson >=1.5 - , aeson-pretty - , array - , async - , attoparsec - , base - , base32 - , base64-bytestring - , bimap - , binary - , binary-instances - , binary-orphans - , blaze-html - , blaze-markup - , bytestring - , case-insensitive - , cassava - , cassava-conduit - , classy-prelude - , classy-prelude-yesod - , clock - , colonnade >=1.1.1 - , conduit - , conduit-resumablesink >=0.2 - , connection - , constraints - , containers - , cookie - , cryptoids - , cryptoids-class - , cryptoids-types - , cryptonite - , cryptonite-conduit - , data-default - , data-textual - , deepseq - , directory - , directory-tree - , doclayout - , doctemplates - , either - , email-validate - , encoding - , esqueleto >=3.1.0 - , exceptions - , extended-reals - , fast-logger - , fastcdc - , file-embed - , filepath - , filepath-crypto - , foreign-store - , generic-deriving - , generic-lens - , gitrev - , hashable - , haskell-src-meta - , hsass - , http-api-data - , http-client - , http-client-tls - , http-conduit - , http-types - , insert-ordered-containers - , jose-jwt - , lattices - , ldap-client - , lens - , lens-aeson - , list-t - , memcached-binary - , memory - , mime-mail - , mime-types - , minio-hs - , mmorph - , monad-control - , monad-logger - , monad-memo - , mono-traversable - , mono-traversable-keys - , mtl - , multiset - , network >=3 - , network-bsd - , network-ip - , network-uri - , nonce - , pandoc - , pandoc-types - , parsec - , parsec-numbers - , path-pieces - , persistent - , persistent-postgresql - , persistent-qq - , persistent-template - , pkcs7 - , pointedlist - , postgresql-simple - , pqueue - , profunctors - , prometheus-client - , prometheus-metrics-ghc - , psqueues - , random - , random-shuffle - , resourcet - , retry - , rfc5051 - , saltine - , scientific - , semigroupoids - , semver - , servant - , servant-client - , servant-client-core - , servant-docs - , servant-quickcheck - , servant-server - , servant-swagger - , serversession - , serversession-backend-acid-state - , shakespeare - , stm - , stm-delay - , streaming-commons - , swagger2 - , system-locale - , systemd - , tagged - , template-haskell - , text - , text-metrics - , th-abstraction - , th-lift - , th-lift-instances - , time - , token-bucket - , topograph - , transformers - , transformers-base - , typed-process - , tz - , unidecode - , universe - , universe-base - , unix - , unliftio - , unliftio-pool - , unordered-containers - , uuid - , uuid-crypto - , uuid-types - , vault - , vector - , wai - , wai-extra - , wai-logger - , wai-middleware-prometheus - , warp - , wl-pprint-text - , word24 - , xlsx - , xss-sanitize - , yaml - , yesod - , yesod-auth - , yesod-core - , yesod-form - , yesod-persistent - , yesod-static - , zip-stream - default-language: Haskell2010 - if flag(pedantic) - ghc-options: -Werror -fwarn-tabs - if flag(dev) - ghc-options: -O0 -ddump-splices -ddump-to-file -Wderiving-typeable - cpp-options: -DDEVELOPMENT - else - ghc-options: -O -fllvm +RTS -K0 -RTS - -executable uniworx - main-is: main.hs - other-modules: - DevelMain - Paths_uniworx - hs-source-dirs: - app - default-extensions: - OverloadedStrings - PartialTypeSignatures - ScopedTypeVariables - TemplateHaskell - QuasiQuotes - CPP - TypeSynonymInstances - KindSignatures - ConstraintKinds - ViewPatterns - TypeOperators - TupleSections - TypeFamilies - GADTs - StandaloneDeriving - RecordWildCards - RankNTypes - PatternGuards - PatternSynonyms - ParallelListComp - NumDecimals - MultiWayIf - NamedFieldPuns - NoImplicitPrelude - LambdaCase - MultiParamTypeClasses - FlexibleContexts - FlexibleInstances - FunctionalDependencies - EmptyDataDecls - ExistentialQuantification - DefaultSignatures - DeriveDataTypeable - DeriveGeneric - DeriveLift - DeriveFunctor - DeriveFoldable - DeriveTraversable - DeriveAnyClass - DerivingStrategies - DerivingVia - GeneralizedNewtypeDeriving - DataKinds - BinaryLiterals - PolyKinds - PackageImports - TypeApplications - RecursiveDo - TypeFamilyDependencies - QuantifiedConstraints - EmptyDataDeriving - StandaloneKindSignatures - NoStarIsType - other-extensions: - GeneralizedNewtypeDeriving - IncoherentInstances - OverloadedLists - UndecidableInstances - ApplicativeDo - ghc-options: -Wall -Wmissing-home-modules -Wredundant-constraints -Widentities -Wincomplete-uni-patterns -fno-warn-type-defaults -fno-warn-unrecognised-pragmas -fno-warn-partial-type-signatures -fno-max-relevant-binds -j -freduction-depth=0 -fprof-auto-calls -g -threaded -rtsopts "-with-rtsopts=-N -T" - build-depends: - Glob - , HaskellNet - , HaskellNet-SSL - , HsYAML - , HsYAML-aeson - , IntervalMap - , MonadRandom - , acid-state - , aeson >=1.5 - , aeson-pretty - , array - , async - , attoparsec - , base - , base32 - , base64-bytestring - , bimap - , binary - , binary-instances - , binary-orphans - , blaze-html - , blaze-markup - , bytestring - , case-insensitive - , cassava - , cassava-conduit - , classy-prelude - , classy-prelude-yesod - , clock - , colonnade >=1.1.1 - , conduit - , conduit-resumablesink >=0.2 - , connection - , constraints - , containers - , cookie - , cryptoids - , cryptoids-class - , cryptoids-types - , cryptonite - , cryptonite-conduit - , data-default - , data-textual - , deepseq - , directory - , directory-tree - , doclayout - , doctemplates - , either - , email-validate - , encoding - , esqueleto >=3.1.0 - , exceptions - , extended-reals - , fast-logger - , fastcdc - , file-embed - , filepath - , filepath-crypto - , foreign-store - , generic-deriving - , generic-lens - , gitrev - , hashable - , haskell-src-meta - , hsass - , http-api-data - , http-client - , http-client-tls - , http-conduit - , http-types - , insert-ordered-containers - , jose-jwt - , lattices - , ldap-client - , lens - , lens-aeson - , list-t - , memcached-binary - , memory - , mime-mail - , mime-types - , minio-hs - , mmorph - , monad-control - , monad-logger - , monad-memo - , mono-traversable - , mono-traversable-keys - , mtl - , multiset - , network >=3 - , network-bsd - , network-ip - , network-uri - , nonce - , pandoc - , pandoc-types - , parsec - , parsec-numbers - , path-pieces - , persistent - , persistent-postgresql - , persistent-qq - , persistent-template - , pkcs7 - , pointedlist - , postgresql-simple - , pqueue - , profunctors - , prometheus-client - , prometheus-metrics-ghc - , psqueues - , random - , random-shuffle - , resourcet - , retry - , rfc5051 - , saltine - , scientific - , semigroupoids - , semver - , servant - , servant-client - , servant-client-core - , servant-docs - , servant-quickcheck - , servant-server - , servant-swagger - , serversession - , serversession-backend-acid-state - , shakespeare - , stm - , stm-delay - , streaming-commons - , swagger2 - , system-locale - , systemd - , tagged - , template-haskell - , text - , text-metrics - , th-abstraction - , th-lift - , th-lift-instances - , time - , token-bucket - , topograph - , transformers - , transformers-base - , typed-process - , tz - , unidecode - , universe - , universe-base - , uniworx - , unix - , unliftio - , unliftio-pool - , unordered-containers - , uuid - , uuid-crypto - , uuid-types - , vault - , vector - , wai - , wai-extra - , wai-logger - , wai-middleware-prometheus - , warp - , wl-pprint-text - , word24 - , xlsx - , xss-sanitize - , yaml - , yesod - , yesod-auth - , yesod-core - , yesod-form - , yesod-persistent - , yesod-static - , zip-stream - default-language: Haskell2010 - if flag(pedantic) - ghc-options: -Werror -fwarn-tabs - if flag(dev) - ghc-options: -O0 -ddump-splices -ddump-to-file -Wderiving-typeable - cpp-options: -DDEVELOPMENT - else - ghc-options: -O -fllvm +RTS -K0 -RTS - if flag(library-only) - buildable: False - -executable uniworxdb - main-is: Database.hs - other-modules: - Database.Fill - Paths_uniworx - hs-source-dirs: - test - default-extensions: - OverloadedStrings - PartialTypeSignatures - ScopedTypeVariables - TemplateHaskell - QuasiQuotes - CPP - TypeSynonymInstances - KindSignatures - ConstraintKinds - ViewPatterns - TypeOperators - TupleSections - TypeFamilies - GADTs - StandaloneDeriving - RecordWildCards - RankNTypes - PatternGuards - PatternSynonyms - ParallelListComp - NumDecimals - MultiWayIf - NamedFieldPuns - NoImplicitPrelude - LambdaCase - MultiParamTypeClasses - FlexibleContexts - FlexibleInstances - FunctionalDependencies - EmptyDataDecls - ExistentialQuantification - DefaultSignatures - DeriveDataTypeable - DeriveGeneric - DeriveLift - DeriveFunctor - DeriveFoldable - DeriveTraversable - DeriveAnyClass - DerivingStrategies - DerivingVia - GeneralizedNewtypeDeriving - DataKinds - BinaryLiterals - PolyKinds - PackageImports - TypeApplications - RecursiveDo - TypeFamilyDependencies - QuantifiedConstraints - EmptyDataDeriving - StandaloneKindSignatures - NoStarIsType - other-extensions: - GeneralizedNewtypeDeriving - IncoherentInstances - OverloadedLists - UndecidableInstances - ApplicativeDo - ghc-options: -Wall -Wmissing-home-modules -Wredundant-constraints -Widentities -Wincomplete-uni-patterns -fno-warn-type-defaults -fno-warn-unrecognised-pragmas -fno-warn-partial-type-signatures -fno-max-relevant-binds -j -freduction-depth=0 -fprof-auto-calls -g -main-is Database -threaded -rtsopts "-with-rtsopts=-N -T" - build-depends: - Glob - , HaskellNet - , HaskellNet-SSL - , HsYAML - , HsYAML-aeson - , IntervalMap - , MonadRandom - , acid-state - , aeson >=1.5 - , aeson-pretty - , array - , async - , attoparsec - , base - , base32 - , base64-bytestring - , bimap - , binary - , binary-instances - , binary-orphans - , blaze-html - , blaze-markup - , bytestring - , case-insensitive - , cassava - , cassava-conduit - , classy-prelude - , classy-prelude-yesod - , clock - , colonnade >=1.1.1 - , conduit - , conduit-resumablesink >=0.2 - , connection - , constraints - , containers - , cookie - , cryptoids - , cryptoids-class - , cryptoids-types - , cryptonite - , cryptonite-conduit - , data-default - , data-textual - , deepseq - , directory - , directory-tree - , doclayout - , doctemplates - , either - , email-validate - , encoding - , esqueleto >=3.1.0 - , exceptions - , extended-reals - , fast-logger - , fastcdc - , file-embed - , filepath - , filepath-crypto - , foreign-store - , generic-deriving - , generic-lens - , gitrev - , hashable - , haskell-src-meta - , hsass - , http-api-data - , http-client - , http-client-tls - , http-conduit - , http-types - , insert-ordered-containers - , jose-jwt - , lattices - , ldap-client - , lens - , lens-aeson - , list-t - , memcached-binary - , memory - , mime-mail - , mime-types - , minio-hs - , mmorph - , monad-control - , monad-logger - , monad-memo - , mono-traversable - , mono-traversable-keys - , mtl - , multiset - , network >=3 - , network-bsd - , network-ip - , network-uri - , nonce - , pandoc - , pandoc-types - , parsec - , parsec-numbers - , path-pieces - , persistent - , persistent-postgresql - , persistent-qq - , persistent-template - , pkcs7 - , pointedlist - , postgresql-simple - , pqueue - , profunctors - , prometheus-client - , prometheus-metrics-ghc - , psqueues - , random - , random-shuffle - , resourcet - , retry - , rfc5051 - , saltine - , scientific - , semigroupoids - , semver - , servant - , servant-client - , servant-client-core - , servant-docs - , servant-quickcheck - , servant-server - , servant-swagger - , serversession - , serversession-backend-acid-state - , shakespeare - , stm - , stm-delay - , streaming-commons - , swagger2 - , system-locale - , systemd - , tagged - , template-haskell - , text - , text-metrics - , th-abstraction - , th-lift - , th-lift-instances - , time - , token-bucket - , topograph - , transformers - , transformers-base - , typed-process - , tz - , unidecode - , universe - , universe-base - , uniworx - , unix - , unliftio - , unliftio-pool - , unordered-containers - , uuid - , uuid-crypto - , uuid-types - , vault - , vector - , wai - , wai-extra - , wai-logger - , wai-middleware-prometheus - , warp - , wl-pprint-text - , word24 - , xlsx - , xss-sanitize - , yaml - , yesod - , yesod-auth - , yesod-core - , yesod-form - , yesod-persistent - , yesod-static - , zip-stream - default-language: Haskell2010 - if flag(pedantic) - ghc-options: -Werror -fwarn-tabs - if flag(dev) - ghc-options: -O0 -ddump-splices -ddump-to-file -Wderiving-typeable - cpp-options: -DDEVELOPMENT - else - ghc-options: -O -fllvm +RTS -K0 -RTS - if flag(library-only) - buildable: False - -executable uniworxload - main-is: Load.hs - hs-source-dirs: - load - default-extensions: - OverloadedStrings - PartialTypeSignatures - ScopedTypeVariables - TemplateHaskell - QuasiQuotes - CPP - TypeSynonymInstances - KindSignatures - ConstraintKinds - ViewPatterns - TypeOperators - TupleSections - TypeFamilies - GADTs - StandaloneDeriving - RecordWildCards - RankNTypes - PatternGuards - PatternSynonyms - ParallelListComp - NumDecimals - MultiWayIf - NamedFieldPuns - NoImplicitPrelude - LambdaCase - MultiParamTypeClasses - FlexibleContexts - FlexibleInstances - FunctionalDependencies - EmptyDataDecls - ExistentialQuantification - DefaultSignatures - DeriveDataTypeable - DeriveGeneric - DeriveLift - DeriveFunctor - DeriveFoldable - DeriveTraversable - DeriveAnyClass - DerivingStrategies - DerivingVia - GeneralizedNewtypeDeriving - DataKinds - BinaryLiterals - PolyKinds - PackageImports - TypeApplications - RecursiveDo - TypeFamilyDependencies - QuantifiedConstraints - EmptyDataDeriving - StandaloneKindSignatures - NoStarIsType - other-extensions: - GeneralizedNewtypeDeriving - IncoherentInstances - OverloadedLists - UndecidableInstances - ApplicativeDo - ghc-options: -Wall -Wmissing-home-modules -Wredundant-constraints -Widentities -Wincomplete-uni-patterns -fno-warn-type-defaults -fno-warn-unrecognised-pragmas -fno-warn-partial-type-signatures -fno-max-relevant-binds -j -freduction-depth=0 -fprof-auto-calls -g -main-is Load -threaded -rtsopts "-with-rtsopts=-N -T" - build-depends: - Glob - , HaskellNet - , HaskellNet-SSL - , HsYAML - , HsYAML-aeson - , IntervalMap - , MonadRandom - , acid-state - , aeson >=1.5 - , aeson-pretty - , array - , async - , attoparsec - , base - , base32 - , base64-bytestring - , bimap - , binary - , binary-instances - , binary-orphans - , blaze-html - , blaze-markup - , bytestring - , case-insensitive - , cassava - , cassava-conduit - , classy-prelude - , classy-prelude-yesod - , clock - , colonnade >=1.1.1 - , conduit - , conduit-resumablesink >=0.2 - , connection - , constraints - , containers - , cookie - , cryptoids - , cryptoids-class - , cryptoids-types - , cryptonite - , cryptonite-conduit - , data-default - , data-textual - , deepseq - , directory - , directory-tree - , doclayout - , doctemplates - , either - , email-validate - , encoding - , esqueleto >=3.1.0 - , exceptions - , extended-reals - , fast-logger - , fastcdc - , file-embed - , filepath - , filepath-crypto - , foreign-store - , generic-deriving - , generic-lens - , gitrev - , hashable - , haskell-src-meta - , hsass - , http-api-data - , http-client - , http-client-tls - , http-conduit - , http-types - , insert-ordered-containers - , jose-jwt - , lattices - , ldap-client - , lens - , lens-aeson - , list-t - , memcached-binary - , memory - , mime-mail - , mime-types - , minio-hs - , mmorph - , monad-control - , monad-logger - , monad-memo - , mono-traversable - , mono-traversable-keys - , mtl - , multiset - , network >=3 - , network-bsd - , network-ip - , network-uri - , nonce - , normaldistribution - , pandoc - , pandoc-types - , parsec - , parsec-numbers - , path-pieces - , persistent - , persistent-postgresql - , persistent-qq - , persistent-template - , pkcs7 - , pointedlist - , postgresql-simple - , pqueue - , profunctors - , prometheus-client - , prometheus-metrics-ghc - , psqueues - , random - , random-shuffle - , resourcet - , retry - , rfc5051 - , saltine - , scalpel - , scientific - , semigroupoids - , semver - , servant - , servant-client - , servant-client-core - , servant-docs - , servant-quickcheck - , servant-server - , servant-swagger - , serversession - , serversession-backend-acid-state - , shakespeare - , stm - , stm-delay - , streaming-commons - , swagger2 - , system-locale - , systemd - , tagged - , template-haskell - , text - , text-metrics - , th-abstraction - , th-lift - , th-lift-instances - , time - , token-bucket - , topograph - , transformers - , transformers-base - , typed-process - , tz - , unidecode - , universe - , universe-base - , uniworx - , unix - , unliftio - , unliftio-pool - , unordered-containers - , uuid - , uuid-crypto - , uuid-types - , vault - , vector - , wai - , wai-extra - , wai-logger - , wai-middleware-prometheus - , warp - , wl-pprint-text - , word24 - , wreq - , xlsx - , xss-sanitize - , yaml - , yesod - , yesod-auth - , yesod-core - , yesod-form - , yesod-persistent - , yesod-static - , zip-stream - default-language: Haskell2010 - if flag(pedantic) - ghc-options: -Werror -fwarn-tabs - if flag(dev) - ghc-options: -O0 -ddump-splices -ddump-to-file -Wderiving-typeable - cpp-options: -DDEVELOPMENT - else - ghc-options: -O -fllvm +RTS -K0 -RTS - if flag(library-only) - buildable: False - -test-suite hlint - type: exitcode-stdio-1.0 - main-is: Hlint.hs - hs-source-dirs: - hlint - default-extensions: - OverloadedStrings - PartialTypeSignatures - ScopedTypeVariables - TemplateHaskell - QuasiQuotes - CPP - TypeSynonymInstances - KindSignatures - ConstraintKinds - ViewPatterns - TypeOperators - TupleSections - TypeFamilies - GADTs - StandaloneDeriving - RecordWildCards - RankNTypes - PatternGuards - PatternSynonyms - ParallelListComp - NumDecimals - MultiWayIf - NamedFieldPuns - NoImplicitPrelude - LambdaCase - MultiParamTypeClasses - FlexibleContexts - FlexibleInstances - FunctionalDependencies - EmptyDataDecls - ExistentialQuantification - DefaultSignatures - DeriveDataTypeable - DeriveGeneric - DeriveLift - DeriveFunctor - DeriveFoldable - DeriveTraversable - DeriveAnyClass - DerivingStrategies - DerivingVia - GeneralizedNewtypeDeriving - DataKinds - BinaryLiterals - PolyKinds - PackageImports - TypeApplications - RecursiveDo - TypeFamilyDependencies - QuantifiedConstraints - EmptyDataDeriving - StandaloneKindSignatures - NoStarIsType - other-extensions: - GeneralizedNewtypeDeriving - IncoherentInstances - OverloadedLists - UndecidableInstances - ApplicativeDo - ghc-options: -Wall -Wmissing-home-modules -Wredundant-constraints -Widentities -Wincomplete-uni-patterns -fno-warn-type-defaults -fno-warn-unrecognised-pragmas -fno-warn-partial-type-signatures -fno-max-relevant-binds -j -freduction-depth=0 -fprof-auto-calls -g - build-depends: - Glob - , HaskellNet - , HaskellNet-SSL - , HsYAML - , HsYAML-aeson - , IntervalMap - , MonadRandom - , acid-state - , aeson >=1.5 - , aeson-pretty - , array - , async - , attoparsec - , base - , base32 - , base64-bytestring - , bimap - , binary - , binary-instances - , binary-orphans - , blaze-html - , blaze-markup - , bytestring - , case-insensitive - , cassava - , cassava-conduit - , classy-prelude - , classy-prelude-yesod - , clock - , colonnade >=1.1.1 - , conduit - , conduit-resumablesink >=0.2 - , connection - , constraints - , containers - , cookie - , cryptoids - , cryptoids-class - , cryptoids-types - , cryptonite - , cryptonite-conduit - , data-default - , data-textual - , deepseq - , directory - , directory-tree - , doclayout - , doctemplates - , either - , email-validate - , encoding - , esqueleto >=3.1.0 - , exceptions - , extended-reals - , fast-logger - , fastcdc - , file-embed - , filepath - , filepath-crypto - , foreign-store - , generic-deriving - , generic-lens - , gitrev - , hashable - , haskell-src-meta - , hlint-test - , hsass - , http-api-data - , http-client - , http-client-tls - , http-conduit - , http-types - , insert-ordered-containers - , jose-jwt - , lattices - , ldap-client - , lens - , lens-aeson - , list-t - , memcached-binary - , memory - , mime-mail - , mime-types - , minio-hs - , mmorph - , monad-control - , monad-logger - , monad-memo - , mono-traversable - , mono-traversable-keys - , mtl - , multiset - , network >=3 - , network-bsd - , network-ip - , network-uri - , nonce - , pandoc - , pandoc-types - , parsec - , parsec-numbers - , path-pieces - , persistent - , persistent-postgresql - , persistent-qq - , persistent-template - , pkcs7 - , pointedlist - , postgresql-simple - , pqueue - , profunctors - , prometheus-client - , prometheus-metrics-ghc - , psqueues - , random - , random-shuffle - , resourcet - , retry - , rfc5051 - , saltine - , scientific - , semigroupoids - , semver - , servant - , servant-client - , servant-client-core - , servant-docs - , servant-quickcheck - , servant-server - , servant-swagger - , serversession - , serversession-backend-acid-state - , shakespeare - , stm - , stm-delay - , streaming-commons - , swagger2 - , system-locale - , systemd - , tagged - , template-haskell - , text - , text-metrics - , th-abstraction - , th-lift - , th-lift-instances - , time - , token-bucket - , topograph - , transformers - , transformers-base - , typed-process - , tz - , unidecode - , universe - , universe-base - , unix - , unliftio - , unliftio-pool - , unordered-containers - , uuid - , uuid-crypto - , uuid-types - , vault - , vector - , wai - , wai-extra - , wai-logger - , wai-middleware-prometheus - , warp - , wl-pprint-text - , word24 - , xlsx - , xss-sanitize - , yaml - , yesod - , yesod-auth - , yesod-core - , yesod-form - , yesod-persistent - , yesod-static - , zip-stream - default-language: Haskell2010 - if flag(pedantic) - ghc-options: -Werror -fwarn-tabs - if flag(dev) - ghc-options: -O0 -ddump-splices -ddump-to-file -Wderiving-typeable - cpp-options: -DDEVELOPMENT - else - ghc-options: -O -fllvm +RTS -K0 -RTS - if !flag(pedantic) - buildable: False - -test-suite yesod - type: exitcode-stdio-1.0 - main-is: Main.hs - other-modules: - Auth.LDAP.ADSpec - CronSpec - Crypto.Hash.TestInstances - Data.NonNull.TestInstances - Data.Scientific.InstancesSpec - Database - Database.Fill - Database.Persist.Sql.Types.TestInstances - Foundation.ServantSpec - FoundationSpec - Handler.CommonSpec - Handler.CorrectionsSpec - Handler.Exam.FormSpec - Handler.HomeSpec - Handler.ProfileSpec - Handler.SAPSpec - Handler.Sheet.PersonalisedFilesSpec - Handler.Utils.ExamSpec - Handler.Utils.FilesSpec - Handler.Utils.RatingSpec - Handler.Utils.SubmissionSpec - Handler.Utils.Table.Pagination.TypesSpec - Handler.Utils.Table.PaginationSpec - Handler.Utils.ZipSpec - Jose.Jwk.TestInstances - MailSpec - Model.MigrationSpec - Model.RatingSpec - Model.Tokens.UploadSpec - Model.Types.FileSpec - Model.Types.LanguagesSpec - Model.TypesSpec - ModelSpec - PandocSpec - Servant.Client.Core.BaseUrl.TestInstances - ServantApi.ExternalApis.TypeSpec - ServantApi.ExternalApisSpec - ServantApiSpec - Test.QuickCheck.Classes.Binary - Test.QuickCheck.Classes.Csv - Test.QuickCheck.Classes.Hashable - Test.QuickCheck.Classes.HttpApiData - Test.QuickCheck.Classes.JSON - Test.QuickCheck.Classes.PathPiece - Test.QuickCheck.Classes.PersistField - Test.QuickCheck.Classes.Universe - TestImport - TestInstances - Text.Blaze.TestInstances - User - Utils.CsvSpec - Utils.DateTimeSpec - Utils.I18nSpec - Utils.PathPieceSpec - Utils.TypesSpec - UtilsSpec - Paths_uniworx - hs-source-dirs: - test - default-extensions: - OverloadedStrings - PartialTypeSignatures - ScopedTypeVariables - TemplateHaskell - QuasiQuotes - CPP - TypeSynonymInstances - KindSignatures - ConstraintKinds - ViewPatterns - TypeOperators - TupleSections - TypeFamilies - GADTs - StandaloneDeriving - RecordWildCards - RankNTypes - PatternGuards - PatternSynonyms - ParallelListComp - NumDecimals - MultiWayIf - NamedFieldPuns - NoImplicitPrelude - LambdaCase - MultiParamTypeClasses - FlexibleContexts - FlexibleInstances - FunctionalDependencies - EmptyDataDecls - ExistentialQuantification - DefaultSignatures - DeriveDataTypeable - DeriveGeneric - DeriveLift - DeriveFunctor - DeriveFoldable - DeriveTraversable - DeriveAnyClass - DerivingStrategies - DerivingVia - GeneralizedNewtypeDeriving - DataKinds - BinaryLiterals - PolyKinds - PackageImports - TypeApplications - RecursiveDo - TypeFamilyDependencies - QuantifiedConstraints - EmptyDataDeriving - StandaloneKindSignatures - NoStarIsType - other-extensions: - GeneralizedNewtypeDeriving - IncoherentInstances - OverloadedLists - UndecidableInstances - ApplicativeDo - ghc-options: -Wall -Wmissing-home-modules -Wredundant-constraints -Widentities -Wincomplete-uni-patterns -fno-warn-type-defaults -fno-warn-unrecognised-pragmas -fno-warn-partial-type-signatures -fno-max-relevant-binds -j -freduction-depth=0 -fprof-auto-calls -g -fno-warn-orphans -threaded -rtsopts "-with-rtsopts=-N -T" - build-depends: - Glob - , HUnit - , HaskellNet - , HaskellNet-SSL - , HsYAML - , HsYAML-aeson - , IntervalMap - , MonadRandom - , QuickCheck - , acid-state - , aeson >=1.5 - , aeson-pretty - , array - , async - , attoparsec - , base - , base32 - , base64-bytestring - , bimap - , binary - , binary-instances - , binary-orphans - , blaze-html - , blaze-markup - , bytestring - , case-insensitive - , cassava - , cassava-conduit - , classy-prelude - , classy-prelude-yesod - , clock - , colonnade >=1.1.1 - , conduit - , conduit-extra - , conduit-resumablesink >=0.2 - , connection - , constraints - , containers - , cookie - , cryptoids - , cryptoids-class - , cryptoids-types - , cryptonite - , cryptonite-conduit - , data-default - , data-textual - , deepseq - , directory - , directory-tree - , doclayout - , doctemplates - , either - , email-validate - , encoding - , esqueleto >=3.1.0 - , exceptions - , extended-reals - , fast-logger - , fastcdc - , file-embed - , filepath - , filepath-crypto - , foreign-store - , generic-arbitrary - , generic-deriving - , generic-lens - , gitrev - , hashable - , haskell-src-meta - , hsass - , hspec >=2.0.0 - , http-api-data - , http-client - , http-client-tls - , http-conduit - , http-media - , http-types - , insert-ordered-containers - , jose-jwt - , lattices - , ldap-client - , lens - , lens-aeson - , lens-properties - , list-t - , memcached-binary - , memory - , mime-mail - , mime-types - , minio-hs - , mmorph - , monad-control - , monad-logger - , monad-memo - , mono-traversable - , mono-traversable-keys - , mtl - , multiset - , network >=3 - , network-arbitrary - , network-bsd - , network-ip - , network-uri - , nonce - , pandoc - , pandoc-types - , parsec - , parsec-numbers - , path-pieces - , persistent - , persistent-postgresql - , persistent-qq - , persistent-template - , pkcs7 - , pointedlist - , postgresql-simple - , pqueue - , profunctors - , prometheus-client - , prometheus-metrics-ghc - , psqueues - , quickcheck-classes - , quickcheck-instances - , quickcheck-io - , random - , random-shuffle - , resourcet - , retry - , rfc5051 - , saltine - , scientific - , semigroupoids - , semver - , servant - , servant-client - , servant-client-core - , servant-docs - , servant-quickcheck - , servant-server - , servant-swagger - , serversession - , serversession-backend-acid-state - , shakespeare - , splitmix - , stm - , stm-delay - , streaming-commons - , swagger2 - , system-locale - , systemd - , tagged - , template-haskell - , text - , text-metrics - , th-abstraction - , th-lift - , th-lift-instances - , time - , token-bucket - , topograph - , transformers - , transformers-base - , typed-process - , tz - , unidecode - , universe - , universe-base - , uniworx - , unix - , unliftio - , unliftio-pool - , unordered-containers - , uuid - , uuid-crypto - , uuid-types - , vault - , vector - , wai - , wai-extra - , wai-logger - , wai-middleware-prometheus - , warp - , wl-pprint-text - , word24 - , xlsx - , xss-sanitize - , yaml - , yesod - , yesod-auth - , yesod-core - , yesod-form - , yesod-persistent - , yesod-static - , yesod-test - , zip-stream - default-language: Haskell2010 - if flag(pedantic) - ghc-options: -Werror -fwarn-tabs - if flag(dev) - ghc-options: -O0 -ddump-splices -ddump-to-file -Wderiving-typeable - cpp-options: -DDEVELOPMENT - else - ghc-options: -O -fllvm +RTS -K0 -RTS