chore(filtering): company filter accepts numbers, avs nr filter changed to being exact

This commit is contained in:
Steffen Jost 2023-02-28 13:11:58 +01:00
parent 4d46d9d843
commit f226a2518a
3 changed files with 24 additions and 19 deletions

View File

@ -547,13 +547,14 @@ mkLicenceTable PaginationParameters{..} dbtIdent aLic apids = do
dbtFilter = mconcat dbtFilter = mconcat
[ single $ fltrUserNameEmail queryUser [ single $ fltrUserNameEmail queryUser
, single ("validity" , FilterColumn . E.mkExactFilterLast $ views (to queryQualUser) (validQualification' nowaday)) -- why does this not work? , single ("validity" , FilterColumn . E.mkExactFilterLast $ views (to queryQualUser) (validQualification' nowaday)) -- why does this not work?
, single ( "user-company", FilterColumn $ \(queryUser -> user) criteria -> if , single ( "user-company", FilterColumn . E.mkExistsFilter $ \row criterion ->
| Set.null (criteria :: Set.Set Text) -> E.val True :: E.SqlExpr (E.Value Bool) E.from $ \(usrComp `E.InnerJoin` comp) -> do
| otherwise -> let testname = (E.val criterion :: E.SqlExpr (E.Value (CI Text))) `E.isInfixOf`
E.exists . E.from $ \(ucomp `E.InnerJoin` comp) -> do (E.explicitUnsafeCoerceSqlExprValue "citext" (comp E.^. CompanyName) :: E.SqlExpr (E.Value (CI Text)))
E.on $ ucomp E.^. UserCompanyCompany E.==. comp E.^. CompanyId testnumber nr = E.val nr E.==. comp E.^. CompanyAvsId
E.where_ $ (ucomp E.^. UserCompanyUser E.==. user E.^.UserId) testcrit = maybe testname testnumber $ readMay $ CI.original criterion
E.&&. E.any (E.hasInfix (comp E.^. CompanyName)) (E.val <$> Set.toList criteria) E.on $ usrComp E.^. UserCompanyCompany E.==. comp E.^. CompanyId
E.where_ $ usrComp E.^. UserCompanyUser E.==. queryUser row E.^. UserId E.&&. testcrit
) )
] ]
dbtFilterUI mPrev = mconcat dbtFilterUI mPrev = mconcat

View File

@ -432,14 +432,17 @@ mkLmsTable nlimit noffset isAdmin (Entity qid quali) acts cols psValidator = do
, single ("avs-number" , FilterColumn . E.mkExistsFilter $ \row criterion -> , single ("avs-number" , FilterColumn . E.mkExistsFilter $ \row criterion ->
E.from $ \usrAvs -> -- do E.from $ \usrAvs -> -- do
E.where_ $ usrAvs E.^. UserAvsUser E.==. queryUser row E.^. UserId 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))) )) (E.explicitUnsafeCoerceSqlExprValue "citext" (usrAvs E.^. UserAvsNoPerson) :: E.SqlExpr (E.Value (CI Text))) ))
, single ("user-company", FilterColumn . E.mkExistsFilter $ \row criterion -> , single ("user-company", FilterColumn . E.mkExistsFilter $ \row criterion ->
E.from $ \(usrComp `E.InnerJoin` comp) -> do 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.on $ usrComp E.^. UserCompanyCompany E.==. comp E.^. CompanyId
E.where_ $ usrComp E.^. UserCompanyUser E.==. queryUser row E.^. UserId E.where_ $ usrComp E.^. UserCompanyUser E.==. queryUser row E.^. UserId E.&&. testcrit
E.&&. ((E.val criterion :: E.SqlExpr (E.Value (CI Text))) `E.isInfixOf` )
(E.explicitUnsafeCoerceSqlExprValue "citext" (comp E.^. CompanyName) :: E.SqlExpr (E.Value (CI Text))) ))
] ]
dbtFilterUI mPrev = mconcat dbtFilterUI mPrev = mconcat
[ fltrUserNameEmailHdrUI MsgLmsUser mPrev [ fltrUserNameEmailHdrUI MsgLmsUser mPrev

View File

@ -280,13 +280,14 @@ postUsersR = do
in E.maybe E.true (E.<=. E.val minTime) $ user E.^. UserLastLdapSynchronisation in E.maybe E.true (E.<=. E.val minTime) $ user E.^. UserLastLdapSynchronisation
| otherwise -> E.val True :: E.SqlExpr (E.Value Bool) | otherwise -> E.val True :: E.SqlExpr (E.Value Bool)
) )
, ( "user-company", FilterColumn $ \user criteria -> if , ( "user-company", FilterColumn . E.mkExistsFilter $ \user criterion ->
| Set.null (criteria :: Set.Set Text) -> E.val True :: E.SqlExpr (E.Value Bool) E.from $ \(usrComp `E.InnerJoin` comp) -> do
| otherwise -> let testname = (E.val criterion :: E.SqlExpr (E.Value (CI Text))) `E.isInfixOf`
E.exists . E.from $ \(ucomp `E.InnerJoin` comp) -> do (E.explicitUnsafeCoerceSqlExprValue "citext" (comp E.^. CompanyName) :: E.SqlExpr (E.Value (CI Text)))
E.on $ ucomp E.^. UserCompanyCompany E.==. comp E.^. CompanyId testnumber nr = E.val nr E.==. comp E.^. CompanyAvsId
E.where_ $ (ucomp E.^. UserCompanyUser E.==. user E.^.UserId) testcrit = maybe testname testnumber $ readMay $ CI.original criterion
E.&&. E.any (E.hasInfix (comp E.^. CompanyName)) (E.val <$> Set.toList criteria) 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 , ( "user-supervisor", FilterColumn $ \user criteria -> if
| Set.null (criteria :: Set.Set Text) -> E.val True :: E.SqlExpr (E.Value Bool) | 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 -> , ( "avs-number", FilterColumn $ E.mkExistsFilter $ \user criterion ->
E.from $ \usrAvs -> -- do E.from $ \usrAvs -> -- do
E.where_ $ usrAvs E.^. UserAvsUser E.==. user E.^.UserId 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))) ) (E.explicitUnsafeCoerceSqlExprValue "citext" (usrAvs E.^. UserAvsNoPerson) :: E.SqlExpr (E.Value (CI Text))) )
) )
] ]