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