diff --git a/src/Utils/Schedule/Week.hs b/src/Utils/Schedule/Week.hs index f7f6355e2..9dddbf2dd 100644 --- a/src/Utils/Schedule/Week.hs +++ b/src/Utils/Schedule/Week.hs @@ -74,7 +74,7 @@ weekSchedule uid _weekOffset = do -- TODO: this makes the exam table redundant once the weekOffset is implemented -- TODO: for lecturers, do not display one entry for each exam occurrences, but instead collect all occurrences happening at the same time in a list - exams <- liftHandler . runDB $ E.select $ E.from $ \((course `E.InnerJoin` exam) `E.LeftOuterJoin` examOccurrence) -> do + examOccurrences <- liftHandler . runDB $ E.select $ E.from $ \((course `E.InnerJoin` exam) `E.LeftOuterJoin` examOccurrence) -> do E.on $ course E.^. CourseId E.==. exam E.^. ExamCourse E.on $ E.just (exam E.^. ExamId) E.==. examOccurrence E.?. ExamOccurrenceExam E.where_ $ isCourseLecturer (Just uid) ata (course E.^. CourseId) @@ -113,8 +113,8 @@ weekSchedule uid _weekOffset = do let seOccurrence = Right (Left exception) in ScheduleEntry{..} in scheduleds <> exceptions - examToScheduleEntries :: (Entity Course, Entity Exam, Maybe (Entity ExamOccurrence)) -> [ScheduleEntry] - examToScheduleEntries (seCourse@(Entity _ Course{}), Entity _ Exam{..}, Just (Entity _ ExamOccurrence{..})) = + examOccurrenceToScheduleEntry :: (Entity Course, Entity Exam, Maybe (Entity ExamOccurrence)) -> Maybe ScheduleEntry + examOccurrenceToScheduleEntry (seCourse@(Entity _ Course{}), Entity _ Exam{..}, Just (Entity _ ExamOccurrence{..})) = let seType = SETExamOccurrence { seteoExamName = examName } @@ -123,8 +123,8 @@ weekSchedule uid _weekOffset = do { seeoStart = examOccurrenceStart , seeoEnd = examOccurrenceEnd } - in pure $ ScheduleEntry{..} - examToScheduleEntries _ = mempty -- TODO: exclude (_,_,Nothing) case via join + in Just ScheduleEntry{..} + examOccurrenceToScheduleEntry _ = Nothing -- TODO: exclude (_,_,Nothing) case via join seOccurrenceIsInSlot :: Day -> TimeSlot -> ScheduleEntryOccurrence -> Bool seOccurrenceIsInSlot day slot = \case @@ -155,9 +155,9 @@ weekSchedule uid _weekOffset = do , Map.fromList $ slotsToDisplay <&> \slot -> ( slot , filter (seOccurrenceIsInSlot day slot . seOccurrence) $ join $ - (courseEventToScheduleEntries <$> courseEvents) - <> (tutorialToScheduleEntries <$> tutorials) - <> (examToScheduleEntries <$> exams) + (courseEventToScheduleEntries <$> courseEvents) + <> (tutorialToScheduleEntries <$> tutorials) + <> (pure . catMaybes) (examOccurrenceToScheduleEntry <$> examOccurrences) ) )