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 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