From ed3f761b24f98527ca0b26b09db7a75f1c98142e Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Tue, 3 Mar 2020 16:52:13 +0100 Subject: [PATCH] feat(eeusersr): audit external exam result result and occurrence edits --- src/Handler/ExamOffice/ExternalExam.hs | 37 ++++++++++++-------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/src/Handler/ExamOffice/ExternalExam.hs b/src/Handler/ExamOffice/ExternalExam.hs index 3c9c4bcf1..949399545 100644 --- a/src/Handler/ExamOffice/ExternalExam.hs +++ b/src/Handler/ExamOffice/ExternalExam.hs @@ -4,7 +4,6 @@ module Handler.ExamOffice.ExternalExam import Import -import qualified Data.Set as Set import Database.Persist.Sql (deleteWhereCount, updateWhereCount) import Handler.Utils @@ -18,6 +17,19 @@ postEEGradesR tid ssh coursen examn = do eExam <- getBy404 $ UniqueExternalExam tid ssh coursen examn (usersResult, examUsersTable) <- makeExternalExamUsersTable EEUMGrades eExam + let + editResults results changeList = fmap getSum . flip foldMapM results $ \result -> do + now <- liftIO getCurrentTime + mExtExamRes <- get result + nrEdit <- updateWhereCount + [ ExternalExamResultId ==. result ] + (changeList <> [ ExternalExamResultLastChanged =. now ]) + if + | Just ExternalExamResult{..} <- mExtExamRes -> do + forM_ [1..nrEdit] $ const $ audit $ TransactionExternalExamResultEdit externalExamResultExam externalExamResultUser + return $ Sum nrEdit + | otherwise -> return mempty + usersResult' <- formResultMaybe usersResult $ \case (ExternalExamUserMarkSynchronisedData, selectedResults) -> do forM_ selectedResults externalExamResultMarkSynchronised @@ -26,30 +38,15 @@ postEEGradesR tid ssh coursen examn = do redirect $ EExamR tid ssh coursen examn EEGradesR (ExternalExamUserEditOccurrenceData occ, selectedResults) -> do - nrEdited <- do - now <- liftIO getCurrentTime - updateWhereCount [ ExternalExamResultId <-. Set.toList selectedResults ] - [ ExternalExamResultTime =. occ - , ExternalExamResultLastChanged =. now - ] + nrEdited <- editResults selectedResults + [ ExternalExamResultTime =. occ ] return . Just $ do addMessageI Success $ MsgExternalExamOccurrenceEdited nrEdited redirect $ EExamR tid ssh coursen examn EEGradesR (ExternalExamUserEditResultData examResult, selectedResults) -> do - nrEdited <- fmap getSum . flip foldMapM selectedResults $ \selectedResult -> do - now <- liftIO getCurrentTime - mExtExamRes <- get selectedResult - nrEdit <- updateWhereCount - [ ExternalExamResultId ==. selectedResult ] - [ ExternalExamResultResult =. examResult - , ExternalExamResultLastChanged =. now - ] - if - | Just ExternalExamResult{..} <- mExtExamRes -> do - forM_ [1..nrEdit] $ const $ audit $ TransactionExternalExamResultEdit externalExamResultExam externalExamResultUser - return $ Sum nrEdit - | otherwise -> return mempty + nrEdited <- editResults selectedResults + [ ExternalExamResultResult =. examResult ] return . Just $ do addMessageI Success $ MsgExternalExamResultEdited nrEdited redirect $ EExamR tid ssh coursen examn EEGradesR