chore(lms): display lmsuserlist compiles but incomplete

This commit is contained in:
Steffen Jost 2022-02-10 16:55:22 +01:00
parent 37411b7106
commit e28c75b5e2
7 changed files with 71 additions and 19 deletions

View File

@ -62,3 +62,5 @@ CsvExport: CSV-Export
TableProportion c@Text of'@Text prop@Rational !ident-ok: #{c}/#{of'} (#{rationalToFixed2 (100 * prop)}%) TableProportion c@Text of'@Text prop@Rational !ident-ok: #{c}/#{of'} (#{rationalToFixed2 (100 * prop)}%)
TableProportionNoRatio c@Text of'@Text !ident-ok: #{c}/#{of'} TableProportionNoRatio c@Text of'@Text !ident-ok: #{c}/#{of'}
TableExamFinished: Ergebnisse sichtbar ab TableExamFinished: Ergebnisse sichtbar ab
TableLmsIdent: Identifikation
TableLmsFailed: Gesperrt

View File

@ -62,3 +62,5 @@ CsvExport: CSV export
TableProportion c of' prop: #{c}/#{of'} (#{rationalToFixed2 (100 * prop)}%) TableProportion c of' prop: #{c}/#{of'} (#{rationalToFixed2 (100 * prop)}%)
TableProportionNoRatio c of': #{c}/#{of'} TableProportionNoRatio c of': #{c}/#{of'}
TableExamFinished: Results visible from TableExamFinished: Results visible from
TableLmsIdent: Identifier
TableLmsFailed: Blocked

View File

@ -1,26 +1,32 @@
Qualification Qualification
name Text name (CI Text)
shorthand (CI Text)
-- to be expanded later
deriving Generic deriving Generic
-- LMS Interface Tables, need regular processing by background jobs -- LMS Interface Tables, need regular processing by background jobs
LmsUser LmsUser
qualification QualificationId
user UserId user UserId
ident LmsIdent ident LmsIdent
qualification QualificationId
pin Text pin Text
resetPin Bool resetPin Bool
delete Bool delete Bool
started UTCTime
UniqueLmsUser qualification ident
deriving Generic deriving Generic
LmsUserlist LmsUserlist
qualification QualificationId
ident LmsIdent ident LmsIdent
failed Bool failed Bool
UniqueLmsUserlist ident UniqueLmsUserlist qualification ident
deriving Generic deriving Generic
LmsResult LmsResult
qualification QualificationId
ident LmsIdent ident LmsIdent
success UTCTime success UTCTime
UniqueLmsResult ident UniqueLmsResult qualification ident
deriving Generic deriving Generic

6
routes
View File

@ -255,6 +255,6 @@
!/*WellKnownFileName WellKnownR GET !free !/*WellKnownFileName WellKnownR GET !free
-- OSIS CSV Export Demo -- OSIS CSV Export Demo
/lms LmsR GET /lms/#QualificationId LmsR GET
/lms/userlist LmsUserlistR GET /lms/#QualificationId/userlist LmsUserlistR GET
/lms/result LmsResultR GET /lms/#QualificationId/result LmsResultR GET

View File

@ -133,9 +133,9 @@ breadcrumb HealthR = i18nCrumb MsgMenuHealth Nothing
breadcrumb InstanceR = i18nCrumb MsgMenuInstance Nothing breadcrumb InstanceR = i18nCrumb MsgMenuInstance Nothing
breadcrumb StatusR = i18nCrumb MsgMenuHealth Nothing -- never displayed breadcrumb StatusR = i18nCrumb MsgMenuHealth Nothing -- never displayed
breadcrumb LmsR = i18nCrumb MsgMenuLms Nothing breadcrumb (LmsR _qid) = i18nCrumb MsgMenuLms Nothing
breadcrumb LmsUserlistR = i18nCrumb MsgMenuLmsUserlist $ Just LmsR breadcrumb (LmsUserlistR qid) = i18nCrumb MsgMenuLmsUserlist $ Just $ LmsR qid
breadcrumb LmsResultR = i18nCrumb MsgMenuLmsResult $ Just LmsR breadcrumb (LmsResultR qid) = i18nCrumb MsgMenuLmsResult $ Just $ LmsR qid
breadcrumb ProfileR = i18nCrumb MsgBreadcrumbProfile Nothing breadcrumb ProfileR = i18nCrumb MsgBreadcrumbProfile Nothing
breadcrumb SetDisplayEmailR = i18nCrumb MsgUserDisplayEmail $ Just ProfileR breadcrumb SetDisplayEmailR = i18nCrumb MsgUserDisplayEmail $ Just ProfileR

View File

@ -5,6 +5,8 @@
module Handler.LMS module Handler.LMS
( getLmsR ( getLmsR
, getLmsUserlistR
, getLmsResultR
) )
where where
@ -12,6 +14,7 @@ import Import
import Handler.Utils import Handler.Utils
import qualified Data.Map as Map
import qualified Data.Csv as Csv import qualified Data.Csv as Csv
import qualified Data.Conduit.List as C import qualified Data.Conduit.List as C
import qualified Database.Esqueleto.Legacy as E import qualified Database.Esqueleto.Legacy as E
@ -67,8 +70,9 @@ getYMTH :: MonadHandler m => m Text
getYMTH = formatTime' "%Y%m%d%H" =<< liftIO getCurrentTime getYMTH = formatTime' "%Y%m%d%H" =<< liftIO getCurrentTime
getLmsR :: Handler Html getLmsR :: QualificationId -> Handler Html
getLmsR = do getLmsR _qid = do
-- TODO !!! filter table by qid !!!
{- {-
dbtCsvName <- csvLmsUserFilename dbtCsvName <- csvLmsUserFilename
let dbtIdent = "lmsUsers" :: Text let dbtIdent = "lmsUsers" :: Text
@ -132,15 +136,52 @@ getLmsR = do
$(widgetFile "lms") $(widgetFile "lms")
getLmsUserlistR :: Handler Html mkUserlistTable :: QualificationId -> DB (Any, Widget)
getLmsUserlistR = do mkUserlistTable qid = do
let
userlistTable = DBTable{..}
where
dbtSQLQuery lmslist = do
E.where_ $ lmslist E.^. LmsUserlistQualification E.==. E.val qid
return lmslist
dbtRowKey = (E.^. LmsUserlistId)
dbtProj = dbtProjFilteredPostId
dbtColonnade = dbColonnade $ mconcat
[ sortable (Just "ident") (i18nCell MsgTableLmsIdent) $ \DBRow{ dbrOutput = Entity _ LmsUserlist{..} } -> textCell lmsUserlistIdent
, sortable (Just "failed") (i18nCell MsgTableLmsFailed) $ \DBRow{ dbrOutput = Entity _ LmsUserlist{..} } -> isBadCell lmsUserlistFailed
]
dbtSorting = Map.fromList
[ ("ident" , SortColumn $ \lmslist -> lmslist E.^. LmsUserlistIdent)
, ("failed", SortColumn $ \lmslist -> lmslist E.^. LmsUserlistFailed)
]
dbtFilter = mempty -- TODO !!! continue here !!!
dbtFilterUI = const mempty -- TODO !!! continue here !!! Manual filtering useful to deal with user complaints!
dbtStyle = def
dbtParams = def
dbtIdent :: Text
dbtIdent = "lms-userlist"
dbtCsvEncode = noCsvEncode
dbtCsvDecode = Nothing -- TODO !!! continue here !!! CSV Import is the purpose of this page! Just save to DB, create Job to deal with it later!
dbtExtraReps = []
userlistDBTableValidator = def
& defaultSorting [SortAscBy "ident"]
dbTable userlistDBTableValidator userlistTable
getLmsUserlistR :: QualificationId -> Handler Html
getLmsUserlistR qid = do
lmsTable <- runDB $ view _2 <$> mkUserlistTable qid
siteLayoutMsg MsgMenuLmsUserlist $ do siteLayoutMsg MsgMenuLmsUserlist $ do
setTitleI MsgMenuLmsUserlist setTitleI MsgMenuLmsUserlist
$(widgetFile "lms-userlist") $(widgetFile "lms-userlist")
getLmsResultR :: Handler Html
getLmsResultR = do getLmsResultR :: QualificationId -> Handler Html
getLmsResultR _qid = do
let lmsTable = [whamlet|TODO|] -- TODO: remove me, just for debugging
siteLayoutMsg MsgMenuLmsResult $ do siteLayoutMsg MsgMenuLmsResult $ do
setTitleI MsgMenuLmsResult setTitleI MsgMenuLmsResult
$(widgetFile "lms-result") $(widgetFile "lms-result")

View File

@ -113,6 +113,7 @@ makeClassyFor_ ''StudyDegree
makeClassyFor_ ''StudyTerms makeClassyFor_ ''StudyTerms
makeClassyFor_ ''StudySubTerms makeClassyFor_ ''StudySubTerms
makeClassyFor_ ''Qualification
makeClassyFor_ ''LmsUser makeClassyFor_ ''LmsUser
makeClassyFor_ ''LmsUserlist makeClassyFor_ ''LmsUserlist
makeClassyFor_ ''LmsResult makeClassyFor_ ''LmsResult