feat: additional exam functions on show page
This commit is contained in:
parent
e994fafe28
commit
214e8951e4
@ -2046,6 +2046,7 @@ MailTitleChangeUserDisplayEmail displayName@Text: #{displayName} möchte diese E
|
|||||||
|
|
||||||
ExamOfficeOptOutsChanged: Zuständige Prüfungsbeauftragte erfolgreich angepasst
|
ExamOfficeOptOutsChanged: Zuständige Prüfungsbeauftragte erfolgreich angepasst
|
||||||
|
|
||||||
|
ExamCloseHeading: Klausur abschließen
|
||||||
BtnCloseExam: Klausur abschließen
|
BtnCloseExam: Klausur abschließen
|
||||||
ExamCloseTip: Wenn eine Klausur abgeschlossen wird, werden Prüfungsbeauftragte, die im System Noten einsehen, benachrichtigt und danach bei Änderungen informiert.
|
ExamCloseTip: Wenn eine Klausur abgeschlossen wird, werden Prüfungsbeauftragte, die im System Noten einsehen, benachrichtigt und danach bei Änderungen informiert.
|
||||||
ExamCloseReminder: Bitte schließen Sie die Klausur frühstmöglich, sobald die Prüfungsleistungen sich voraussichtlich nicht mehr ändern werden. Z.B. direkt nach der Klausureinsicht.
|
ExamCloseReminder: Bitte schließen Sie die Klausur frühstmöglich, sobald die Prüfungsleistungen sich voraussichtlich nicht mehr ändern werden. Z.B. direkt nach der Klausureinsicht.
|
||||||
@ -2273,11 +2274,12 @@ ExternalExamExists coursen@CourseName examn@ExamName: Prüfung „#{examn}“ f
|
|||||||
ExternalExamCreated coursen@CourseName examn@ExamName: Prüfung „#{examn}“ für Kurs „#{coursen}“ erfolgreich angelegt.
|
ExternalExamCreated coursen@CourseName examn@ExamName: Prüfung „#{examn}“ für Kurs „#{coursen}“ erfolgreich angelegt.
|
||||||
ExternalExamEdited coursen@CourseName examn@ExamName: Prüfung „#{examn}“ für Kurs „#{coursen}“ erfolgreich bearbeitet.
|
ExternalExamEdited coursen@CourseName examn@ExamName: Prüfung „#{examn}“ für Kurs „#{coursen}“ erfolgreich bearbeitet.
|
||||||
|
|
||||||
|
ExamAutoOccurrenceHeading: Automatische Raumverteilung
|
||||||
ExamAutoOccurrenceMinimizeRooms: Verwendete Räume minimieren
|
ExamAutoOccurrenceMinimizeRooms: Verwendete Räume minimieren
|
||||||
ExamAutoOccurrenceMinimizeRoomsTip: Soll, für die Aufteilung, die Liste an Räumen zunächst reduziert werden, sodass nur so wenige Räume verwendet werden, wie nötig (größte zuerst)?
|
ExamAutoOccurrenceMinimizeRoomsTip: Soll, für die Aufteilung, die Liste an Räumen zunächst reduziert werden, sodass nur so wenige Räume verwendet werden, wie nötig (größte zuerst)?
|
||||||
ExamAutoOccurrenceOccurrencesChangedInFlight: Raumliste wurde verändert
|
ExamAutoOccurrenceOccurrencesChangedInFlight: Raumliste wurde verändert
|
||||||
ExamAutoOccurrenceParticipantsAssigned num@Int64: Verteilungstabelle erfolgreich gespeichert und #{num} Teilnehmer zugewiesen
|
ExamAutoOccurrenceParticipantsAssigned num@Int64: Verteilungstabelle erfolgreich gespeichert und #{num} Teilnehmer zugewiesen
|
||||||
TitleExamAutoOccurrence tid@TermId ssh@SchoolId csh@CourseShorthand examn@ExamName: #{tid}-#{ssh}-#{csh} #{examn}: Automatische Raumverteilung
|
TitleExamAutoOccurrence tid@TermId ssh@SchoolId csh@CourseShorthand examn@ExamName: #{tid} - #{ssh} - #{csh} #{examn}: Automatische Raumverteilung
|
||||||
BtnExamAutoOccurrenceCalculate: Verteilung berechnen
|
BtnExamAutoOccurrenceCalculate: Verteilung berechnen
|
||||||
BtnExamAutoOccurrenceAccept: Verteilung akzeptieren
|
BtnExamAutoOccurrenceAccept: Verteilung akzeptieren
|
||||||
ExamRoomMappingSurname: Nachnamen beginnend mit
|
ExamRoomMappingSurname: Nachnamen beginnend mit
|
||||||
|
|||||||
@ -5,6 +5,10 @@ module Handler.Exam.Show
|
|||||||
import Import
|
import Import
|
||||||
import Handler.Exam.Register
|
import Handler.Exam.Register
|
||||||
|
|
||||||
|
import Handler.Exam.AutoOccurrence (examAutoOccurrenceCalculateWidget)
|
||||||
|
|
||||||
|
import Handler.ExamOffice.Exam (examCloseWidget)
|
||||||
|
|
||||||
import Data.Map ((!?))
|
import Data.Map ((!?))
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
|
|
||||||
@ -22,7 +26,7 @@ getEShowR tid ssh csh examn = do
|
|||||||
cTime <- liftIO getCurrentTime
|
cTime <- liftIO getCurrentTime
|
||||||
mUid <- maybeAuthId
|
mUid <- maybeAuthId
|
||||||
|
|
||||||
(Entity _ Exam{..}, examParts, examVisible, (gradingVisible, gradingShown), (occurrenceAssignmentsVisible, occurrenceAssignmentsShown), results, result, bonus, occurrences, (registered, mayRegister), lecturerInfoShown) <- runDB $ do
|
(Entity eId Exam{..}, examParts, examVisible, (gradingVisible, gradingShown), (occurrenceAssignmentsVisible, occurrenceAssignmentsShown), results, result, bonus, occurrences, (registered, mayRegister), lecturerInfoShown) <- runDB $ do
|
||||||
exam@(Entity eId Exam{..}) <- fetchExam tid ssh csh examn
|
exam@(Entity eId Exam{..}) <- fetchExam tid ssh csh examn
|
||||||
|
|
||||||
let examVisible = NTop (Just cTime) >= NTop examVisibleFrom
|
let examVisible = NTop (Just cTime) >= NTop examVisibleFrom
|
||||||
@ -76,6 +80,8 @@ getEShowR tid ssh csh examn = do
|
|||||||
let occurrenceNamesShown = lecturerInfoShown
|
let occurrenceNamesShown = lecturerInfoShown
|
||||||
partNumbersShown = lecturerInfoShown
|
partNumbersShown = lecturerInfoShown
|
||||||
examClosedShown = lecturerInfoShown
|
examClosedShown = lecturerInfoShown
|
||||||
|
showCloseWidget = lecturerInfoShown
|
||||||
|
showAutoOccurrenceCalculateWidget = lecturerInfoShown
|
||||||
|
|
||||||
sumMaxPoints = sum [ fromRational examPartWeight * mPoints | Entity _ ExamPart{..} <- examParts, let Just mPoints = examPartMaxPoints ]
|
sumMaxPoints = sum [ fromRational examPartWeight * mPoints | Entity _ ExamPart{..} <- examParts, let Just mPoints = examPartMaxPoints ]
|
||||||
|
|
||||||
@ -147,6 +153,8 @@ getEShowR tid ssh csh examn = do
|
|||||||
markUnregisteredOccurrences mOcc = occurrenceAssignmentsShown && hasRegistration && isn't _Just (registerWidget mOcc)
|
markUnregisteredOccurrences mOcc = occurrenceAssignmentsShown && hasRegistration && isn't _Just (registerWidget mOcc)
|
||||||
showOccurrenceMappingColumn = examOccurrenceRuleAutomatic examOccurrenceRule && occurrenceAssignmentsShown && is _Just examExamOccurrenceMapping
|
showOccurrenceMappingColumn = examOccurrenceRuleAutomatic examOccurrenceRule && occurrenceAssignmentsShown && is _Just examExamOccurrenceMapping
|
||||||
|
|
||||||
|
closeWgt <- examCloseWidget (SomeRoute $ CExamR tid ssh csh examn EUsersR) eId
|
||||||
|
|
||||||
let heading = prependCourseTitle tid ssh csh $ CI.original examName
|
let heading = prependCourseTitle tid ssh csh $ CI.original examName
|
||||||
|
|
||||||
siteLayoutMsg heading $ do
|
siteLayoutMsg heading $ do
|
||||||
|
|||||||
@ -88,6 +88,19 @@ $maybe desc <- examDescription
|
|||||||
<dt .deflist__dt>_{MsgExamRegistration}
|
<dt .deflist__dt>_{MsgExamRegistration}
|
||||||
<dd .deflist__dd>^{registerWdgt}
|
<dd .deflist__dd>^{registerWdgt}
|
||||||
|
|
||||||
|
$if showCloseWidget && is _Nothing examClosed
|
||||||
|
<section>
|
||||||
|
<h2>
|
||||||
|
_{MsgExamCloseHeading}
|
||||||
|
\ ^{isVisible False}
|
||||||
|
^{closeWgt}
|
||||||
|
$if examOccurrenceRuleAutomatic examOccurrenceRule && showAutoOccurrenceCalculateWidget
|
||||||
|
<section>
|
||||||
|
<h2>
|
||||||
|
_{MsgExamAutoOccurrenceHeading}
|
||||||
|
\ ^{isVisible False}
|
||||||
|
^{examAutoOccurrenceCalculateWidget tid ssh csh examn}
|
||||||
|
|
||||||
|
|
||||||
$if not (null occurrences)
|
$if not (null occurrences)
|
||||||
<section>
|
<section>
|
||||||
|
|||||||
@ -1,8 +1,11 @@
|
|||||||
$newline never
|
$newline never
|
||||||
<section>
|
<section>
|
||||||
|
$if is _Nothing examClosed
|
||||||
|
<h2>_{MsgExamCloseHeading}
|
||||||
^{closeWgt}
|
^{closeWgt}
|
||||||
$if examOccurrenceRuleAutomatic examOccurrenceRule
|
$if examOccurrenceRuleAutomatic examOccurrenceRule
|
||||||
<section>
|
<section>
|
||||||
|
<h2>_{MsgExamAutoOccurrenceHeading}
|
||||||
^{examAutoOccurrenceCalculateWidget tid ssh csh examn}
|
^{examAutoOccurrenceCalculateWidget tid ssh csh examn}
|
||||||
<section>
|
<section>
|
||||||
$if computedValues
|
$if computedValues
|
||||||
|
|||||||
Reference in New Issue
Block a user