From 2a0181cf4b321466eceec141088d3598b59854a3 Mon Sep 17 00:00:00 2001
From: uhensler <urs.hensler@frentix.com>
Date: Fri, 28 Jun 2019 15:19:38 +0200
Subject: [PATCH] OO-4108: Respect scale direction when calculating min / max
 value

---
 .../nodes/ms/manager/MSServiceImpl.java       | 22 ++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/main/java/org/olat/course/nodes/ms/manager/MSServiceImpl.java b/src/main/java/org/olat/course/nodes/ms/manager/MSServiceImpl.java
index 445cb70fec9..62c8f8ed8e1 100644
--- a/src/main/java/org/olat/course/nodes/ms/manager/MSServiceImpl.java
+++ b/src/main/java/org/olat/course/nodes/ms/manager/MSServiceImpl.java
@@ -194,12 +194,18 @@ public class MSServiceImpl implements MSService {
 				float rubricSumMin = evaluationFormManager.getRubricStatistic(rubric, getSlidersStatistic(rubric, true))
 						.getTotalStatistic()
 						.getSum().floatValue();
-				// If no responses the min is 0
-				rubricSumMin = rubricSumMin > 0? 0: rubricSumMin;
-				sumMin += rubricSumMin;
 				float rubricSumMax = evaluationFormManager.getRubricStatistic(rubric, getSlidersStatistic(rubric, false))
 						.getTotalStatistic()
 						.getSum().floatValue();
+				if (rubricSumMin > rubricSumMax) {
+					float temp = rubricSumMin;
+					rubricSumMin = rubricSumMax;
+					rubricSumMax = temp;
+				}
+				// If no responses the min is 0
+				rubricSumMin = rubricSumMin > 0? 0: rubricSumMin;
+				
+				sumMin += rubricSumMin;
 				sumMax += rubricSumMax;
 			}
 		}
@@ -223,11 +229,17 @@ public class MSServiceImpl implements MSService {
 				float rubricAvgMin = evaluationFormManager.getRubricStatistic(rubric, getSlidersStatistic(rubric, true))
 						.getTotalStatistic()
 						.getAvg().floatValue();
-				// If no responses the min is 0
-				rubricAvgMin = rubricAvgMin > 0? 0: rubricAvgMin;
 				float rubricAvgMax = evaluationFormManager.getRubricStatistic(rubric, getSlidersStatistic(rubric, false))
 						.getTotalStatistic()
 						.getAvg().floatValue();
+				// switch if descending scale
+				if (rubricAvgMin > rubricAvgMax) {
+					float temp = rubricAvgMin;
+					rubricAvgMin = rubricAvgMax;
+					rubricAvgMax = temp;
+				}
+				// If no responses the min is 0
+				rubricAvgMin = rubricAvgMin > 0? 0: rubricAvgMin;
 				int numberOfSliders = rubric.getSliders().size();
 				sumMin += numberOfSliders * rubricAvgMin;
 				sumMax += numberOfSliders * rubricAvgMax;
-- 
GitLab