From 5698e9ca0bb19585b9a9d2d3c10f8b5f99ae5db9 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Mon, 8 Feb 2021 14:35:26 +0100 Subject: [PATCH] fix: restore storting for exam-office exams --- src/Handler/ExamOffice/Exams.hs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Handler/ExamOffice/Exams.hs b/src/Handler/ExamOffice/Exams.hs index e9249d6d9..7b98ed007 100644 --- a/src/Handler/ExamOffice/Exams.hs +++ b/src/Handler/ExamOffice/Exams.hs @@ -129,7 +129,7 @@ getEOExamsR = do _other -> return $ error "Got exam & externalExam in same result" - colSynced = Colonnade.singleton (fromSortable . Sortable Nothing $ i18nCell MsgExamSynchronised) $ \x -> flip runReader x $ do + colSynced = Colonnade.singleton (fromSortable . Sortable (Just "synced") $ i18nCell MsgExamSynchronised) $ \x -> flip runReader x $ do mExam <- preview resultExam mSchool <- preview resultSchool @@ -175,7 +175,11 @@ getEOExamsR = do , emptyOpticColonnade (resultCourse . _entityVal . _courseTerm <> resultExternalExam . _entityVal . _externalExamTerm) colTermShort ] dbtSorting = mconcat - [ sortExamName (to $ E.unsafeCoalesce . sequence [views queryExam (E.?. ExamName), views queryExternalExam (E.?. ExternalExamExamName)]) + [ singletonMap "synced" $ + SortProjected . comparing $ ((/) `on` toRational) <$> view resultSynchronised <*> view resultResults + , singletonMap "is-synced" $ + SortProjected . comparing $ (>=) <$> view resultSynchronised <*> view resultResults + , sortExamName (to $ E.unsafeCoalesce . sequence [views queryExam (E.?. ExamName), views queryExternalExam (E.?. ExternalExamExamName)]) , sortExamTime (queryExam . $(multifocusG 2) (to $ E.joinV . (E.?. ExamStart)) (to $ E.joinV . (E.?. ExamEnd))) , sortExamFinished (queryExam . to (E.joinV . (E.?. ExamFinished))) , sortExamClosed (queryExam . to (E.joinV . (E.?. ExamClosed))) @@ -194,12 +198,13 @@ getEOExamsR = do | otherwise -> return $ error "Got neither exam nor externalExam in result" , singletonMap "has-results" . FilterProjected $ \(Any b) r -> (return $ b == (r ^. resultResults > 0) :: DB Bool) + , singletonMap "is-synced" . FilterProjected $ \(Any b) r -> (return $ b == (r ^. resultSynchronised >= r ^. resultResults) :: DB Bool) ] dbtFilterUI = mconcat - [ + [ flip (prismAForm $ singletonFilter "is-synced" . maybePrism _PathPiece) $ aopt (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgExamSynchronised) ] - dbtStyle = def -- { dbsFilterLayout = defaultDBSFilterLayout } + dbtStyle = def { dbsFilterLayout = defaultDBSFilterLayout } dbtParams = def dbtIdent :: Text @@ -211,7 +216,7 @@ getEOExamsR = do dbtExtraReps = [] examsDBTableValidator = def - & defaultSorting [SortAscBy "exam-time"] -- TODO: sort by is-synced + & defaultSorting [SortAscBy "is-synced", SortAscBy "exam-time"] & forceFilter "may-access" (Any True) & forceFilter "has-results" (Any True)