feat(eeusersr): audit external exam result result and occurrence edits
This commit is contained in:
parent
0d54757d16
commit
ed3f761b24
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user