chore(lpr): fix #83 by add resending option to print center

This commit is contained in:
Steffen Jost 2023-06-15 15:17:40 +00:00
parent c76dc47890
commit 933173dfcb
5 changed files with 48 additions and 10 deletions

View File

@ -3,6 +3,7 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
PJActAcknowledge: Druck und Versand bestätigen
PJActReprint: Erneut drucken über APC
PrintJobName: Bezeichnung
PrintJobFilename: Dateiname
PrintJobId !ident-ok: Id
@ -11,6 +12,7 @@ PrintJobApcAcknowledge: Bestätigungs ID
PrintJobAcknowledged: Bestätigt
PrintJobUnacknowledged: Noch nicht gedruckt
PrintJobAcknowledge n@Int64: #{n} #{pluralDE n "Druckauftrag" "Druckaufräge"} als gedruckt und versendet bestätigt
PrintJobReprint n@Int m@Int: #{n}/#{m} #{pluralDE n "Druckauftrag" "Druckaufräge"} wurden erneut zum Drucken ans APC gesendet; Bestätigungs-Idents wurden dabei nicht verändert und sind nun ggf. doppelt vorhanden.
PrintJobAcknowledgeFailed: Keine Druckaufträge bestätigt aufgrund zwischenzeitlicher Änderungen. Bitte die Seite im Browser aktualisieren!
PrintJobAcknowledgeQuestion n@Int d@Text: #{n} #{pluralDE n "Druckauftrag" "Druckaufräge"} vom #{d} als gedruckt und versendet bestätigen?
PrintJobAcknowledgements: Versanddatum von Briefen an

View File

@ -3,6 +3,7 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
PJActAcknowledge: Acknowledge printing and mailing
PJActReprint: Print again via APC
PrintJobName: Description
PrintJobFilename: Filename
PrintJobId: Id
@ -11,6 +12,7 @@ PrintJobApcAcknowledge: Acknowledge ID
PrintJobAcknowledged: Acknowledged
PrintJobUnacknowledged: Not yet printed
PrintJobAcknowledge n: #{n} #{pluralENs n "print-job"} marked as printed and mailed
PrintJobReprint n m: #{n}/#{m} #{pluralENs n "print-job"} were sent for printing to the APC once more. Notice that the acknowledge idents remained unchanged and may thus be duplicated now.
PrintJobAcknowledgeFailed: No print-jobs acknowledged, due to intermediate changes. Please reload this page!
PrintJobAcknowledgeQuestion n d: Mark #{n} #{pluralENs n "print-job"} issued on #{d} as printed and mailed already?
PrintJobAcknowledgements: Sent-dates for Letter to

View File

@ -114,17 +114,16 @@ lrqf2letter LRQF{..}
getUser (Left mail) = getBy404 $ UniqueEmail mail
data PJTableAction = PJActAcknowledge
data PJTableAction = PJActAcknowledge | PJActReprint
deriving (Eq, Ord, Enum, Bounded, Read, Show, Generic)
instance Universe PJTableAction
instance Finite PJTableAction
nullaryPathPiece ''PJTableAction $ camelToPathPiece' 2
embedRenderMessage ''UniWorX ''PJTableAction id
-- Not yet needed, since there is no additional data for now:
data PJTableActionData = PJActAcknowledgeData
data PJTableActionData = PJActAcknowledgeData | PJActReprintData
deriving (Eq, Ord, Read, Show, Generic)
type PJTableExpr = ( E.SqlExpr (Entity PrintJob)
@ -259,6 +258,7 @@ mkPJTable = do
= let acts :: Map PJTableAction (AForm Handler PJTableActionData)
acts = mconcat
[ singletonMap PJActAcknowledge $ pure PJActAcknowledgeData
, singletonMap PJActReprint $ pure PJActReprintData
]
in renderAForm FormStandard
$ (, mempty) . First . Just
@ -283,11 +283,19 @@ postPrintCenterR = do
(pjRes, pjTable) <- runDB mkPJTable
formResult pjRes $ \case
(PJActAcknowledgeData, Set.toList -> pjIds) -> do
now <- liftIO getCurrentTime
num <- runDB $ updateWhereCount [PrintJobAcknowledged ==. Nothing, PrintJobId <-. pjIds] [PrintJobAcknowledged =. Just now]
addMessageI Success $ MsgPrintJobAcknowledge num
reloadKeepGetParams PrintCenterR
(PJActAcknowledgeData, Set.toList -> pjIds) -> do
now <- liftIO getCurrentTime
num <- runDB $ updateWhereCount [PrintJobAcknowledged ==. Nothing, PrintJobId <-. pjIds] [PrintJobAcknowledged =. Just now]
addMessageI Success $ MsgPrintJobAcknowledge num
reloadKeepGetParams PrintCenterR
(PJActReprintData, Set.toList -> pjIds) -> do
let countOk = either (const $ Sum 0) (const $ Sum 1)
oks <- runDB $ forM pjIds $ fmap countOk . reprintPDF
let nr_oks = getSum $ mconcat oks
nr_tot = length pjIds
mstat = bool Warning Success $ nr_oks == nr_tot
addMessageI mstat $ MsgPrintJobReprint nr_oks nr_tot
reloadKeepGetParams PrintCenterR
siteLayoutMsg MsgMenuApc $ do
setTitleI MsgMenuApc

View File

@ -1,4 +1,4 @@
-- SPDX-FileCopyrightText: 2022 Steffen Jost <jost@tcs.ifi.lmu.de>
-- SPDX-FileCopyrightText: 2022-23 Steffen Jost <jost@tcs.ifi.lmu.de>
--
-- SPDX-License-Identifier: AGPL-3.0-or-later
@ -10,6 +10,7 @@ module Utils.Print
, sendEmailOrLetter -- directly print or sends by email
, printLetter -- always send a letter
, printHtml -- return letter as Html only
, reprintPDF -- send a PDF once more the APC
, letterApcIdent -- create acknowledge string for APC
, letterFileName -- default filename
, encryptPDF
@ -277,6 +278,20 @@ printLetter' pji pdf = do
insert_ PrintJob {..}
return $ Right (ok, printJobFilename)
reprintPDF :: PrintJobId -> DB (Either Text Text)
reprintPDF pjid = maybeM (return $ Left "Print job id is unknown.") reprint $ get pjid
where
reprint :: PrintJob -> DB (Either Text Text)
reprint pj@PrintJob{..} = do
result <- lprPDF printJobFilename $ LBS.fromStrict printJobFile
whenIsRight result $ const $ do
now <- liftIO getCurrentTime
insert_ pj{ printJobAcknowledged = Nothing
, printJobCreated = now
-- , printJobApcIdent = ??? cannot be modified here, since it is included inside the PDF
}
return result
{-
printLetter'' :: _ -> DB PureFile
printLetter'' _ = do

View File

@ -188,6 +188,17 @@ mkApcIdent uuid envelope lk tnow apcAck = Text.filter apcAcceptedChars $ Text.in
ensureLength :: Int -> Text -> Text
ensureLength n = Text.take n . Text.justifyLeft n 'x'
formatApcIdentTime :: (HasLocalTime t, MonadHandler m) => t -> m Text
formatApcIdentTime = formatTime' "%y%m%d-%H"
-- updateApcIdentTime :: UTCTime -> Text -> Text
-- updateApcIdentTime now oldapcident = do
-- tnow <- formatApcIdentTime now
-- let (st,en') = Text.splitAt (38 + 3 + 5 + 3) oldapcident -- TODO: ensure that the numbers are correct
-- en = Text.drop 9 en'
-- TODO: TEST whether the last characters in st and first characters in en are apcIdentSeparators and call error otherwise
-- return $ st <> ensureLength 9 tnow <> en
apcIdentSeparator :: Text
apcIdentSeparator = Text.take 3 "___" -- must always have length 3
@ -233,7 +244,7 @@ class MDLetter l where
letterApcIdent :: (MDLetter l, MonadHandler m) => l -> CryptoUUIDUser -> UTCTime -> m Text
letterApcIdent l uuid now = do
-- now <- liftIO getCurrentTime
tnow <- formatTime' "%y%m%d-%H" now
tnow <- formatApcIdentTime now
return $ mkApcIdent uuid (getLetterEnvelope l) (getLetterKind l) tnow (pjiApcAcknowledge $ getPJId l)
letterFileName :: (MDLetter l) => l -> FilePath