feat(eeusersr): audit external exam result result and occurrence edits

This commit is contained in:
Sarah Vaupel 2020-03-03 16:52:13 +01:00
parent 0d54757d16
commit ed3f761b24

View File

@ -4,7 +4,6 @@ module Handler.ExamOffice.ExternalExam
import Import import Import
import qualified Data.Set as Set
import Database.Persist.Sql (deleteWhereCount, updateWhereCount) import Database.Persist.Sql (deleteWhereCount, updateWhereCount)
import Handler.Utils import Handler.Utils
@ -18,6 +17,19 @@ postEEGradesR tid ssh coursen examn = do
eExam <- getBy404 $ UniqueExternalExam tid ssh coursen examn eExam <- getBy404 $ UniqueExternalExam tid ssh coursen examn
(usersResult, examUsersTable) <- makeExternalExamUsersTable EEUMGrades eExam (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 usersResult' <- formResultMaybe usersResult $ \case
(ExternalExamUserMarkSynchronisedData, selectedResults) -> do (ExternalExamUserMarkSynchronisedData, selectedResults) -> do
forM_ selectedResults externalExamResultMarkSynchronised forM_ selectedResults externalExamResultMarkSynchronised
@ -26,30 +38,15 @@ postEEGradesR tid ssh coursen examn = do
redirect $ EExamR tid ssh coursen examn EEGradesR redirect $ EExamR tid ssh coursen examn EEGradesR
(ExternalExamUserEditOccurrenceData occ, selectedResults) -> do (ExternalExamUserEditOccurrenceData occ, selectedResults) -> do
nrEdited <- do nrEdited <- editResults selectedResults
now <- liftIO getCurrentTime [ ExternalExamResultTime =. occ ]
updateWhereCount [ ExternalExamResultId <-. Set.toList selectedResults ]
[ ExternalExamResultTime =. occ
, ExternalExamResultLastChanged =. now
]
return . Just $ do return . Just $ do
addMessageI Success $ MsgExternalExamOccurrenceEdited nrEdited addMessageI Success $ MsgExternalExamOccurrenceEdited nrEdited
redirect $ EExamR tid ssh coursen examn EEGradesR redirect $ EExamR tid ssh coursen examn EEGradesR
(ExternalExamUserEditResultData examResult, selectedResults) -> do (ExternalExamUserEditResultData examResult, selectedResults) -> do
nrEdited <- fmap getSum . flip foldMapM selectedResults $ \selectedResult -> do nrEdited <- editResults selectedResults
now <- liftIO getCurrentTime [ ExternalExamResultResult =. examResult ]
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
return . Just $ do return . Just $ do
addMessageI Success $ MsgExternalExamResultEdited nrEdited addMessageI Success $ MsgExternalExamResultEdited nrEdited
redirect $ EExamR tid ssh coursen examn EEGradesR redirect $ EExamR tid ssh coursen examn EEGradesR