diff --git a/messages/uniworx/de.msg b/messages/uniworx/de.msg index 1b460503d..386a3765f 100644 --- a/messages/uniworx/de.msg +++ b/messages/uniworx/de.msg @@ -1066,6 +1066,7 @@ ExamRegisterFromTip: Zeitpunkt ab dem sich Kursteilnehmer selbständig zur Klaus ExamRegisterTo: Anmeldung bis ExamDeregisterUntil: Abmeldung bis ExamPublishOccurrenceAssignments: Terminzuteilung den Teilnehmern mitteilen um +ExamPublishOccurrenceAssignmentsTip: Ab diesem Zeitpunkt Teilnehmer einsehen zu welchen Teilprüfungen (Räumen) sie angemeldet sind ExamPublishOccurrenceAssignmentsParticipant: Terminzuteilung einsehbar ab ExamFinished: Bewertung abgeschlossen ab ExamFinishedParticipant: Bewertung vorrausichtlich abgeschlossen @@ -1152,4 +1153,12 @@ ExamRegistered: Angemeldet ExamNotRegistered: Nicht angemeldet ExamRegistration: Anmeldung -ExamEndMustBeAfterStart: Beginn der Klausur muss vor ihrem Ende liegen \ No newline at end of file +ExamRegisterToMustBeAfterRegisterFrom: "Anmeldung ab" muss vor "Anmeldung bis" liegen +ExamDeregisterUntilMustBeAfterRegisterFrom: "Abmeldung bis" muss nach "Anmeldung bis" liegen +ExamStartMustBeAfterPublishOccurrenceAssignments: Start muss nach Veröffentlichung der Terminzuordnung liegen +ExamEndMustBeAfterStart: Beginn der Klausur muss vor ihrem Ende liegen +ExamFinishedMustBeAfterEnd: "Bewertung abgeschlossen ab" muss nach Ende liegen +ExamFinishedMustBeAfterStart: "Bewertung abgeschlossen ab" muss nach Start liegen +ExamClosedMustBeAfterFinished: "Noten stehen fest ab" muss nach "Bewertung abgeschlossen ab" liegen +ExamClosedMustBeAfterStart: "Noten stehen fest ab" muss nach Start liegen +ExamClosedMustBeAfterEnd: "Noten stehen fest ab" muss nach Ende liegen \ No newline at end of file diff --git a/src/Handler/Exam.hs b/src/Handler/Exam.hs index d63ed3de9..51693fe85 100644 --- a/src/Handler/Exam.hs +++ b/src/Handler/Exam.hs @@ -203,7 +203,7 @@ examForm template html = do <*> aopt utcTimeField (fslpI MsgExamRegisterFrom (mr MsgDate) & setTooltip MsgExamRegisterFromTip) (efRegisterFrom <$> template) <*> aopt utcTimeField (fslpI MsgExamRegisterTo (mr MsgDate)) (efRegisterTo <$> template) <*> aopt utcTimeField (fslpI MsgExamDeregisterUntil (mr MsgDate)) (efDeregisterUntil <$> template) - <*> areq utcTimeField (fslpI MsgExamPublishOccurrenceAssignments (mr MsgDate)) (efPublishOccurrenceAssignments <$> template) + <*> areq utcTimeField (fslpI MsgExamPublishOccurrenceAssignments (mr MsgDate) & setTooltip MsgExamPublishOccurrenceAssignments) (efPublishOccurrenceAssignments <$> template) <*> aopt utcTimeField (fslpI MsgExamFinished (mr MsgDate) & setTooltip MsgExamFinishedTip) (efFinished <$> template) <*> aopt utcTimeField (fslpI MsgExamClosed (mr MsgDate) & setTooltip MsgExamClosedTip) (efClosed <$> template) <* aformSection MsgExamFormOccurrences @@ -445,9 +445,15 @@ validateExam :: (MonadHandler m, HandlerSite m ~ UniWorX) => FormValidator ExamF validateExam = do ExamForm{..} <- State.get - guardValidation MsgExamEndMustBeAfterStart $ NTop efEnd >= NTop (Just efStart) - - -- TODO + guardValidation MsgExamRegisterToMustBeAfterRegisterFrom $ NTop efRegisterTo >= NTop efRegisterFrom + guardValidation MsgExamDeregisterUntilMustBeAfterRegisterFrom $ NTop efDeregisterUntil >= NTop efRegisterFrom + guardValidation MsgExamStartMustBeAfterPublishOccurrenceAssignments $ efStart >= efPublishOccurrenceAssignments + guardValidation MsgExamEndMustBeAfterStart $ NTop efEnd >= NTop (Just efStart) + guardValidation MsgExamFinishedMustBeAfterEnd . fromMaybe True $ (>=) <$> efFinished <*> efEnd + guardValidation MsgExamFinishedMustBeAfterStart $ NTop efFinished >= NTop (Just efStart) + guardValidation MsgExamClosedMustBeAfterFinished . fromMaybe True $ (>=) <$> efClosed <*> efFinished + guardValidation MsgExamClosedMustBeAfterStart $ NTop efClosed >= NTop (Just efStart) + guardValidation MsgExamClosedMustBeAfterEnd . fromMaybe True $ (>=) <$> efClosed <*> efEnd getCExamNewR, postCExamNewR :: TermId -> SchoolId -> CourseShorthand -> Handler Html diff --git a/src/Utils/Form.hs b/src/Utils/Form.hs index 8a5da1d54..8ada2cc6d 100644 --- a/src/Utils/Form.hs +++ b/src/Utils/Form.hs @@ -828,9 +828,10 @@ tellValidationError = FormValidator . tell . pure . SomeMessage guardValidation :: ( MonadHandler m , RenderMessage (HandlerSite m) msg ) - => msg -> Bool -> FormValidator r m () -guardValidation _ False = return () -guardValidation msg True = tellValidationError msg + => msg -- ^ Message describing violation + -> Bool -- ^ @False@ iff constraint is violated + -> FormValidator r m () +guardValidation msg isValid = when (not isValid) $ tellValidationError msg guardValidationM :: ( MonadHandler m , RenderMessage (HandlerSite m) msg