diff --git a/src/Handler/LMS.hs b/src/Handler/LMS.hs index a707d6f81..942af313a 100644 --- a/src/Handler/LMS.hs +++ b/src/Handler/LMS.hs @@ -46,76 +46,89 @@ getLmsAllR = do $(widgetFile "lms-all") type AllQualicationTableExpr = E.SqlExpr (Entity Qualification) `E.InnerJoin` E.SqlExpr (Entity QualificationUser) +queryAllQualification :: IndexPreservingGetter AllQualicationTableExpr (E.SqlExpr (Entity Qualification)) +queryAllQualification = to $(sqlIJproj 2 1) -type AllQualificationTableData = DBRow (Entity Qualification, Ex.Value Word64) -queryAllQualification :: Lens' AllQualificationTableData Qualification -queryAllQualification = _dbrOutput . _1 . _entityVal +queryAllQualificationUser :: IndexPreservingGetter AllQualicationTableExpr (E.SqlExpr (Entity QualificationUser)) +queryAllQualificationUser = to $(sqlIJproj 2 2) + +type AllQualificationTableData = DBRow (Entity Qualification, Entity QualificationUser) -- E.Value Word64) +resultAllQualification :: Lens' AllQualificationTableData (Entity Qualification) +resultAllQualification = _dbrOutput . _1 + +--resultAllQualificationCount :: Lens' AllQualificationTableData Word64 +--resultAllQualificationCount = _dbrOutput . _2 . _unValue + +resultAllQualificationUser :: Lens' AllQualificationTableData (Entity QualificationUser) +resultAllQualificationUser = _dbrOutput . _2 -queryAllQualification1 :: AllQualicationTableExpr -> E.SqlExpr (Entity Qualification) -queryAllQualification1 = $(sqlIJproj 2 1) -queryAllQualification2 :: AllQualicationTableExpr -> E.SqlExpr (Entity QualificationUser) -queryAllQualification2 = $(sqlIJproj 2 2) -mkLmsAllTable :: DB (Any, Widget) +mkLmsAllTable :: DB (Widget) mkLmsAllTable = do let resultDBTable = DBTable{..} where + dbtSQLQuery :: AllQualicationTableExpr -> E.SqlQuery _ dbtSQLQuery = runReaderT $ do - quali <- asks queryAllQualification1 - quser <- asks queryAllQualification2 + quali <- view queryAllQualification + quser <- view queryAllQualificationUser lift $ do - -- 1. Just a constant dummy for debugging: - -- let x = E.val (42::Word64) - -- return (quali, x) - -- - -- 2. SubSelect with old syntax: - -- x <- pure . E.subSelectCount . E.from $ \quser -> - -- E.where_ $ quser E.^. QualificationUserQualification E.==. quali E.^. QualificationId - -- return (quali, x) - -- - -- 3. SubSelect with new syntax: - --x <- pure . Ex.subSelectCount $ do - -- quser <- Ex.from $ Ex.table @QualificationUser - -- Ex.where_ $ quser Ex.^. QualificationUserQualification Ex.==. quali Ex.^. QualificationId - --return (quali, x) - -- - -- 4. Join / GroupBy + -- 1. Just a constant dummy for debugging: + -- let x = E.val (42::Word64) + -- return (quali, x) + -- + -- 2. SubSelect with old syntax: + -- x <- pure . E.subSelectCount . E.from $ \quser -> + -- E.where_ $ quser E.^. QualificationUserQualification E.==. quali E.^. QualificationId + -- return (quali, x) + -- + -- 3. SubSelect with new syntax: + --x <- pure . Ex.subSelectCount $ do + -- quser <- Ex.from $ Ex.table @QualificationUser + -- Ex.where_ $ quser Ex.^. QualificationUserQualification Ex.==. quali Ex.^. QualificationId + --return (quali, x) + -- + -- 4. Join / GroupBy E.on $ quser E.^. QualificationUserQualification E.==. quali E.^. QualificationId - E.groupBy (quali E.^. QualificationId) - return (quali, E.count $ quser E.^. QualificationUserId) - dbtRowKey = (E.^. QualificationId) - dbtProj = dbtProjFilteredPostId -- TODO: or dbtProjSimple what is the difference? + -- E.groupBy (quali E.^. QualificationId) + return (quali, quser) -- E.count $ quser E.^. QualificationUserId) + dbtRowKey = views queryAllQualification (E.^. QualificationId) + dbtProj :: _ AllQualificationTableData + dbtProj = dbtProjId -- dbtProjFilteredPostId -- TODO: or dbtProjSimple what is the difference? + dbtColonnade = mconcat + [ + sortable (Just "qualification-school") (i18nCell MsgTableLmsIdent) $ \(view resultAllQualification -> Entity _ quali) -> + let qsh = qualificationShorthand quali + in anchorCell (LmsR (qualificationSchool quali) qsh) $ toWgt qsh + ] + dbtSorting = mempty + dbtFilter = mempty + dbtFilterUI = mempty +{- dbtColonnade = dbColonnade $ mconcat - [ colSchool $ queryAllQualification . _qualificationSchool - , sortable (Just "qualification-short") (i18nCell MsgTableLmsIdent) $ \(view queryAllQualification -> quali) -> + [ colSchool $ resultAllQualification . _qualificationSchool + , sortable (Just "qualification-short") (i18nCell MsgTableLmsIdent) $ \(view resultAllQualification -> quali) -> let qsh = qualificationShorthand quali in anchorCell (LmsR (qualificationSchool quali) qsh) $ toWgt qsh - , sortable Nothing (i18nCell MsgTableLmsUser) $ \(view $ _dbrOutput . _1 . _entityKey -> qualid) -> sqlCell $ do - num <- fmap (maybe 0 (max 0 . Ex.unValue) . listToMaybe) . - Ex.select $ do - quser <- Ex.from $ Ex.table @QualificationUser - Ex.where_ $ quser Ex.^. QualificationUserQualification Ex.==. Ex.val qualid - pure Ex.countRows - return $ word2widget num , sortable Nothing (i18nCell MsgMenuAdminTest) $ \(view $ _dbrOutput . _2 . _unValue -> n) -> wgtCell $ word2widget n ] -- TODO: add more columns for manual debugging view !!! dbtSorting = mconcat [ - sortSchool $ to (E.^. QualificationSchool) - , singletonMap "qualification-short" $ SortColumn (E.^. QualificationShorthand) + sortSchool $ views queryAllQualification (E.^. QualificationSchool) + , singletonMap "qualification-short" $ SortColumn $ views queryAllQualification (E.^. QualificationShorthand) ] dbtFilter = mconcat [ - fltrSchool $ to (E.^. QualificationSchool) + fltrSchool $ views queryAllQualification (E.^. QualificationSchool) ] dbtFilterUI = mconcat [ fltrSchoolUI ] - dbtStyle = def { dbsFilterLayout = defaultDBSFilterLayout } +-} + dbtStyle = def -- { dbsFilterLayout = defaultDBSFilterLayout } dbtParams = def dbtIdent :: Text dbtIdent = "qualification-overview" @@ -124,7 +137,7 @@ mkLmsAllTable = do dbtExtraReps = [] resultDBTableValidator = def - & defaultSorting [SortAscBy "school", SortAscBy "qualification-short"] + -- & defaultSorting [SortAscBy "school", SortAscBy "qualification-short"] dbTable resultDBTableValidator resultDBTable @@ -236,7 +249,7 @@ getLmsR = postLmsR postLmsR sid qsh = do (lmsTable, quali) <- runDB $ do Entity qid quali <- getBy404 $ SchoolQualificationShort sid qsh - tbl <- view _2 <$> mkLmsTable qid + tbl <- mkLmsTable qid return (tbl, quali) let heading = citext2widget $ qualificationName quali siteLayout heading $ do