feat(external-exams): display staff & add' schools

This commit is contained in:
Gregor Kleen 2019-12-02 12:13:54 +01:00 committed by Gregor Kleen
parent 94bb3911cb
commit c14d90fd53
2 changed files with 44 additions and 3 deletions

View File

@ -5,21 +5,41 @@ module Handler.ExternalExam.Show
import Import import Import
import Handler.Utils import Handler.Utils
import Handler.Utils.Invitations
import Handler.ExternalExam.StaffInvite ()
import qualified Data.CaseInsensitive as CI import qualified Data.CaseInsensitive as CI
import qualified Data.Map as Map
import qualified Database.Esqueleto as E
getEEShowR :: TermId -> SchoolId -> CourseName -> ExamName -> Handler Html getEEShowR :: TermId -> SchoolId -> CourseName -> ExamName -> Handler Html
getEEShowR tid ssh coursen examn = do getEEShowR tid ssh coursen examn = do
mUid <- maybeAuthId mUid <- maybeAuthId
(Entity _ ExternalExam{..}, fmap entityVal -> mResult, School{..}) <- runDB $ do (Entity _ ExternalExam{..}, fmap entityVal -> mResult, School{..}, staff, addSchools) <- runDB $ do
exam@(Entity eeId ExternalExam{..}) <- getBy404 $ UniqueExternalExam tid ssh coursen examn exam@(Entity eeId ExternalExam{..}) <- getBy404 $ UniqueExternalExam tid ssh coursen examn
actualStaff <- E.select . E.from $ \(eeStaff `E.InnerJoin` user) -> do
E.on $ eeStaff E.^. ExternalExamStaffUser E.==. user E.^. UserId
E.where_ $ eeStaff E.^. ExternalExamStaffExam E.==. E.val eeId
E.orderBy [E.asc $ user E.^. UserDisplayName]
return user
maySeeInvites <- hasReadAccessTo $ EExamR tid ssh coursen examn EEGradesR
staffInvites <- if
| maySeeInvites -> sourceInvitationsF @ExternalExamStaff eeId
| otherwise -> return Map.empty
let staff = map Right actualStaff ++ map Left (Map.keys staffInvites)
addSchools <- E.select . E.from $ \(eeSchool `E.InnerJoin` school) -> do
E.on $ eeSchool E.^. ExternalExamOfficeSchoolSchool E.==. school E.^. SchoolId
E.where_ $ eeSchool E.^. ExternalExamOfficeSchoolExam E.==. E.val eeId
E.orderBy [E.asc $ school E.^. SchoolName]
return school
school <- getJust externalExamSchool school <- getJust externalExamSchool
mResult <- fmap join . for mUid $ getBy . UniqueExternalExamResult eeId mResult <- fmap join . for mUid $ getBy . UniqueExternalExamResult eeId
return (exam, mResult, school) return (exam, mResult, school, staff, addSchools)
let heading = CI.original examn let heading = CI.original examn

View File

@ -38,4 +38,25 @@ $maybe ExternalExamResult{externalExamResultResult} <- mResult
_{MsgExamTime} _{MsgExamTime}
<dd .deflist__dd> <dd .deflist__dd>
^{formatTimeW SelFormatDateTime examTime} ^{formatTimeW SelFormatDateTime examTime}
$if not (null addSchools)
<dt .deflist__dt>
_{MsgExternalExamExamOfficeSchools}
<dd .deflist__dd>
<ul>
$forall Entity _ School{schoolName} <- addSchools
<li>
#{schoolName}
$if not (null staff)
<dt .deflist__dt>
_{MsgExternalExamStaff}
<dd .deflist__dd>
<ul>
$forall s <- staff
$case s
$of Right (Entity _ User{userDisplayName, userDisplayEmail, userSurname})
<li>
^{nameEmailWidget userDisplayEmail userDisplayName userSurname}
$of Left email
<li style="font-family: monospace">
#{email}