From c79dcfdc0763c4a7d1fce28fa9c4bb982a9e684e Mon Sep 17 00:00:00 2001
From: uhensler <urs.hensler@frentix.com>
Date: Mon, 27 Apr 2020 08:53:26 +0200
Subject: [PATCH] OO-4582: Update efficiency statement after recalculation of
 passed

---
 .../manager/CourseAssessmentServiceImpl.java  | 21 ++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentServiceImpl.java b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentServiceImpl.java
index 0f8800b1c54..83ed2da098e 100644
--- a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentServiceImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentServiceImpl.java
@@ -25,6 +25,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 
 import javax.annotation.PostConstruct;
@@ -56,6 +57,7 @@ import org.olat.course.run.environment.CourseEnvironment;
 import org.olat.course.run.navigation.NodeVisitedListener;
 import org.olat.course.run.scoring.AccountingEvaluators;
 import org.olat.course.run.scoring.AssessmentEvaluation;
+import org.olat.course.run.scoring.ScoreAccounting;
 import org.olat.course.run.scoring.ScoreEvaluation;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.course.run.userview.UserCourseEnvironmentImpl;
@@ -406,7 +408,24 @@ public class CourseAssessmentServiceImpl implements CourseAssessmentService, Nod
 		IdentityEnvironment identityEnv = new IdentityEnvironment();
 		identityEnv.setIdentity(assessedIdentity);
 		UserCourseEnvironment userCourseEnv = new UserCourseEnvironmentImpl(identityEnv, courseEnv);
-		userCourseEnv.getScoreAccounting().evaluateAll(true);
+		
+		RepositoryEntry courseEntry = courseEnv.getCourseGroupManager().getCourseEntry();
+		CourseNode rootNode = courseEnv.getRunStructure().getRootNode();
+		AssessmentEntry rootAssessmentEntry = assessmentService.loadAssessmentEntry(assessedIdentity, courseEntry, rootNode.getIdent());
+		Boolean previousPassed = rootAssessmentEntry != null
+				? rootAssessmentEntry.getPassedOverridable().getCurrent()
+				: null;
+		
+		ScoreAccounting scoreAccounting = userCourseEnv.getScoreAccounting();
+		scoreAccounting.evaluateAll(true);
+		
+		AssessmentEvaluation rootAssessmentEvaluation = scoreAccounting.evalCourseNode(rootNode);
+		Boolean currentPassed = rootAssessmentEvaluation.getPassed();
+		
+		// Save root score evaluation to propagate to efficiency statement
+		if (!Objects.equals(previousPassed, currentPassed)) {
+			saveScoreEvaluation(rootNode, null, rootAssessmentEvaluation, userCourseEnv, false, null);
+		}
 	}
 
 	@Override
-- 
GitLab