chore(lpr): convenience buttons for print center
This commit is contained in:
parent
d75f741289
commit
a5173bdf22
@ -5,6 +5,7 @@ PrintJobId !ident-ok: Id
|
|||||||
PrintJobCreated: Gesendet
|
PrintJobCreated: Gesendet
|
||||||
PrintJobAcknowledged: Bestätigt
|
PrintJobAcknowledged: Bestätigt
|
||||||
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
|
||||||
|
PrintJobAcknowledgeQuestion n@Int64 d@Text: #{n} #{pluralDE n "Druckauftrag" "Druckaufräge"} vom #{d} als gedruckt und versendet bestätigen?
|
||||||
PrintRecipient: Empfänger
|
PrintRecipient: Empfänger
|
||||||
PrintSender !ident-ok: Sender
|
PrintSender !ident-ok: Sender
|
||||||
PrintCourse: Kurse
|
PrintCourse: Kurse
|
||||||
|
|||||||
@ -5,6 +5,7 @@ PrintJobId: Id
|
|||||||
PrintJobCreated: Created
|
PrintJobCreated: Created
|
||||||
PrintJobAcknowledged: Acknowledged
|
PrintJobAcknowledged: Acknowledged
|
||||||
PrintJobAcknowledge n@Int64: #{n} #{pluralENs n "print-job"} marked as printed and mailed
|
PrintJobAcknowledge n@Int64: #{n} #{pluralENs n "print-job"} marked as printed and mailed
|
||||||
|
PrintJobAcknowledgeQuestion n d: Mark #{n} #{pluralENs n "print-job"} issued on #{d} as printed and mailed already?
|
||||||
PrintRecipient: Recipient
|
PrintRecipient: Recipient
|
||||||
PrintSender: Sender
|
PrintSender: Sender
|
||||||
PrintCourse: Course
|
PrintCourse: Course
|
||||||
|
|||||||
@ -60,4 +60,5 @@ BtnNotifyNewCourseForceOn: Benachrichtigen
|
|||||||
BtnNotifyNewCourseForceOff: Nicht benachrichtigen
|
BtnNotifyNewCourseForceOff: Nicht benachrichtigen
|
||||||
BtnUserAssimilate: Assimilieren
|
BtnUserAssimilate: Assimilieren
|
||||||
BtnCloseExam: Prüfung abschließen
|
BtnCloseExam: Prüfung abschließen
|
||||||
BtnFinishExam: Prüfungsergebnisse sichtbar schalten
|
BtnFinishExam: Prüfungsergebnisse sichtbar schalten
|
||||||
|
BtnConfirm: Bestätigen
|
||||||
@ -60,4 +60,5 @@ BtnNotifyNewCourseForceOn: Notify me
|
|||||||
BtnNotifyNewCourseForceOff: Do not notify me
|
BtnNotifyNewCourseForceOff: Do not notify me
|
||||||
BtnUserAssimilate: Assimilate
|
BtnUserAssimilate: Assimilate
|
||||||
BtnCloseExam: Close exam
|
BtnCloseExam: Close exam
|
||||||
BtnFinishExam: Make results visible
|
BtnFinishExam: Make results visible
|
||||||
|
BtnConfirm: Confirm
|
||||||
1
routes
1
routes
@ -65,6 +65,7 @@
|
|||||||
/admin/ldap AdminLdapR GET POST
|
/admin/ldap AdminLdapR GET POST
|
||||||
|
|
||||||
/print PrintCenterR GET POST !system-printer
|
/print PrintCenterR GET POST !system-printer
|
||||||
|
/print/acknowledge/#Day PrintAcknowR GET POST !system-printer
|
||||||
/print/send PrintSendR GET POST
|
/print/send PrintSendR GET POST
|
||||||
/print/download/#CryptoUUIDPrintJob PrintDownloadR GET !system-printer
|
/print/download/#CryptoUUIDPrintJob PrintDownloadR GET !system-printer
|
||||||
|
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import Foundation.Routes
|
|||||||
import Foundation.I18n
|
import Foundation.I18n
|
||||||
import Foundation.Authorization
|
import Foundation.Authorization
|
||||||
|
|
||||||
|
import Handler.Utils.DateTime
|
||||||
import Handler.Utils.Memcached
|
import Handler.Utils.Memcached
|
||||||
import Handler.Utils.ExamOffice.Course
|
import Handler.Utils.ExamOffice.Course
|
||||||
import Utils.Sheet
|
import Utils.Sheet
|
||||||
@ -32,6 +33,7 @@ import Utils.Sheet
|
|||||||
import qualified Data.CaseInsensitive as CI
|
import qualified Data.CaseInsensitive as CI
|
||||||
import qualified Database.Esqueleto.Legacy as E
|
import qualified Database.Esqueleto.Legacy as E
|
||||||
import qualified Database.Esqueleto.Utils as E
|
import qualified Database.Esqueleto.Utils as E
|
||||||
|
import qualified Database.Esqueleto.Experimental as Ex
|
||||||
|
|
||||||
import Control.Monad.Trans.State (execStateT)
|
import Control.Monad.Trans.State (execStateT)
|
||||||
|
|
||||||
@ -107,9 +109,10 @@ breadcrumb AdminCrontabR = i18nCrumb MsgBreadcrumbAdminCrontab $ Just AdminR
|
|||||||
breadcrumb AdminAvsR = i18nCrumb MsgMenuAvs $ Just AdminR
|
breadcrumb AdminAvsR = i18nCrumb MsgMenuAvs $ Just AdminR
|
||||||
breadcrumb AdminLdapR = i18nCrumb MsgMenuLdap $ Just AdminR
|
breadcrumb AdminLdapR = i18nCrumb MsgMenuLdap $ Just AdminR
|
||||||
|
|
||||||
breadcrumb PrintCenterR = i18nCrumb MsgMenuApc Nothing
|
breadcrumb PrintCenterR = i18nCrumb MsgMenuApc Nothing
|
||||||
breadcrumb PrintSendR = i18nCrumb MsgMenuPrintSend $ Just PrintCenterR
|
breadcrumb PrintSendR = i18nCrumb MsgMenuPrintSend $ Just PrintCenterR
|
||||||
breadcrumb (PrintDownloadR _) = i18nCrumb MsgMenuPrintDownload $ Just PrintCenterR
|
breadcrumb (PrintDownloadR _) = i18nCrumb MsgMenuPrintDownload $ Just PrintCenterR
|
||||||
|
breadcrumb (PrintAcknowR _) = i18nCrumb MsgMenuPrintSend $ Just PrintCenterR
|
||||||
|
|
||||||
breadcrumb SchoolListR = i18nCrumb MsgMenuSchoolList $ Just AdminR
|
breadcrumb SchoolListR = i18nCrumb MsgMenuSchoolList $ Just AdminR
|
||||||
breadcrumb (SchoolR ssh sRoute) = case sRoute of
|
breadcrumb (SchoolR ssh sRoute) = case sRoute of
|
||||||
@ -2510,19 +2513,41 @@ pageActions ApiDocsR = return
|
|||||||
, navChildren = []
|
, navChildren = []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
pageActions PrintCenterR = return
|
pageActions PrintCenterR = do
|
||||||
[ NavPageActionPrimary
|
openDays <- useRunDB $ Ex.select $ do
|
||||||
{ navLink = NavLink
|
pj <- Ex.from $ Ex.table @PrintJob
|
||||||
{ navLabel = MsgMenuPrintSend
|
let pjDay = E.day $ pj Ex.^. PrintJobCreated
|
||||||
, navRoute = PrintSendR
|
Ex.where_ $ Ex.isNothing (pj Ex.^. PrintJobAcknowledged)
|
||||||
, navAccess' = NavAccessTrue
|
Ex.groupBy pjDay
|
||||||
, navType = NavTypeLink { navModal = False }
|
Ex.orderBy [ Ex.asc pjDay ]
|
||||||
, navQuick' = mempty
|
pure (pjDay, Ex.countRows)
|
||||||
, navForceActive = False
|
let toDayAck (Ex.unValue -> d, Ex.unValue -> n::Int) = do
|
||||||
}
|
dtxt <- formatTime SelFormatDate d
|
||||||
, navChildren = []
|
let msg = "#" <> tshow n <> ", " <> dtxt
|
||||||
}
|
return NavPageActionPrimary
|
||||||
]
|
{ navLink = NavLink
|
||||||
|
{ navLabel = SomeMessage msg
|
||||||
|
, navRoute = PrintAcknowR d
|
||||||
|
, navAccess' = NavAccessTrue
|
||||||
|
, navType = NavTypeLink { navModal = True }
|
||||||
|
, navQuick' = mempty
|
||||||
|
, navForceActive = False
|
||||||
|
}
|
||||||
|
, navChildren = []
|
||||||
|
}
|
||||||
|
manualSend = NavPageActionSecondary
|
||||||
|
{ navLink = NavLink
|
||||||
|
{ navLabel = MsgMenuPrintSend
|
||||||
|
, navRoute = PrintSendR
|
||||||
|
, navAccess' = NavAccessTrue
|
||||||
|
, navType = NavTypeLink { navModal = False }
|
||||||
|
, navQuick' = mempty
|
||||||
|
, navForceActive = False
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dayLinks <- mapM toDayAck openDays
|
||||||
|
return $ manualSend : take 8 dayLinks
|
||||||
|
|
||||||
pageActions _ = return []
|
pageActions _ = return []
|
||||||
|
|
||||||
submissionList :: ( MonadIO m
|
submissionList :: ( MonadIO m
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
module Handler.PrintCenter
|
module Handler.PrintCenter
|
||||||
( getPrintCenterR, postPrintCenterR
|
( getPrintCenterR, postPrintCenterR
|
||||||
|
, getPrintAcknowR, postPrintAcknowR
|
||||||
, getPrintSendR , postPrintSendR
|
, getPrintSendR , postPrintSendR
|
||||||
, getPrintDownloadR
|
, getPrintDownloadR
|
||||||
) where
|
) where
|
||||||
@ -273,10 +274,9 @@ postPrintCenterR = do
|
|||||||
(pjRes, pjTable) <- runDB mkPJTable
|
(pjRes, pjTable) <- runDB mkPJTable
|
||||||
|
|
||||||
formResult pjRes $ \case
|
formResult pjRes $ \case
|
||||||
(PJActAcknowledgeData, pjIds) -> do
|
(PJActAcknowledgeData, Set.toList -> pjIds) -> do
|
||||||
let setPJIds = Set.toList pjIds
|
|
||||||
now <- liftIO getCurrentTime
|
now <- liftIO getCurrentTime
|
||||||
num <- runDB $ updateWhereCount [PrintJobAcknowledged ==. Nothing, PrintJobId <-. setPJIds] [PrintJobAcknowledged =. Just now]
|
num <- runDB $ updateWhereCount [PrintJobAcknowledged ==. Nothing, PrintJobId <-. pjIds] [PrintJobAcknowledged =. Just now]
|
||||||
addMessageI Success $ MsgPrintJobAcknowledge num
|
addMessageI Success $ MsgPrintJobAcknowledge num
|
||||||
redirect currentRoute
|
redirect currentRoute
|
||||||
|
|
||||||
@ -348,4 +348,41 @@ getPrintDownloadR cupj = do
|
|||||||
E.where_ (pj E.^. PrintJobId E.==. E.val pjId)
|
E.where_ (pj E.^. PrintJobId E.==. E.val pjId)
|
||||||
-- return file entity
|
-- return file entity
|
||||||
return pj
|
return pj
|
||||||
-}
|
-}
|
||||||
|
|
||||||
|
|
||||||
|
getPrintAcknowR, postPrintAcknowR :: Day -> Handler Html
|
||||||
|
getPrintAcknowR = postPrintAcknowR
|
||||||
|
postPrintAcknowR ackDay = do
|
||||||
|
-- TODO: besser mit cryptoids arbeiten und an den Post Request hängen?!
|
||||||
|
((ackRes, ackWgt), ackEnctype) <- runFormPost (identifyForm FIDPrintAcknowledge buttonForm :: Form ButtonConfirm)
|
||||||
|
let ackForm = wrapForm ackWgt def
|
||||||
|
{ formAction = Just $ SomeRoute $ PrintAcknowR ackDay
|
||||||
|
, formEncoding = ackEnctype
|
||||||
|
, formSubmit = FormNoSubmit
|
||||||
|
}
|
||||||
|
formResult ackRes $ \BtnConfirm -> do
|
||||||
|
now <- liftIO getCurrentTime
|
||||||
|
num <- runDB $
|
||||||
|
E.updateCount $ \pj -> do
|
||||||
|
E.set pj [ PrintJobAcknowledged E.=. E.just (E.val now) ]
|
||||||
|
E.where_ $ E.isNothing (pj E.^. PrintJobAcknowledged)
|
||||||
|
E.&&. E.val ackDay E.==. E.day (pj E.^. PrintJobCreated)
|
||||||
|
-- Ex.updateCount $ do
|
||||||
|
-- pj <- Ex.from $ Ex.table @PrintJob
|
||||||
|
-- Ex.set pj [ PrintJobAcknowledged Ex.=. Ex.just (Ex.val now) ]
|
||||||
|
-- Ex.where_ $ Ex.isNothing (pj Ex.^. PrintJobAcknowledged)
|
||||||
|
-- Ex.&&. Ex.val ackDay Ex.==. E.day (pj Ex.^. PrintJobCreated)
|
||||||
|
addMessageI Success $ MsgPrintJobAcknowledge num
|
||||||
|
redirect PrintCenterR
|
||||||
|
ackNum' <- runDB $ Ex.select $ do
|
||||||
|
pj <- Ex.from $ Ex.table @PrintJob
|
||||||
|
Ex.where_ $ Ex.isNothing (pj Ex.^. PrintJobAcknowledged)
|
||||||
|
Ex.&&. Ex.val ackDay Ex.==. E.day (pj Ex.^. PrintJobCreated)
|
||||||
|
pure Ex.countRows
|
||||||
|
let ackNum = headDef 0 $ Ex.unValue <$> ackNum'
|
||||||
|
ackDayText <- formatTime SelFormatDate ackDay
|
||||||
|
siteLayoutMsg
|
||||||
|
(MsgPrintJobAcknowledgeQuestion ackNum ackDayText)
|
||||||
|
ackForm
|
||||||
|
|
||||||
|
|||||||
@ -126,6 +126,21 @@ instance Button UniWorX ButtonHandIn where
|
|||||||
btnClasses BtnHandIn = [BCIsButton, BCPrimary]
|
btnClasses BtnHandIn = [BCIsButton, BCPrimary]
|
||||||
|
|
||||||
|
|
||||||
|
data ButtonConfirm = BtnConfirm
|
||||||
|
deriving (Enum, Eq, Ord, Bounded, Read, Show, Generic, Typeable)
|
||||||
|
instance Universe ButtonConfirm
|
||||||
|
instance Finite ButtonConfirm
|
||||||
|
|
||||||
|
nullaryPathPiece ''ButtonConfirm $ camelToPathPiece' 1
|
||||||
|
|
||||||
|
embedRenderMessage ''UniWorX ''ButtonConfirm id
|
||||||
|
instance Button UniWorX ButtonConfirm where
|
||||||
|
btnClasses BtnConfirm = [BCIsButton, BCDanger]
|
||||||
|
|
||||||
|
--confirmButton :: (Button (HandlerSite m) ButtonConfirm, MonadHandler m) => AForm m ()
|
||||||
|
--confirmButton = combinedButtonFieldF_ (Proxy @ButtonConfirm) ""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
data ButtonRegister = BtnRegister | BtnDeregister
|
data ButtonRegister = BtnRegister | BtnDeregister
|
||||||
deriving (Enum, Eq, Ord, Bounded, Read, Show, Generic, Typeable)
|
deriving (Enum, Eq, Ord, Bounded, Read, Show, Generic, Typeable)
|
||||||
|
|||||||
@ -278,6 +278,7 @@ data FormIdentifier
|
|||||||
| FIDDBTableCsvImport Text
|
| FIDDBTableCsvImport Text
|
||||||
| FIDDBTableCsvImportConfirm Text
|
| FIDDBTableCsvImportConfirm Text
|
||||||
| FIDDelete
|
| FIDDelete
|
||||||
|
| FIDPrintAcknowledge
|
||||||
| FIDCourseRegister
|
| FIDCourseRegister
|
||||||
| FIDuserRights
|
| FIDuserRights
|
||||||
| FIDUserSystemFunctions
|
| FIDUserSystemFunctions
|
||||||
|
|||||||
Reference in New Issue
Block a user