From b55a865b66ec3c0671135ba74b9ceaca3d951bef Mon Sep 17 00:00:00 2001
From: uhensler <urs.hensler@frentix.com>
Date: Fri, 25 Oct 2019 15:51:07 +0200
Subject: [PATCH] OO-4207: Reset status to not started if not fully assessed
 anymore

---
 .../manager/LearningPathNodeAccessProvider.java    | 14 ++++++++------
 .../run/scoring/StatusCompletionEvaluator.java     |  2 +-
 .../LearningPathNodeAccessProviderTest.java        |  2 +-
 3 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProvider.java b/src/main/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProvider.java
index 203dcf6b012..00c983ba9f9 100644
--- a/src/main/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProvider.java
+++ b/src/main/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProvider.java
@@ -97,7 +97,8 @@ public class LearningPathNodeAccessProvider implements NodeAccessProvider {
 		FullyAssessedResult result = getConfigs(courseNode).isFullyAssessedOnNodeVisited();
 		boolean participant = userCourseEnv.isParticipant();
 		if (participant && result.isEnabled()) {
-			AssessmentEntryStatus status = getStatus(courseNode, userCourseEnv, result.isDone());
+			AssessmentEntryStatus status = getStatus(courseNode, userCourseEnv, result.isDone(),
+					result.isFullyAssessed());
 			courseAssessmentService.updateFullyAssessed(courseNode, userCourseEnv,
 					Boolean.valueOf(result.isFullyAssessed()), status, Role.user);
 			return true;
@@ -137,16 +138,17 @@ public class LearningPathNodeAccessProvider implements NodeAccessProvider {
 			FullyAssessedResult result) {
 		boolean participant = userCourseEnv.isParticipant();
 		if (participant && result.isEnabled()) {
-			AssessmentEntryStatus newStatus = getStatus(courseNode, userCourseEnv, result.isDone());
+			AssessmentEntryStatus status = getStatus(courseNode, userCourseEnv, result.isDone(),
+					result.isFullyAssessed());
 			courseAssessmentService.updateFullyAssessed(courseNode, userCourseEnv,
-					Boolean.valueOf(result.isFullyAssessed()), newStatus, by);
+					Boolean.valueOf(result.isFullyAssessed()), status, by);
 		}
 	}
 
 	private AssessmentEntryStatus getStatus(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment,
-			boolean isDone) {
-		return isDone
-				? AssessmentEntryStatus.done
+			boolean setDone, boolean fullyAssessed) {
+		return setDone
+				? fullyAssessed? AssessmentEntryStatus.done: AssessmentEntryStatus.notStarted
 				: courseAssessmentService.getAssessmentEntry(courseNode, userCourseEnvironment).getAssessmentStatus();
 	}
 
diff --git a/src/main/java/org/olat/course/run/scoring/StatusCompletionEvaluator.java b/src/main/java/org/olat/course/run/scoring/StatusCompletionEvaluator.java
index 0024d799ead..c70e6deae81 100644
--- a/src/main/java/org/olat/course/run/scoring/StatusCompletionEvaluator.java
+++ b/src/main/java/org/olat/course/run/scoring/StatusCompletionEvaluator.java
@@ -47,7 +47,7 @@ public class StatusCompletionEvaluator implements CompletionEvaluator {
 		case notStarted: return 0.0;
 		case inProgress: return 0.5;
 		case inReview: return 0.75;
-		case done: return 1.0;
+		case done: return 0.9; // 1.0 is reached when fully assessed
 		default: return 0.0;
 		}
 	}
diff --git a/src/test/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProviderTest.java b/src/test/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProviderTest.java
index 96cd45b2b51..04d5c4b474a 100644
--- a/src/test/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProviderTest.java
+++ b/src/test/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProviderTest.java
@@ -198,7 +198,7 @@ public class LearningPathNodeAccessProviderTest {
 		sut.updateFullyAssessed(courseNodeMock, participantCourseEnv, Role.auto, result);
 
 		verify(courseAssessmentService).updateFullyAssessed(courseNodeMock, participantCourseEnv, Boolean.FALSE,
-				AssessmentEntryStatus.done, Role.auto);
+				AssessmentEntryStatus.notStarted, Role.auto);
 	}
 	
 	@Test
-- 
GitLab