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
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
PJActAcknowledge: Druck und Versand bestätigen
|
PJActAcknowledge: Druck und Versand bestätigen
|
||||||
|
PJActReprint: Erneut drucken über APC
|
||||||
PrintJobName: Bezeichnung
|
PrintJobName: Bezeichnung
|
||||||
PrintJobFilename: Dateiname
|
PrintJobFilename: Dateiname
|
||||||
PrintJobId !ident-ok: Id
|
PrintJobId !ident-ok: Id
|
||||||
@ -11,6 +12,7 @@ PrintJobApcAcknowledge: Bestätigungs ID
|
|||||||
PrintJobAcknowledged: Bestätigt
|
PrintJobAcknowledged: Bestätigt
|
||||||
PrintJobUnacknowledged: Noch nicht gedruckt
|
PrintJobUnacknowledged: Noch nicht gedruckt
|
||||||
PrintJobAcknowledge n@Int64: #{n} #{pluralDE n "Druckauftrag" "Druckaufräge"} als gedruckt und versendet bestätigt
|
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!
|
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?
|
PrintJobAcknowledgeQuestion n@Int d@Text: #{n} #{pluralDE n "Druckauftrag" "Druckaufräge"} vom #{d} als gedruckt und versendet bestätigen?
|
||||||
PrintJobAcknowledgements: Versanddatum von Briefen an
|
PrintJobAcknowledgements: Versanddatum von Briefen an
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
PJActAcknowledge: Acknowledge printing and mailing
|
PJActAcknowledge: Acknowledge printing and mailing
|
||||||
|
PJActReprint: Print again via APC
|
||||||
PrintJobName: Description
|
PrintJobName: Description
|
||||||
PrintJobFilename: Filename
|
PrintJobFilename: Filename
|
||||||
PrintJobId: Id
|
PrintJobId: Id
|
||||||
@ -11,6 +12,7 @@ PrintJobApcAcknowledge: Acknowledge ID
|
|||||||
PrintJobAcknowledged: Acknowledged
|
PrintJobAcknowledged: Acknowledged
|
||||||
PrintJobUnacknowledged: Not yet printed
|
PrintJobUnacknowledged: Not yet printed
|
||||||
PrintJobAcknowledge n: #{n} #{pluralENs n "print-job"} marked as printed and mailed
|
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!
|
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?
|
PrintJobAcknowledgeQuestion n d: Mark #{n} #{pluralENs n "print-job"} issued on #{d} as printed and mailed already?
|
||||||
PrintJobAcknowledgements: Sent-dates for Letter to
|
PrintJobAcknowledgements: Sent-dates for Letter to
|
||||||
|
|||||||
@ -114,17 +114,16 @@ lrqf2letter LRQF{..}
|
|||||||
getUser (Left mail) = getBy404 $ UniqueEmail mail
|
getUser (Left mail) = getBy404 $ UniqueEmail mail
|
||||||
|
|
||||||
|
|
||||||
data PJTableAction = PJActAcknowledge
|
data PJTableAction = PJActAcknowledge | PJActReprint
|
||||||
deriving (Eq, Ord, Enum, Bounded, Read, Show, Generic)
|
deriving (Eq, Ord, Enum, Bounded, Read, Show, Generic)
|
||||||
|
|
||||||
|
|
||||||
instance Universe PJTableAction
|
instance Universe PJTableAction
|
||||||
instance Finite PJTableAction
|
instance Finite PJTableAction
|
||||||
nullaryPathPiece ''PJTableAction $ camelToPathPiece' 2
|
nullaryPathPiece ''PJTableAction $ camelToPathPiece' 2
|
||||||
embedRenderMessage ''UniWorX ''PJTableAction id
|
embedRenderMessage ''UniWorX ''PJTableAction id
|
||||||
|
|
||||||
-- Not yet needed, since there is no additional data for now:
|
-- Not yet needed, since there is no additional data for now:
|
||||||
data PJTableActionData = PJActAcknowledgeData
|
data PJTableActionData = PJActAcknowledgeData | PJActReprintData
|
||||||
deriving (Eq, Ord, Read, Show, Generic)
|
deriving (Eq, Ord, Read, Show, Generic)
|
||||||
|
|
||||||
type PJTableExpr = ( E.SqlExpr (Entity PrintJob)
|
type PJTableExpr = ( E.SqlExpr (Entity PrintJob)
|
||||||
@ -259,6 +258,7 @@ mkPJTable = do
|
|||||||
= let acts :: Map PJTableAction (AForm Handler PJTableActionData)
|
= let acts :: Map PJTableAction (AForm Handler PJTableActionData)
|
||||||
acts = mconcat
|
acts = mconcat
|
||||||
[ singletonMap PJActAcknowledge $ pure PJActAcknowledgeData
|
[ singletonMap PJActAcknowledge $ pure PJActAcknowledgeData
|
||||||
|
, singletonMap PJActReprint $ pure PJActReprintData
|
||||||
]
|
]
|
||||||
in renderAForm FormStandard
|
in renderAForm FormStandard
|
||||||
$ (, mempty) . First . Just
|
$ (, mempty) . First . Just
|
||||||
@ -283,11 +283,19 @@ postPrintCenterR = do
|
|||||||
(pjRes, pjTable) <- runDB mkPJTable
|
(pjRes, pjTable) <- runDB mkPJTable
|
||||||
|
|
||||||
formResult pjRes $ \case
|
formResult pjRes $ \case
|
||||||
(PJActAcknowledgeData, Set.toList -> pjIds) -> do
|
(PJActAcknowledgeData, Set.toList -> pjIds) -> do
|
||||||
now <- liftIO getCurrentTime
|
now <- liftIO getCurrentTime
|
||||||
num <- runDB $ updateWhereCount [PrintJobAcknowledged ==. Nothing, PrintJobId <-. pjIds] [PrintJobAcknowledged =. Just now]
|
num <- runDB $ updateWhereCount [PrintJobAcknowledged ==. Nothing, PrintJobId <-. pjIds] [PrintJobAcknowledged =. Just now]
|
||||||
addMessageI Success $ MsgPrintJobAcknowledge num
|
addMessageI Success $ MsgPrintJobAcknowledge num
|
||||||
reloadKeepGetParams PrintCenterR
|
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
|
siteLayoutMsg MsgMenuApc $ do
|
||||||
setTitleI MsgMenuApc
|
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
|
-- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
@ -10,6 +10,7 @@ module Utils.Print
|
|||||||
, sendEmailOrLetter -- directly print or sends by email
|
, sendEmailOrLetter -- directly print or sends by email
|
||||||
, printLetter -- always send a letter
|
, printLetter -- always send a letter
|
||||||
, printHtml -- return letter as Html only
|
, printHtml -- return letter as Html only
|
||||||
|
, reprintPDF -- send a PDF once more the APC
|
||||||
, letterApcIdent -- create acknowledge string for APC
|
, letterApcIdent -- create acknowledge string for APC
|
||||||
, letterFileName -- default filename
|
, letterFileName -- default filename
|
||||||
, encryptPDF
|
, encryptPDF
|
||||||
@ -277,6 +278,20 @@ printLetter' pji pdf = do
|
|||||||
insert_ PrintJob {..}
|
insert_ PrintJob {..}
|
||||||
return $ Right (ok, printJobFilename)
|
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'' :: _ -> DB PureFile
|
||||||
printLetter'' _ = do
|
printLetter'' _ = do
|
||||||
|
|||||||
@ -188,6 +188,17 @@ mkApcIdent uuid envelope lk tnow apcAck = Text.filter apcAcceptedChars $ Text.in
|
|||||||
ensureLength :: Int -> Text -> Text
|
ensureLength :: Int -> Text -> Text
|
||||||
ensureLength n = Text.take n . Text.justifyLeft n 'x'
|
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
|
||||||
apcIdentSeparator = Text.take 3 "___" -- must always have length 3
|
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 :: (MDLetter l, MonadHandler m) => l -> CryptoUUIDUser -> UTCTime -> m Text
|
||||||
letterApcIdent l uuid now = do
|
letterApcIdent l uuid now = do
|
||||||
-- now <- liftIO getCurrentTime
|
-- now <- liftIO getCurrentTime
|
||||||
tnow <- formatTime' "%y%m%d-%H" now
|
tnow <- formatApcIdentTime now
|
||||||
return $ mkApcIdent uuid (getLetterEnvelope l) (getLetterKind l) tnow (pjiApcAcknowledge $ getPJId l)
|
return $ mkApcIdent uuid (getLetterEnvelope l) (getLetterKind l) tnow (pjiApcAcknowledge $ getPJId l)
|
||||||
|
|
||||||
letterFileName :: (MDLetter l) => l -> FilePath
|
letterFileName :: (MDLetter l) => l -> FilePath
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user