diff --git a/src/Handler/ExamOffice/ExternalExam.hs b/src/Handler/ExamOffice/ExternalExam.hs index 40a040fc8..a98836fab 100644 --- a/src/Handler/ExamOffice/ExternalExam.hs +++ b/src/Handler/ExamOffice/ExternalExam.hs @@ -19,16 +19,16 @@ postEEGradesR tid ssh coursen examn = do (usersResult, examUsersTable) <- makeExternalExamUsersTable EEUMGrades eExam usersResult' <- formResultMaybe usersResult $ \case - (ExternalExamUserMarkSynchronisedData, selectedUsers) -> do - forM_ selectedUsers externalExamResultMarkSynchronised + (ExternalExamUserMarkSynchronisedData, selectedResults) -> do + forM_ selectedResults externalExamResultMarkSynchronised return . Just $ do - addMessageI Success $ MsgExamUserMarkedSynchronised $ length selectedUsers + addMessageI Success $ MsgExamUserMarkedSynchronised $ length selectedResults redirect $ EExamR tid ssh coursen examn EEGradesR - (ExternalExamUserEditOccurrenceData occ, selectedUsers) -> do + (ExternalExamUserEditOccurrenceData occ, selectedResults) -> do nrEdited <- do now <- liftIO getCurrentTime - updateWhereCount [ ExternalExamResultId <-. Set.toList selectedUsers ] + updateWhereCount [ ExternalExamResultId <-. Set.toList selectedResults ] [ ExternalExamResultTime =. occ , ExternalExamResultLastChanged =. now ] @@ -36,10 +36,10 @@ postEEGradesR tid ssh coursen examn = do addMessageI Success $ MsgExternalExamOccurrenceEdited nrEdited redirect $ EExamR tid ssh coursen examn EEGradesR - (ExternalExamUserEditResultData examResult, selectedUsers) -> do + (ExternalExamUserEditResultData examResult, selectedResults) -> do nrEdited <- do now <- liftIO getCurrentTime - updateWhereCount [ ExternalExamResultId <-. Set.toList selectedUsers ] + updateWhereCount [ ExternalExamResultId <-. Set.toList selectedResults ] [ ExternalExamResultResult =. examResult , ExternalExamResultLastChanged =. now ] @@ -47,8 +47,15 @@ postEEGradesR tid ssh coursen examn = do addMessageI Success $ MsgExternalExamResultEdited nrEdited redirect $ EExamR tid ssh coursen examn EEGradesR - (ExternalExamUserDeleteData, selectedUsers) -> do - nrDeleted <- deleteWhereCount [ ExternalExamResultId <-. Set.toList selectedUsers ] + (ExternalExamUserDeleteData, selectedResults) -> do + nrDeleted <- fmap getSum . flip foldMapM selectedResults $ \selectedResult -> do + mExtExamRes <- get selectedResult + nrDel <- deleteWhereCount [ ExternalExamResultId ==. selectedResult ] + if + | Just ExternalExamResult{..} <- mExtExamRes -> do + forM_ [1..nrDel] $ const $ audit $ TransactionExternalExamResultDelete externalExamResultExam externalExamResultUser + return $ Sum nrDel + | otherwise -> return mempty return . Just $ do addMessageI Success $ MsgExternalExamUserDeleted nrDeleted redirect $ EExamR tid ssh coursen examn EEGradesR