chore(lpr): fix #83 by add resending option to print center
This commit is contained in:
parent
c76dc47890
commit
933173dfcb
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user