From f226a2518aa2c2ea7b133bfcded640a508fed45c Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Tue, 28 Feb 2023 13:11:58 +0100 Subject: [PATCH] chore(filtering): company filter accepts numbers, avs nr filter changed to being exact --- src/Handler/Admin/Avs.hs | 15 ++++++++------- src/Handler/LMS.hs | 11 +++++++---- src/Handler/Users.hs | 17 +++++++++-------- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/Handler/Admin/Avs.hs b/src/Handler/Admin/Avs.hs index 45d90bbe1..bb3832572 100644 --- a/src/Handler/Admin/Avs.hs +++ b/src/Handler/Admin/Avs.hs @@ -547,13 +547,14 @@ mkLicenceTable PaginationParameters{..} dbtIdent aLic apids = do dbtFilter = mconcat [ single $ fltrUserNameEmail queryUser , single ("validity" , FilterColumn . E.mkExactFilterLast $ views (to queryQualUser) (validQualification' nowaday)) -- why does this not work? - , single ( "user-company", FilterColumn $ \(queryUser -> user) criteria -> if - | Set.null (criteria :: Set.Set Text) -> E.val True :: E.SqlExpr (E.Value Bool) - | otherwise -> - E.exists . E.from $ \(ucomp `E.InnerJoin` comp) -> do - E.on $ ucomp E.^. UserCompanyCompany E.==. comp E.^. CompanyId - E.where_ $ (ucomp E.^. UserCompanyUser E.==. user E.^.UserId) - E.&&. E.any (E.hasInfix (comp E.^. CompanyName)) (E.val <$> Set.toList criteria) + , 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 ) ] dbtFilterUI mPrev = mconcat diff --git a/src/Handler/LMS.hs b/src/Handler/LMS.hs index d618fac25..80986629f 100644 --- a/src/Handler/LMS.hs +++ b/src/Handler/LMS.hs @@ -432,14 +432,17 @@ mkLmsTable nlimit noffset isAdmin (Entity qid quali) acts cols psValidator = do , 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.isInfixOf` + 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.&&. ((E.val criterion :: E.SqlExpr (E.Value (CI Text))) `E.isInfixOf` - (E.explicitUnsafeCoerceSqlExprValue "citext" (comp E.^. CompanyName) :: E.SqlExpr (E.Value (CI Text))) )) + E.where_ $ usrComp E.^. UserCompanyUser E.==. queryUser row E.^. UserId E.&&. testcrit + ) ] dbtFilterUI mPrev = mconcat [ fltrUserNameEmailHdrUI MsgLmsUser mPrev diff --git a/src/Handler/Users.hs b/src/Handler/Users.hs index eabf9452e..d66aed45e 100644 --- a/src/Handler/Users.hs +++ b/src/Handler/Users.hs @@ -280,13 +280,14 @@ postUsersR = do in E.maybe E.true (E.<=. E.val minTime) $ user E.^. UserLastLdapSynchronisation | otherwise -> E.val True :: E.SqlExpr (E.Value Bool) ) - , ( "user-company", FilterColumn $ \user criteria -> if - | Set.null (criteria :: Set.Set Text) -> E.val True :: E.SqlExpr (E.Value Bool) - | otherwise -> - E.exists . E.from $ \(ucomp `E.InnerJoin` comp) -> do - E.on $ ucomp E.^. UserCompanyCompany E.==. comp E.^. CompanyId - E.where_ $ (ucomp E.^. UserCompanyUser E.==. user E.^.UserId) - E.&&. E.any (E.hasInfix (comp E.^. CompanyName)) (E.val <$> Set.toList criteria) + , ( "user-company", FilterColumn . E.mkExistsFilter $ \user 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.==. user E.^. UserId E.&&. testcrit ) , ( "user-supervisor", FilterColumn $ \user criteria -> if | Set.null (criteria :: Set.Set Text) -> E.val True :: E.SqlExpr (E.Value Bool) @@ -299,7 +300,7 @@ postUsersR = do , ( "avs-number", FilterColumn $ E.mkExistsFilter $ \user criterion -> E.from $ \usrAvs -> -- do E.where_ $ usrAvs E.^. UserAvsUser E.==. user E.^.UserId - E.&&. ((E.val criterion :: E.SqlExpr (E.Value (CI Text))) `E.isInfixOf` + E.&&. ((E.val criterion :: E.SqlExpr (E.Value (CI Text))) E.==. (E.explicitUnsafeCoerceSqlExprValue "citext" (usrAvs E.^. UserAvsNoPerson) :: E.SqlExpr (E.Value (CI Text))) ) ) ]