From 02fd2ec0ee69e1e0e428bef1db0a2b6d3d21580c Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 4 Oct 2017 08:52:16 +0200
Subject: [PATCH] OO-3060: write reminder markes as 'disabled' if the reminder
 function is disabled but mark them

---
 .../manager/LectureBlockReminderDAO.java      |  8 ++-
 .../lecture/manager/LectureServiceImpl.java   | 12 ++--
 .../lecture/manager/ReminderLecturesJob.java  |  8 +--
 .../manager/LectureBlockReminderDAOTest.java  | 60 +++++++++++++++++++
 4 files changed, 75 insertions(+), 13 deletions(-)

diff --git a/src/main/java/org/olat/modules/lecture/manager/LectureBlockReminderDAO.java b/src/main/java/org/olat/modules/lecture/manager/LectureBlockReminderDAO.java
index 3a020fa7f6a..e74d8d70f3f 100644
--- a/src/main/java/org/olat/modules/lecture/manager/LectureBlockReminderDAO.java
+++ b/src/main/java/org/olat/modules/lecture/manager/LectureBlockReminderDAO.java
@@ -26,6 +26,8 @@ import java.util.List;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
 import org.olat.modules.lecture.LectureBlock;
+import org.olat.modules.lecture.LectureBlockStatus;
+import org.olat.modules.lecture.LectureRollCallStatus;
 import org.olat.modules.lecture.model.LectureBlockReminderImpl;
 import org.olat.modules.lecture.model.LectureBlockToTeacher;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -54,7 +56,7 @@ public class LectureBlockReminderDAO {
 	}
 	
 	public List<LectureBlockToTeacher> getLectureBlockTeachersToReminder(Date date) {
-		StringBuilder sb = new StringBuilder();
+		StringBuilder sb = new StringBuilder(256);
 		sb.append("select block, teacher from lectureblock block")
 		  .append(" inner join fetch block.entry re")
 		  .append(" inner join block.teacherGroup tGroup")
@@ -64,7 +66,9 @@ public class LectureBlockReminderDAO {
 		  .append(" where block.endDate<:date and not exists (")
 		  .append("   select reminder.key from lecturereminder reminder")
 		  .append("   where block.key=reminder.lectureBlock.key and teacher.key=reminder.identity.key")
-		  .append(" )");
+		  .append(" ) and block.statusString<>'").append(LectureBlockStatus.cancelled.name()).append("'")
+		  .append(" and block.rollCallStatusString not in ('").append(LectureRollCallStatus.closed.name()).append("','")
+		  .append(LectureRollCallStatus.autoclosed.name()).append("','").append(LectureRollCallStatus.reopen.name()).append("')");
 		
 		List<Object[]> raws = dbInstance.getCurrentEntityManager()
 			.createQuery(sb.toString(), Object[].class)
diff --git a/src/main/java/org/olat/modules/lecture/manager/LectureServiceImpl.java b/src/main/java/org/olat/modules/lecture/manager/LectureServiceImpl.java
index 7865fc661cd..c3dc269b054 100644
--- a/src/main/java/org/olat/modules/lecture/manager/LectureServiceImpl.java
+++ b/src/main/java/org/olat/modules/lecture/manager/LectureServiceImpl.java
@@ -647,18 +647,22 @@ public class LectureServiceImpl implements LectureService, UserDataDeletable, De
 
 	@Override
 	public void sendReminders() {
-		boolean reminderEnabled = lectureModule.isRollCallReminderEnabled();
 		int reminderPeriod = lectureModule.getRollCallReminderPeriod();
-		if(reminderEnabled && reminderPeriod > 0) {
+		if(reminderPeriod > 0) {
 			Calendar cal = Calendar.getInstance();
 			cal.add(Calendar.DATE, -reminderPeriod);
 			Date endDate = cal.getTime();
-			
+
+			boolean reminderEnabled = lectureModule.isRollCallReminderEnabled();
 			List<LectureBlockToTeacher> toRemindList = lectureBlockReminderDao.getLectureBlockTeachersToReminder(endDate);
 			for(LectureBlockToTeacher toRemind:toRemindList) {
 				Identity teacher = toRemind.getTeacher();
 				LectureBlock lectureBlock = toRemind.getLectureBlock();
-				sendReminder(teacher, lectureBlock);
+				if(reminderEnabled) {
+					sendReminder(teacher, lectureBlock);
+				} else {
+					lectureBlockReminderDao.createReminder(lectureBlock, teacher, "disabled");
+				}
 			}
 		}
 	}
diff --git a/src/main/java/org/olat/modules/lecture/manager/ReminderLecturesJob.java b/src/main/java/org/olat/modules/lecture/manager/ReminderLecturesJob.java
index bd5efe8e3ef..d5e323a1e02 100644
--- a/src/main/java/org/olat/modules/lecture/manager/ReminderLecturesJob.java
+++ b/src/main/java/org/olat/modules/lecture/manager/ReminderLecturesJob.java
@@ -21,7 +21,6 @@ package org.olat.modules.lecture.manager;
 
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.services.scheduler.JobWithDB;
-import org.olat.modules.lecture.LectureModule;
 import org.olat.modules.lecture.LectureService;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
@@ -37,11 +36,6 @@ public class ReminderLecturesJob extends JobWithDB {
 
 	@Override
 	public void executeWithDB(JobExecutionContext arg0) throws JobExecutionException {
-		LectureModule lectureModule = CoreSpringFactory.getImpl(LectureModule.class);
-		boolean reminderEnabled = lectureModule.isEnabled() && lectureModule.isRollCallReminderEnabled();
-		int reminderPeriod = lectureModule.getRollCallReminderPeriod();
-		if(reminderEnabled && reminderPeriod > 0) {
-			CoreSpringFactory.getImpl(LectureService.class).sendReminders();
-		}
+		CoreSpringFactory.getImpl(LectureService.class).sendReminders();
 	}
 }
diff --git a/src/test/java/org/olat/modules/lecture/manager/LectureBlockReminderDAOTest.java b/src/test/java/org/olat/modules/lecture/manager/LectureBlockReminderDAOTest.java
index 96eacadbb25..13fe1acd412 100644
--- a/src/test/java/org/olat/modules/lecture/manager/LectureBlockReminderDAOTest.java
+++ b/src/test/java/org/olat/modules/lecture/manager/LectureBlockReminderDAOTest.java
@@ -28,6 +28,8 @@ import org.junit.Test;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
 import org.olat.modules.lecture.LectureBlock;
+import org.olat.modules.lecture.LectureBlockStatus;
+import org.olat.modules.lecture.LectureRollCallStatus;
 import org.olat.modules.lecture.LectureService;
 import org.olat.modules.lecture.model.LectureBlockReminderImpl;
 import org.olat.modules.lecture.model.LectureBlockToTeacher;
@@ -101,6 +103,64 @@ public class LectureBlockReminderDAOTest extends OlatTestCase {
 		Assert.assertFalse(hasTeacher1);
 	}
 	
+	@Test
+	public void loadLectureBlockToRemind_status() {
+		Identity teacher1 = JunitTestHelper.createAndPersistIdentityAsRndUser("reminder-8");
+		Identity teacher2 = JunitTestHelper.createAndPersistIdentityAsRndUser("reminder-9");
+		LectureBlock lectureBlockAutoClosed = createMinimalLectureBlock(5);
+		LectureBlock lectureBlockClosed = createMinimalLectureBlock(5);
+		LectureBlock lectureBlockCancelled = createMinimalLectureBlock(5);
+		LectureBlock lectureBlockReopen = createMinimalLectureBlock(5);
+		LectureBlock lectureBlockOpen = createMinimalLectureBlock(5);
+		LectureBlock lectureBlock = createMinimalLectureBlock(5);
+		dbInstance.commit();
+		//add the teachers
+		lectureService.addTeacher(lectureBlockAutoClosed, teacher1);
+		lectureService.addTeacher(lectureBlockClosed, teacher1);
+		lectureService.addTeacher(lectureBlockCancelled, teacher2);
+		lectureService.addTeacher(lectureBlockReopen, teacher1);
+		lectureService.addTeacher(lectureBlockReopen, teacher2);
+		lectureService.addTeacher(lectureBlockOpen, teacher1);
+		lectureService.addTeacher(lectureBlockOpen, teacher2);
+		lectureService.addTeacher(lectureBlock, teacher2);
+		dbInstance.commit();
+		lectureBlockAutoClosed.setRollCallStatus(LectureRollCallStatus.autoclosed);
+		lectureBlockAutoClosed = lectureService.save(lectureBlockAutoClosed, null);
+		lectureBlockClosed.setRollCallStatus(LectureRollCallStatus.closed);
+		lectureBlockClosed = lectureService.save(lectureBlockClosed, null);
+		lectureBlockCancelled.setStatus(LectureBlockStatus.cancelled);
+		lectureBlockCancelled = lectureService.save(lectureBlockCancelled, null);
+		lectureBlockReopen.setRollCallStatus(LectureRollCallStatus.reopen);
+		lectureBlockReopen = lectureService.save(lectureBlockReopen, null);
+		lectureBlockOpen.setRollCallStatus(LectureRollCallStatus.open);
+		lectureBlockOpen = lectureService.save(lectureBlockOpen, null);
+		dbInstance.commitAndCloseSession();;
+
+		Calendar cal = Calendar.getInstance();
+		cal.add(Calendar.DATE, -3);
+		
+		List<LectureBlockToTeacher> toRemind = lectureBlockReminderDao.getLectureBlockTeachersToReminder(cal.getTime());
+		
+		boolean hasBlock = false;
+		boolean hasBlockOpen = false;
+		boolean hasOtherBlock = false;
+		for(LectureBlockToTeacher remind:toRemind) {
+			if(remind.getLectureBlock().equals(lectureBlock)) {
+				hasBlock = true;
+			} else if(remind.getLectureBlock().equals(lectureBlockOpen)) {
+				hasBlockOpen = true;
+			} else if(remind.getLectureBlock().equals(lectureBlockAutoClosed)
+					|| remind.getLectureBlock().equals(lectureBlockClosed)
+					|| remind.getLectureBlock().equals(lectureBlockCancelled)) {
+				hasOtherBlock = true;
+			}
+		}
+		
+		Assert.assertTrue(hasBlock);
+		Assert.assertTrue(hasBlockOpen);
+		Assert.assertFalse(hasOtherBlock);
+	}
+	
 	@Test
 	public void deleteReminder() {
 		//create a reminder
-- 
GitLab