diff --git a/src/Handler/LMS.hs b/src/Handler/LMS.hs index c8cb5aaa9..f4a43fc61 100644 --- a/src/Handler/LMS.hs +++ b/src/Handler/LMS.hs @@ -385,7 +385,7 @@ mkLmsTable isAdmin (Entity qid quali) acts cols psValidator = do , single ("valid-until" , SortColumnNullsInv $ queryQualUser >>> (E.^. QualificationUserValidUntil)) , single ("last-refresh" , SortColumnNullsInv $ queryQualUser >>> (E.^. QualificationUserLastRefresh)) , single ("first-held" , SortColumnNullsInv $ queryQualUser >>> (E.^. QualificationUserFirstHeld)) - , single ("blocked-due" , SortColumnNullsInv $ queryQualUser >>> (E.^. QualificationUserBlockedDue)) + , single ("blocked-due" , SortColumnNeverNull$ queryQualUser >>> (E.^. QualificationUserBlockedDue)) , single ("schedule-renew", SortColumnNullsInv $ queryQualUser >>> (E.^. QualificationUserScheduleRenewal)) , single ("lms-ident" , SortColumnNullsInv $ queryLmsUser >>> (E.?. LmsUserIdent)) , single ("lms-pin" , SortColumnNullsInv $ queryLmsUser >>> (E.?. LmsUserPin)) diff --git a/src/Handler/Qualification.hs b/src/Handler/Qualification.hs index d6308e771..bdea7efb9 100644 --- a/src/Handler/Qualification.hs +++ b/src/Handler/Qualification.hs @@ -312,10 +312,10 @@ mkQualificationTable isAdmin (Entity qid quali) acts cols psValidator = do , single $ sortUserEmail queryUser , single ("valid-until" , SortColumn $ queryQualUser >>> (E.^. QualificationUserValidUntil)) , single ("last-refresh" , SortColumn $ queryQualUser >>> (E.^. QualificationUserLastRefresh)) - , single ("blocked-due" , SortColumnNullsInv $ queryQualUser >>> (E.^. QualificationUserBlockedDue)) + , single ("blocked-due" , SortColumnNeverNull $ queryQualUser >>> (E.^. QualificationUserBlockedDue)) -- , single ("lms-started" , SortColumn $ queryLmsUser >>> (E.?. LmsUserStarted)) -- , single ("lms-status" , SortColumn $ views (to queryLmsUser) (E.?. LmsUserStatus)) - , single ("lms-status-plus",SortColumn $ \row -> E.coalesce [E.explicitUnsafeCoerceSqlExprValue "timestamp" $ (queryLmsUser row E.?. LmsUserStatus) E.#>>. "{day}" + , single ("lms-status-plus",SortColumnNeverNull $ \row -> E.coalesce [E.explicitUnsafeCoerceSqlExprValue "timestamp" $ (queryLmsUser row E.?. LmsUserStatus) E.#>>. "{day}" , queryLmsUser row E.?. LmsUserStarted]) , single ("schedule-renew", SortColumnNullsInv $ queryQualUser >>> (E.^. QualificationUserScheduleRenewal)) , single ( "user-company" , SortColumn $ \row -> E.subSelect $ E.from $ \(usrComp `E.InnerJoin` comp) -> do @@ -463,7 +463,7 @@ postQualificationR sid qsh = do , sortable (Just "lms-status-plus")(i18nCell MsgTableLmsStatus & cellTooltip (MsgTableLmsStatusTooltip auditMonths)) $ \(preview $ resultLmsUser . _entityVal -> lu) -> foldMap (lmsStatusPlusCell' linkLmsUser) lu ] - psValidator = def & defaultSorting [SortDescBy "blocked-due", SortDescBy "valid-until"] + psValidator = def & defaultSorting [SortDescBy "last-refresh"] tbl <- mkQualificationTable isAdmin qent acts colChoices psValidator return (tbl, qent) diff --git a/src/Handler/Utils/Table/Pagination.hs b/src/Handler/Utils/Table/Pagination.hs index 9b5a6a2e8..9f29e12f4 100644 --- a/src/Handler/Utils/Table/Pagination.hs +++ b/src/Handler/Utils/Table/Pagination.hs @@ -163,6 +163,7 @@ data SomeExprValue = forall a. PersistField a => SomeExprValue { getSomeExprValu data SortColumn t r' = forall a. PersistField a => SortColumn { getSortColumn :: t -> E.SqlExpr (E.Value a) } | forall a. PersistField a => SortColumnNullsInv { getSortColumn :: t -> E.SqlExpr (E.Value a) } + | forall a. PersistField a => SortColumnNeverNull { getSortColumn :: t -> E.SqlExpr (E.Value a) } | SortColumns { getSortColumns :: t -> [SomeExprValue] } | SortProjected { sortProjected :: r' -> r' -> Ordering } @@ -182,10 +183,13 @@ sqlSortDirection (SortColumn e ) = Just $ \case sqlSortDirection (SortColumnNullsInv e ) = Just $ \case SortAsc -> pure . E.ascNullsFirst . e SortDesc -> pure . E.descNullsLast . e +sqlSortDirection (SortColumnNeverNull e ) = Just $ \case + SortAsc -> pure . E.asc . e + SortDesc -> pure . E.descNullsLast . e sqlSortDirection (SortColumns es) = Just $ \case SortAsc -> fmap (\(SomeExprValue v) -> E.asc v) . es SortDesc -> fmap (\(SomeExprValue v) -> E.desc v) . es -sqlSortDirection _ = Nothing +sqlSortDirection _ = Nothing sortDirectionProjected :: SortColumn t r' -> r' -> r' -> Ordering sortDirectionProjected SortProjected{..} = sortProjected