From b76f65365ff67e87bccc4d3d19be60a5bc4037f3 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Fri, 2 Jun 2017 08:38:38 +0200
Subject: [PATCH] OO-2795: show the real intitial course launch date in
 assessment tool to match the label

---
 .../UserCourseInformationsManager.java        |  2 ++
 .../UserCourseInformationsManagerImpl.java    | 28 ++++++++++++++++++-
 .../IdentityListCourseNodeController.java     |  8 +++++-
 .../IdentityListCourseNodeTableModel.java     |  2 +-
 .../ui/AssessedIdentityElementRow.java        | 16 ++++++-----
 .../ui/AssessedIdentityListController.java    |  9 +++++-
 .../ui/AssessedIdentityListTableModel.java    |  2 +-
 7 files changed, 55 insertions(+), 12 deletions(-)

diff --git a/src/main/java/org/olat/course/assessment/manager/UserCourseInformationsManager.java b/src/main/java/org/olat/course/assessment/manager/UserCourseInformationsManager.java
index 315a00a152c..6a354efee74 100644
--- a/src/main/java/org/olat/course/assessment/manager/UserCourseInformationsManager.java
+++ b/src/main/java/org/olat/course/assessment/manager/UserCourseInformationsManager.java
@@ -70,6 +70,8 @@ public interface UserCourseInformationsManager {
 	 */
 	public Map<Long,Date> getInitialLaunchDates(Long courseResourceId);
 	
+	public Map<Long,Date> getInitialLaunchDates(OLATResource resource);
+	
 	public int deleteUserCourseInformations(RepositoryEntry entry);
 
 }
diff --git a/src/main/java/org/olat/course/assessment/manager/UserCourseInformationsManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/UserCourseInformationsManagerImpl.java
index 63eddbf537d..f97267f00d3 100644
--- a/src/main/java/org/olat/course/assessment/manager/UserCourseInformationsManagerImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/UserCourseInformationsManagerImpl.java
@@ -266,7 +266,6 @@ public class UserCourseInformationsManagerImpl implements UserCourseInformations
 	@Override
 	public Map<Long,Date> getInitialLaunchDates(Long courseResourceId) {
 		try {
-
 			StringBuilder sb = new StringBuilder();
 			sb.append("select infos.identity.key, infos.initialLaunch from ").append(UserCourseInfosImpl.class.getName()).append(" as infos ")
 			  .append(" inner join infos.resource as resource")
@@ -290,6 +289,33 @@ public class UserCourseInformationsManagerImpl implements UserCourseInformations
 			return Collections.emptyMap();
 		}
 	}
+	
+	@Override
+	public Map<Long,Date> getInitialLaunchDates(OLATResource resource) {
+		try {
+			StringBuilder sb = new StringBuilder();
+			sb.append("select infos.identity.key, infos.initialLaunch from usercourseinfos as infos ")
+			  .append(" inner join infos.resource as resource")
+			  .append(" where resource.key=:resourceKey");
+
+			TypedQuery<Object[]> query = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Object[].class)
+					.setParameter("resourceKey", resource.getKey());
+
+			List<Object[]> infoList = query.getResultList();
+			Map<Long,Date> dateMap = new HashMap<Long,Date>();
+			for(Object[] infos:infoList) {
+				Long identityKey = (Long)infos[0];
+				Date initialLaunch = (Date)infos[1];
+				if(identityKey != null && initialLaunch != null) {
+					dateMap.put(identityKey, initialLaunch);
+				}
+			}
+			return dateMap;
+		} catch (Exception e) {
+			log.error("Cannot retrieve course informations for: " + resource, e);
+			return Collections.emptyMap();
+		}
+	}
 
 	@Override
 	public Map<Long, Date> getRecentLaunchDates(OLATResource resource) {
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java b/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
index 21ad5fd7397..2168f49f359 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
@@ -21,6 +21,7 @@ package org.olat.course.assessment.ui.tool;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -73,6 +74,7 @@ import org.olat.course.ICourse;
 import org.olat.course.assessment.AssessmentModule;
 import org.olat.course.assessment.AssessmentToolManager;
 import org.olat.course.assessment.bulk.PassedCellRenderer;
+import org.olat.course.assessment.manager.UserCourseInformationsManager;
 import org.olat.course.assessment.model.SearchAssessedIdentityParams;
 import org.olat.course.assessment.ui.tool.IdentityListCourseNodeTableModel.IdentityCourseElementCols;
 import org.olat.course.certificate.CertificateLight;
@@ -143,6 +145,8 @@ public class IdentityListCourseNodeController extends FormBasicController implem
 	@Autowired
 	private CertificatesManager certificatesManager;
 	@Autowired
+	private UserCourseInformationsManager userInfosMgr;
+	@Autowired
 	private AssessmentToolManager assessmentToolManager;
 	
 	public IdentityListCourseNodeController(UserRequest ureq, WindowControl wControl, TooledStackedPanel stackPanel,
@@ -343,11 +347,13 @@ public class IdentityListCourseNodeController extends FormBasicController implem
 		assessmentEntries.stream()
 			.filter(entry -> entry.getIdentity() != null)
 			.forEach((entry) -> entryMap.put(entry.getIdentity().getKey(), entry));
+		Map<Long,Date> initialLaunchDates = userInfosMgr.getInitialLaunchDates(courseEntry.getOlatResource());
 
 		List<AssessedIdentityElementRow> rows = new ArrayList<>(assessedIdentities.size());
 		for(Identity assessedIdentity:assessedIdentities) {
 			AssessmentEntry entry = entryMap.get(assessedIdentity.getKey());
-			rows.add(new AssessedIdentityElementRow(assessedIdentity, entry, userPropertyHandlers, getLocale()));
+			Date initialLaunchDate = initialLaunchDates.get(assessedIdentity.getKey());
+			rows.add(new AssessedIdentityElementRow(assessedIdentity, entry, initialLaunchDate, userPropertyHandlers, getLocale()));
 		}
 		
 		if(toolContainer.getCertificateMap() == null) {
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeTableModel.java b/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeTableModel.java
index eaf0be11426..bc25f7d5ea0 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeTableModel.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeTableModel.java
@@ -146,7 +146,7 @@ public class IdentityListCourseNodeTableModel extends DefaultFlexiTableDataModel
 					CertificateLight certificate = certificateMap.get(row.getIdentityKey());
 					return certificate == null ? null : certificate.getNextRecertificationDate();
 				}
-				case initialLaunchDate: return row.getCreationDate();
+				case initialLaunchDate: return row.getInitialCourseLaunchDate();
 				case lastScoreUpdate: return row.getLastModified();
 			}
 		}
diff --git a/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityElementRow.java b/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityElementRow.java
index c2846834860..603127f241e 100644
--- a/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityElementRow.java
+++ b/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityElementRow.java
@@ -42,19 +42,20 @@ public class AssessedIdentityElementRow extends UserPropertiesRow {
 	private final Boolean userVisibility;
 	private final BigDecimal score;
 	private final Boolean passed;
-	private final Date creationDate;
+	private final Date initialCourseLaunchDate;
 	private final Date lastModified;
 	private final int numOfAssessmentDocs;
 	private final AssessmentEntryStatus status;
 	
-	public AssessedIdentityElementRow(Identity identity, AssessmentEntry entry, List<UserPropertyHandler> userPropertyHandlers, Locale locale) {
+	public AssessedIdentityElementRow(Identity identity, AssessmentEntry entry, Date initialCourseLaunchDate,
+			List<UserPropertyHandler> userPropertyHandlers, Locale locale) {
 		super(identity, userPropertyHandlers, locale);
+		this.initialCourseLaunchDate = initialCourseLaunchDate;
 		if(entry != null) {
 			attempts = entry.getAttempts();
 			score = entry.getScore();
 			passed = entry.getPassed();
-			userVisibility = entry.getUserVisibility(); 
-			creationDate = entry.getCreationDate();
+			userVisibility = entry.getUserVisibility();
 			lastModified = entry.getLastModified();
 			status = entry.getAssessmentStatus();
 			numOfAssessmentDocs = entry.getNumberOfAssessmentDocuments();
@@ -63,7 +64,7 @@ public class AssessedIdentityElementRow extends UserPropertiesRow {
 			score = null;
 			passed = null;
 			userVisibility = null;
-			creationDate = lastModified = null;
+			lastModified = null;
 			status = null;
 			numOfAssessmentDocs = 0;
 		}
@@ -81,9 +82,10 @@ public class AssessedIdentityElementRow extends UserPropertiesRow {
 		return passed;
 	}
 
-	public Date getCreationDate() {
-		return creationDate;
+	public Date getInitialCourseLaunchDate() {
+		return initialCourseLaunchDate;
 	}
+	
 
 	public Date getLastModified() {
 		return lastModified;
diff --git a/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListController.java b/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListController.java
index 4a3fdd7419f..f20d7030d75 100644
--- a/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListController.java
+++ b/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListController.java
@@ -21,6 +21,7 @@ package org.olat.modules.assessment.ui;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -59,6 +60,7 @@ import org.olat.core.util.Util;
 import org.olat.course.assessment.AssessmentModule;
 import org.olat.course.assessment.AssessmentToolManager;
 import org.olat.course.assessment.bulk.PassedCellRenderer;
+import org.olat.course.assessment.manager.UserCourseInformationsManager;
 import org.olat.course.assessment.model.SearchAssessedIdentityParams;
 import org.olat.course.assessment.ui.tool.AssessedIdentityListProvider;
 import org.olat.course.assessment.ui.tool.AssessmentStatusCellRenderer;
@@ -110,6 +112,8 @@ public class AssessedIdentityListController extends FormBasicController implemen
 	@Autowired
 	private BusinessGroupService businessGroupService;
 	@Autowired
+	private UserCourseInformationsManager userInfosMgr;
+	@Autowired
 	private AssessmentToolManager assessmentToolManager;
 	@Autowired
 	private RepositoryHandlerFactory repositoryHandlerFactory;
@@ -251,10 +255,13 @@ public class AssessedIdentityListController extends FormBasicController implemen
 		assessmentEntries.stream().filter((entry) -> entry.getIdentity() != null)
 			.forEach((entry) -> entryMap.put(entry.getIdentity().getKey(), entry));
 
+		Map<Long,Date> initialLaunchDates = userInfosMgr.getInitialLaunchDates(testEntry.getOlatResource());
+
 		List<AssessedIdentityElementRow> rows = new ArrayList<>(assessedIdentities.size());
 		for(Identity assessedIdentity:assessedIdentities) {
 			AssessmentEntry entry = entryMap.get(assessedIdentity.getKey());
-			rows.add(new AssessedIdentityElementRow(assessedIdentity, entry, userPropertyHandlers, getLocale()));
+			Date initialLaunchDate = initialLaunchDates.get(assessedIdentity.getKey());
+			rows.add(new AssessedIdentityElementRow(assessedIdentity, entry, initialLaunchDate, userPropertyHandlers, getLocale()));
 		}
 
 		usersTableModel.setObjects(rows);
diff --git a/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListTableModel.java b/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListTableModel.java
index b21b83ca7eb..2c264bb907d 100644
--- a/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListTableModel.java
+++ b/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListTableModel.java
@@ -136,7 +136,7 @@ public class AssessedIdentityListTableModel extends DefaultFlexiTableDataModel<A
 					}
 					return certificateMap.get(row.getIdentityKey());
 				}
-				case initialLaunchDate: return row.getCreationDate();
+				case initialLaunchDate: return row.getInitialCourseLaunchDate();
 				case lastScoreUpdate: return row.getLastModified();
 			}
 		}
-- 
GitLab