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 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
|
||||||
|
|||||||
Reference in New Issue
Block a user