From c2c12b9643e81efd5f16e18e4fca4dcbd581db11 Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Fri, 9 Aug 2019 16:31:50 +0200 Subject: [PATCH] feat(course-teaser): filter by open registration --- src/Handler/Course/List.hs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Handler/Course/List.hs b/src/Handler/Course/List.hs index 55ab97a2b..c3d110a8a 100644 --- a/src/Handler/Course/List.hs +++ b/src/Handler/Course/List.hs @@ -74,6 +74,7 @@ makeCourseTable :: ( IsDBTable m x, ToSortable h, Functor h, DBResult m x ~ ((), => _ -> Colonnade h CourseTableData (DBCell m x) -> PSValidator m x -> DB Widget makeCourseTable whereClause colChoices psValidator = do muid <- lift maybeAuthId + now <- liftIO getCurrentTime let dbtSQLQuery :: CourseTableExpr -> E.SqlQuery _ dbtSQLQuery qin@(course `E.InnerJoin` school) = do E.on $ course E.^. CourseSchool E.==. school E.^. SchoolId @@ -135,12 +136,12 @@ makeCourseTable whereClause colChoices psValidator = do user <- lecturerQuery (course E.^. CourseId) t E.where_ $ E.any (E.hasInfix (user E.^. UserSurname) . E.val) (criterias :: Set.Set Text) ) - -- , ( "openregistration", FilterColumn $ \(course `E.InnerJoin` _school) criterion -> case getLast (criterion :: Last Bool) of - -- Nothing -> E.val True :: E.SqlExpr (E.Value Bool) - -- -- TODO: get current time?? - -- Just True -> (maybe (E.val True :: E.SqlExpr (E.Value Bool)) ((E.<=.) today) $ course E.^. CourseRegisterTo) E.&&. (maybe (E.val True :: E.SqlExpr (E.Value Bool)) ((E.>=.) today) $ course E.^. CourseRegisterFrom) - -- _ -> E.val False :: E.SqlExpr (E.Value Bool) -- TODO: rethink - -- ) + , ( "openregistration", FilterColumn $ \(course `E.InnerJoin` _school :: CourseTableExpr) criterion -> case getLast (criterion :: Last Bool) of + Nothing -> E.val True + Just b -> let regTo = course E.^. CourseRegisterTo + regFrom = course E.^. CourseRegisterFrom + in (E.==.) (E.val b) $ (E.isNothing regTo E.||. E.val (Just now) E.<=. regTo) E.&&. E.val (Just now) E.>=. regFrom + ) , ( "registered", FilterColumn $ \tExpr criterion -> case getLast (criterion :: Last Bool) of Nothing -> E.val True :: E.SqlExpr (E.Value Bool) Just needle -> course2Registered muid tExpr E.==. E.val needle @@ -157,7 +158,7 @@ makeCourseTable whereClause colChoices psValidator = do , Just $ prismAForm (singletonFilter "schoolshort" . maybePrism (_PathPiece . from _SchoolId)) mPrev $ aopt (hoistField lift schoolField) (fslI MsgCourseSchool) , Just $ prismAForm (singletonFilter "lecturer") mPrev $ aopt textField (fslI MsgCourseLecturer) , Just $ prismAForm (singletonFilter "search") mPrev $ aopt textField (fslI MsgCourseFilterSearch) - -- , Just $ prismAForm (singletonFilter "openregistration" . maybePrism _PathPiece) mPrev $ aopt checkboxField (fslI MsgCourseRegisterOpen) + , Just $ prismAForm (singletonFilter "openregistration" . maybePrism _PathPiece) mPrev $ aopt boolField (fslI MsgCourseRegisterOpen) , muid $> prismAForm (singletonFilter "registered" . maybePrism _PathPiece) mPrev (aopt boolField (fslI MsgCourseFilterRegistered)) ] , dbtStyle = def