fix(qualifications): counts for lms/quals correct now
This commit is contained in:
parent
484cac208f
commit
33a847baa3
@ -25,7 +25,7 @@ import Import
|
|||||||
|
|
||||||
import Jobs
|
import Jobs
|
||||||
import Handler.Utils
|
import Handler.Utils
|
||||||
-- import Handler.Utils.Csv
|
import Handler.Utils.Users
|
||||||
import Handler.Utils.LMS
|
import Handler.Utils.LMS
|
||||||
|
|
||||||
|
|
||||||
@ -47,7 +47,6 @@ import Handler.LMS.Userlist as Handler.LMS
|
|||||||
import Handler.LMS.Result as Handler.LMS
|
import Handler.LMS.Result as Handler.LMS
|
||||||
import Handler.LMS.Fake as Handler.LMS -- TODO: remove in production!
|
import Handler.LMS.Fake as Handler.LMS -- TODO: remove in production!
|
||||||
|
|
||||||
-- import Handler.Utils.Qualification (validQualification)
|
|
||||||
|
|
||||||
-- avoids repetition of local definitions
|
-- avoids repetition of local definitions
|
||||||
single :: (k,a) -> Map k a
|
single :: (k,a) -> Map k a
|
||||||
@ -108,19 +107,19 @@ resultAllQualificationTotal = _dbrOutput . _3 . _unValue
|
|||||||
|
|
||||||
mkLmsAllTable :: Bool -> DB (Any, Widget)
|
mkLmsAllTable :: Bool -> DB (Any, Widget)
|
||||||
mkLmsAllTable isAdmin = do
|
mkLmsAllTable isAdmin = do
|
||||||
now <- liftIO getCurrentTime
|
svs <- getSupervisees
|
||||||
|
|
||||||
let
|
let
|
||||||
resultDBTable = DBTable{..}
|
resultDBTable = DBTable{..}
|
||||||
where
|
where
|
||||||
dbtSQLQuery quali = do
|
dbtSQLQuery quali = do
|
||||||
let cusers = Ex.subSelectCount $ do
|
let filterSvs luser = luser Ex.^. LmsUserQualification Ex.==. quali Ex.^. QualificationId
|
||||||
quser <- Ex.from $ Ex.table @QualificationUser
|
Ex.&&. (E.val isAdmin E.||. luser Ex.^. LmsUserUser `Ex.in_` E.vals svs)
|
||||||
Ex.where_ $ quser Ex.^. QualificationUserQualification Ex.==. quali Ex.^. QualificationId
|
cusers = Ex.subSelectCount $ do
|
||||||
|
luser <- Ex.from $ Ex.table @LmsUser
|
||||||
|
Ex.where_ $ filterSvs luser
|
||||||
cactive = Ex.subSelectCount $ do
|
cactive = Ex.subSelectCount $ do
|
||||||
quser <- Ex.from $ Ex.table @QualificationUser
|
luser <- Ex.from $ Ex.table @LmsUser
|
||||||
Ex.where_ $ quser Ex.^. QualificationUserQualification Ex.==. quali Ex.^. QualificationId
|
Ex.where_ $ filterSvs luser Ex.&&. E.isNothing (luser E.^. LmsUserStatus)
|
||||||
Ex.&&. validQualification (utctDay now) quser
|
|
||||||
-- Failed attempt using Join/GroupBy instead of subselect: see branch csv-osis-demo-groupby-problem
|
-- Failed attempt using Join/GroupBy instead of subselect: see branch csv-osis-demo-groupby-problem
|
||||||
return (quali, cactive, cusers)
|
return (quali, cactive, cusers)
|
||||||
dbtRowKey = (Ex.^. QualificationId)
|
dbtRowKey = (Ex.^. QualificationId)
|
||||||
|
|||||||
@ -16,7 +16,7 @@ import Import
|
|||||||
|
|
||||||
-- import Jobs
|
-- import Jobs
|
||||||
import Handler.Utils
|
import Handler.Utils
|
||||||
-- import Handler.Utils.Csv
|
import Handler.Utils.Users
|
||||||
import Handler.Utils.LMS
|
import Handler.Utils.LMS
|
||||||
|
|
||||||
|
|
||||||
@ -46,8 +46,9 @@ getQualificationSchoolR ssh = redirect (QualificationAllR, [("qualification-over
|
|||||||
|
|
||||||
getQualificationAllR :: Handler Html
|
getQualificationAllR :: Handler Html
|
||||||
getQualificationAllR = do
|
getQualificationAllR = do
|
||||||
|
isAdmin <- hasReadAccessTo AdminR
|
||||||
qualiTable <- runDB $ do
|
qualiTable <- runDB $ do
|
||||||
view _2 <$> mkQualificationAllTable
|
view _2 <$> mkQualificationAllTable isAdmin
|
||||||
siteLayoutMsg MsgMenuQualifications $ do
|
siteLayoutMsg MsgMenuQualifications $ do
|
||||||
setTitleI MsgMenuQualifications
|
setTitleI MsgMenuQualifications
|
||||||
$(widgetFile "qualification-all")
|
$(widgetFile "qualification-all")
|
||||||
@ -62,15 +63,9 @@ resultAllQualificationActive = _dbrOutput . _2 . _unValue
|
|||||||
resultAllQualificationTotal :: Lens' AllQualificationTableData Word64
|
resultAllQualificationTotal :: Lens' AllQualificationTableData Word64
|
||||||
resultAllQualificationTotal = _dbrOutput . _3 . _unValue
|
resultAllQualificationTotal = _dbrOutput . _3 . _unValue
|
||||||
|
|
||||||
getSupervisees :: DB (Set UserId)
|
|
||||||
getSupervisees = do
|
|
||||||
uid <- requireAuthId
|
|
||||||
svs <- userSupervisorUser . entityVal <<$>> selectList [UserSupervisorSupervisor ==. uid] [Asc UserSupervisorUser]
|
|
||||||
return $ Set.insert uid $ Set.fromAscList svs
|
|
||||||
|
|
||||||
|
mkQualificationAllTable :: Bool -> DB (Any, Widget)
|
||||||
mkQualificationAllTable :: DB (Any, Widget)
|
mkQualificationAllTable isAdmin = do
|
||||||
mkQualificationAllTable = do
|
|
||||||
svs <- getSupervisees
|
svs <- getSupervisees
|
||||||
now <- liftIO getCurrentTime
|
now <- liftIO getCurrentTime
|
||||||
let
|
let
|
||||||
@ -78,7 +73,7 @@ mkQualificationAllTable = do
|
|||||||
where
|
where
|
||||||
dbtSQLQuery quali = do
|
dbtSQLQuery quali = do
|
||||||
let filterSvs quser = quser Ex.^. QualificationUserQualification Ex.==. quali Ex.^. QualificationId
|
let filterSvs quser = quser Ex.^. QualificationUserQualification Ex.==. quali Ex.^. QualificationId
|
||||||
Ex.&&. quser Ex.^. QualificationUserUser `Ex.in_` E.vals svs
|
Ex.&&. (E.val isAdmin E.||. quser Ex.^. QualificationUserUser `Ex.in_` E.vals svs)
|
||||||
cusers = Ex.subSelectCount $ do
|
cusers = Ex.subSelectCount $ do
|
||||||
quser <- Ex.from $ Ex.table @QualificationUser
|
quser <- Ex.from $ Ex.table @QualificationUser
|
||||||
Ex.where_ $ filterSvs quser
|
Ex.where_ $ filterSvs quser
|
||||||
|
|||||||
@ -18,6 +18,7 @@ module Handler.Utils.Users
|
|||||||
, getPostalAddress, getPostalPreferenceAndAddress
|
, getPostalAddress, getPostalPreferenceAndAddress
|
||||||
, abbrvName
|
, abbrvName
|
||||||
, getReceivers
|
, getReceivers
|
||||||
|
, getSupervisees
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Import
|
import Import
|
||||||
@ -110,6 +111,13 @@ getReceivers uid = do
|
|||||||
then directResult
|
then directResult
|
||||||
else return (underling, receivers, uid `elem` (entityKey <$> receivers))
|
else return (underling, receivers, uid `elem` (entityKey <$> receivers))
|
||||||
|
|
||||||
|
-- | return underlings for currently logged in user
|
||||||
|
getSupervisees :: DB (Set UserId)
|
||||||
|
getSupervisees = do
|
||||||
|
uid <- requireAuthId
|
||||||
|
svs <- userSupervisorUser . entityVal <<$>> selectList [UserSupervisorSupervisor ==. uid] [Asc UserSupervisorUser]
|
||||||
|
return $ Set.insert uid $ Set.fromAscList svs
|
||||||
|
|
||||||
|
|
||||||
computeUserAuthenticationDigest :: AuthenticationMode -> Digest SHA3_256
|
computeUserAuthenticationDigest :: AuthenticationMode -> Digest SHA3_256
|
||||||
computeUserAuthenticationDigest = hashlazy . JSON.encode
|
computeUserAuthenticationDigest = hashlazy . JSON.encode
|
||||||
|
|||||||
Reference in New Issue
Block a user