From f20cbbb5dfe632627c1dba2cd2deb44583a45b1a Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Mon, 6 Mar 2023 15:26:38 +0000 Subject: [PATCH] chore(qualifications): allow filtering by avsno and company --- src/Handler/Qualification.hs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Handler/Qualification.hs b/src/Handler/Qualification.hs index 98b76d742..6b8ac748d 100644 --- a/src/Handler/Qualification.hs +++ b/src/Handler/Qualification.hs @@ -302,7 +302,21 @@ mkQualificationTable isAdmin (Entity qid quali) acts cols psValidator = do , queryLmsUser row E.?. LmsUserStarted]) ] dbtFilter = mconcat - [ single $ fltrUserNameEmail queryUser + [ single $ fltrUserNameEmail queryUser + , single ("avs-number" , FilterColumn . E.mkExistsFilter $ \row criterion -> + E.from $ \usrAvs -> -- do + E.where_ $ usrAvs E.^. UserAvsUser E.==. queryUser row E.^. UserId + E.&&. ((E.val criterion :: E.SqlExpr (E.Value (CI Text))) E.==. + (E.explicitUnsafeCoerceSqlExprValue "citext" (usrAvs E.^. UserAvsNoPerson) :: E.SqlExpr (E.Value (CI Text))) )) + , single ("user-company", FilterColumn . E.mkExistsFilter $ \row criterion -> + E.from $ \(usrComp `E.InnerJoin` comp) -> do + let testname = (E.val criterion :: E.SqlExpr (E.Value (CI Text))) `E.isInfixOf` + (E.explicitUnsafeCoerceSqlExprValue "citext" (comp E.^. CompanyName) :: E.SqlExpr (E.Value (CI Text))) + testnumber nr = E.val nr E.==. comp E.^. CompanyAvsId + testcrit = maybe testname testnumber $ readMay $ CI.original criterion + E.on $ usrComp E.^. UserCompanyCompany E.==. comp E.^. CompanyId + E.where_ $ usrComp E.^. UserCompanyUser E.==. queryUser row E.^. UserId E.&&. testcrit + ) , single ("validity" , FilterColumn . E.mkExactFilterLast $ views (to queryQualUser) (validQualification nowaday)) , single ("renewal-due" , FilterColumn $ \(queryQualUser -> quser) criterion -> if | Just renewal <- mbRenewal @@ -313,6 +327,8 @@ mkQualificationTable isAdmin (Entity qid quali) acts cols psValidator = do ] dbtFilterUI mPrev = mconcat [ fltrUserNameEmailHdrUI MsgLmsUser mPrev + , prismAForm (singletonFilter "avs-number" ) mPrev $ aopt textField (fslI MsgAvsPersonNo) + , prismAForm (singletonFilter "user-company") mPrev $ aopt textField (fslI MsgTableCompany) , prismAForm (singletonFilter "validity" . maybePrism _PathPiece) mPrev $ aopt (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgFilterLmsValid) , if isNothing mbRenewal then mempty else prismAForm (singletonFilter "renewal-due" . maybePrism _PathPiece) mPrev $ aopt checkBoxField (fslI MsgFilterLmsRenewal)