diff --git a/src/main/java/org/olat/course/assessment/AssessmentForm.java b/src/main/java/org/olat/course/assessment/AssessmentForm.java index d31be1fdb7a1f31a92a14c3b5182dc2cd607fd1c..5ed64928d3bdc0e1f88752b6b8a257a884ebcba2 100644 --- a/src/main/java/org/olat/course/assessment/AssessmentForm.java +++ b/src/main/java/org/olat/course/assessment/AssessmentForm.java @@ -163,7 +163,9 @@ public class AssessmentForm extends FormBasicController { @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { if(saveAndCloseLink == source) { - fireEvent(ureq, Event.DONE_EVENT); + if(validateFormLogic(ureq)) { + fireEvent(ureq, Event.DONE_EVENT); + } } super.formInnerEvent(ureq, source, event); } @@ -182,7 +184,7 @@ public class AssessmentForm extends FormBasicController { } @Override - protected boolean validateFormLogic (UserRequest ureq) { + protected boolean validateFormLogic(UserRequest ureq) { if (hasScore) { try { if(parseFloat(score) == null) { diff --git a/src/main/java/org/olat/course/nodes/cl/ui/AssessedIdentityCheckListController.java b/src/main/java/org/olat/course/nodes/cl/ui/AssessedIdentityCheckListController.java index 43ca3c07738e4caa1521812531f6e9c7a980d5d0..1f4a7febb2c9de42781bed381661863d4112115a 100644 --- a/src/main/java/org/olat/course/nodes/cl/ui/AssessedIdentityCheckListController.java +++ b/src/main/java/org/olat/course/nodes/cl/ui/AssessedIdentityCheckListController.java @@ -167,7 +167,11 @@ public class AssessedIdentityCheckListController extends FormBasicController { pointEl.setExampleKey("checklist.point.example", new String[]{ "0", maxValue}); } // hide when not yet checked - pointEl.setVisible(check.getChecked()); + if(check != null) { + pointEl.setVisible(check.getChecked()); + } else { + pointEl.setVisible(false); + } } CheckboxWrapper wrapper = new CheckboxWrapper(checkbox, check, boxEl, pointEl); @@ -197,13 +201,45 @@ public class AssessedIdentityCheckListController extends FormBasicController { CheckboxWrapper wrapper = (CheckboxWrapper)boxEl.getUserObject(); doUpdateCheck(wrapper, boxEl.isAtLeastSelected(1)); } else if(saveAndCloseLink == source) { - doSave(); - fireEvent(ureq, Event.DONE_EVENT); + if(validateFormLogic(ureq)) { + doSave(); + fireEvent(ureq, Event.DONE_EVENT); + } } super.formInnerEvent(ureq, source, event); } - + + @Override + protected boolean validateFormLogic(UserRequest ureq) { + + boolean allOk = true; + for(CheckboxWrapper wrapper:wrappers) { + + TextElement pointEl = wrapper.getPointEl(); + if(pointEl != null) { + pointEl.clearError(); + String val = pointEl.getValue(); + if(StringHelper.containsNonWhitespace(val)) { + try { + Float max = wrapper.getCheckbox().getPoints(); + float maxScore = max == null ? 0f : max.floatValue(); + float score = Float.parseFloat(val); + if(score < 0f || score > maxScore) { + pointEl.setErrorKey("form.error.scoreOutOfRange", null); + allOk &= false; + } + + } catch (NumberFormatException e) { + pointEl.setErrorKey("form.error.wrongFloat", null); + allOk &= false; + } + } + } + } + return allOk & super.validateFormLogic(ureq); + } + private void doSave() { List<AssessmentBatch> batchElements = new ArrayList<>(); for(CheckboxWrapper wrapper:wrappers) { diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java index 71ace1756ace7e08fd785e15aaafe4905afd7e4b..6708b746f6ffe6c702c5adbfe3fc4fc37d82ae7b 100644 --- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java +++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java @@ -104,6 +104,7 @@ public class CheckListAssessmentController extends FormBasicController implement private static final String[] onKeys = new String[] { "on" }; private static final String[] onValues = new String[] { "" }; + private final Float maxScore; private final Date dueDate; private final boolean withScore; private final CheckboxList checkboxList; @@ -174,6 +175,8 @@ public class CheckListAssessmentController extends FormBasicController implement Boolean hasScore = (Boolean)config.get(MSCourseNode.CONFIG_KEY_HAS_SCORE_FIELD); withScore = (hasScore == null || hasScore.booleanValue()); + + maxScore = (Float)config.get(MSCourseNode.CONFIG_KEY_SCORE_MAX); initForm(ureq); } @@ -346,7 +349,6 @@ public class CheckListAssessmentController extends FormBasicController implement } private List<CheckListAssessmentRow> getAssessmentDataViews(List<AssessmentData> datas, List<Checkbox> checkbox) { - List<CheckListAssessmentRow> dataViews = new ArrayList<>(); int numOfcheckbox = checkbox.size(); @@ -368,6 +370,8 @@ public class CheckListAssessmentController extends FormBasicController implement if(check.getChecked() == null) continue; + check.getCheckbox(); + Integer index = indexed.get(check.getCheckbox().getCheckboxId()); if(index != null) { int i = index.intValue(); @@ -377,6 +381,10 @@ public class CheckListAssessmentController extends FormBasicController implement } } } + + if(maxScore != null && maxScore.floatValue() > 0f && totalPoints > maxScore.floatValue()) { + totalPoints = maxScore.floatValue(); + } CheckListAssessmentRow row = new CheckListAssessmentRow(data.getIdentity(), checkBool, scores, totalPoints, userPropertyHandlers, getLocale()); dataViews.add(row); } diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties index b02f4e6d54f8f13cb7ea9cf9e6dce66d413d2041..473dbb96bf6cf732af0e5048cbd29cb7b7db0fed 100644 --- a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties @@ -127,6 +127,7 @@ pdf.export.checked=Erledigte Checkboxen als PDF award.point.on=Punkte vergeben bei Auswahl description=Beschreibung participants=Mitglieder +form.error.scoreOutOfRange=$org.olat.course.assessment\:form.error.scoreOutOfRange file=Datei select.checkbox=Auswahl Checkbox signature=Unterschrift diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_en.properties index 952ca997239c88f394af7f875e7d7a162a8a25b8..18634aabd479c67632b059dc4d4de97de8b78be7 100644 --- a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_en.properties @@ -80,6 +80,7 @@ help.hover.config=Help regarding configuration help.hover.coach.assessment=Help regarding assessment and management of checklists help.hover.assessment.checkbox=help regarding assessment per box info.title=$org.olat.course.nodes.ms\:info.title +form.error.scoreOutOfRange=$org.olat.course.assessment\:form.error.scoreOutOfRange label=Label label.controlled=Verified label.done=Done