feat(labels): set export label on external exam csv export

This commit is contained in:
Sarah Vaupel 2022-01-27 22:27:33 +01:00
parent 7b16351e4b
commit 2071f5912d

View File

@ -135,8 +135,9 @@ data ExternalExamUserActionData
| ExternalExamUserEditResultData ExamResultPassedGrade
| ExternalExamUserDeleteData
newtype ExternalExamUserCsvExportDataGrades = ExternalExamUserCsvExportDataGrades
data ExternalExamUserCsvExportDataGrades = ExternalExamUserCsvExportDataGrades
{ csvEEUserMarkSynchronised :: Bool
, csvEEUserSetLabel :: Bool
} deriving (Eq, Ord, Read, Show, Generic, Typeable)
@ -192,12 +193,18 @@ makeExternalExamUsersTable mode (Entity eeId ExternalExam{..}) = do
coursen = externalExamCourseName
examn = externalExamExamName
uid <- requireAuthId
Entity uid currentUser <- requireAuth
isLecturer <- hasReadAccessTo $ EExamR tid ssh coursen examn EEUsersR
currentRoute <- fromMaybe (error "makeExternalExamUsersTable called from 404-handler") <$> getCurrentRoute
MsgRenderer mr <- getMsgRenderer
exampleTime <- over _utctDayTime (fromInteger . round . toRational) <$> liftIO getCurrentTime
userCsvExportLabel' <- E.select . E.from $ \examOfficeLabel -> do
E.where_ $ maybe E.false (\expLbl -> examOfficeLabel E.^. ExamOfficeLabelName E.==. E.val expLbl) (csvExportLabel $ userCsvOptions currentUser)
E.&&. examOfficeLabel E.^. ExamOfficeLabelUser E.==. E.val uid
return examOfficeLabel
let userCsvExportLabel = listToMaybe userCsvExportLabel'
let
dbtSQLQuery = runReaderT $ do
result <- view queryResult
@ -363,8 +370,13 @@ makeExternalExamUsersTable mode (Entity eeId ExternalExam{..}) = do
EEUMGrades -> Just DBTCsvEncode
{ dbtCsvExportForm = ExternalExamUserCsvExportDataGrades
<$> apopt checkBoxField (fslI MsgExternalExamUserMarkSynchronisedCsv & setTooltip MsgExternalExamUserMarkSynchronisedCsvTip) (Just False)
<*> maybe
(aforced checkBoxField (fslI MsgExamOfficeLabelSetLabelOnExport & setTooltip MsgExamOfficeLabelSetLabelOnExportForcedTip) False)
(\expLbl -> apopt checkBoxField (fslI MsgExamOfficeLabelSetLabelOnExport & setTooltip (MsgExamOfficeLabelSetLabelOnExportTip expLbl)) (Just True))
((examOfficeLabelName . entityVal) <$> userCsvExportLabel)
, dbtCsvDoEncode = \ExternalExamUserCsvExportDataGrades{..} -> C.mapM $ \(E.Value k, row) -> do
when csvEEUserMarkSynchronised $ externalExamResultMarkSynchronised k
when csvEEUserSetLabel $ maybe (return ()) (\lbl -> void $ upsert (ExamOfficeExternalExamLabel eeId lbl) [ExamOfficeExternalExamLabelLabel =. lbl]) (entityKey <$> userCsvExportLabel)
return $ encodeCsv' row
, dbtCsvName, dbtCsvSheetName
, dbtCsvNoExportData = Nothing