diff --git a/src/main/java/ch/zhaw/gartenverwaltung/models/GardenSchedule.java b/src/main/java/ch/zhaw/gartenverwaltung/models/GardenSchedule.java index a362f00..f4b2bb3 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/models/GardenSchedule.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/models/GardenSchedule.java @@ -9,6 +9,7 @@ import java.time.LocalDate; import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.function.Consumer; import java.util.stream.Collectors; public class GardenSchedule { @@ -136,10 +137,22 @@ public class GardenSchedule { * @throws IOException If the database cannot be accessed */ public List> getTasksUpcomingWeek() throws IOException { + final int listLength = 7; + List weekTasks = taskList.getTaskList(LocalDate.now(), LocalDate.now().plusDays(listLength - 1)); List> dayTaskList = new ArrayList<>(); - for(int i = 0; i < 7; i++) { + for(int i = 0; i < listLength; i++) { LocalDate date = LocalDate.now().plusDays(i); - dayTaskList.add(taskList.getTaskList(date, date)); + dayTaskList.add(new ArrayList<>()); + final int finalI = i; + weekTasks.forEach(task -> { + LocalDate checkDate = task.getNextExecution(); + do { + if (date.equals(checkDate) && !date.isAfter(task.getEndDate().orElse(LocalDate.MIN))) { + dayTaskList.get(finalI).add(task); + } + checkDate = checkDate.plusDays(task.getInterval().orElse(0)); + } while (task.getInterval().isPresent() && checkDate.isBefore(LocalDate.now().plusDays(listLength))); + }); } return dayTaskList; } @@ -150,11 +163,8 @@ public class GardenSchedule { * @throws IOException If the database cannot be accessed */ public List> getTasksUpcomingWeekForCrop(Long cropId) throws IOException { - List> dayTaskList = new ArrayList<>(); - for(int i = 0; i < 7; i++) { - LocalDate date = LocalDate.now().plusDays(i); - dayTaskList.add(filterListByCrop(taskList.getTaskList(date, date), cropId)); - } + List> dayTaskList = getTasksUpcomingWeek(); + dayTaskList.forEach(taskList -> taskList.removeIf(task -> task.getCropId() != cropId)); return dayTaskList; } diff --git a/src/main/java/ch/zhaw/gartenverwaltung/types/Task.java b/src/main/java/ch/zhaw/gartenverwaltung/types/Task.java index 509eb7a..f1f2dd1 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/types/Task.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/types/Task.java @@ -27,6 +27,7 @@ public class Task { name= ""; description= ""; startDate = LocalDate.now(); + endDate = startDate; nextExecution = startDate; } @@ -34,6 +35,7 @@ public class Task { this.name = name; this.description = description; this.startDate = startDate; + this.endDate = startDate; nextExecution = startDate; this.cropId = cropId; } @@ -63,7 +65,7 @@ public class Task { } public boolean isInTimePeriode(LocalDate searchStartDate, LocalDate searchEndDate){ - return startDate.isAfter(searchStartDate) && startDate.isBefore(searchEndDate); + return endDate.isAfter(searchStartDate) && startDate.isBefore(searchEndDate); } public void done(){ diff --git a/src/test/java/ch/zhaw/gartenverwaltung/models/GardenScheduleTest.java b/src/test/java/ch/zhaw/gartenverwaltung/models/GardenScheduleTest.java index 0cadffb..5e32687 100644 --- a/src/test/java/ch/zhaw/gartenverwaltung/models/GardenScheduleTest.java +++ b/src/test/java/ch/zhaw/gartenverwaltung/models/GardenScheduleTest.java @@ -15,7 +15,7 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; class GardenScheduleTest { - LocalDate exampleStartDate = LocalDate.of(2020, 02, 02); + LocalDate exampleStartDate = LocalDate.of(2020, 2, 2); TaskList taskList; PlantList plantList; List examplePlantList; @@ -43,6 +43,7 @@ class GardenScheduleTest { private TaskList mockTaskDatabase(List exampleTaskList) throws IOException { TaskList taskList = mock(JsonTaskList.class); when(taskList.getTaskList(LocalDate.MIN, LocalDate.MAX)).thenReturn(exampleTaskList); + when(taskList.getTaskList(LocalDate.now(), LocalDate.now().plusDays(7 - 1))).thenReturn(exampleTaskList); when(taskList.getTaskList(LocalDate.now(), LocalDate.MAX)).thenReturn((exampleTaskList.subList(1, 4))); @@ -105,7 +106,7 @@ class GardenScheduleTest { exampleTaskList.add(new Task("name", "description", LocalDate.now().plusDays(1), 2L)); exampleTaskList.add(new Task("name", "description", LocalDate.now(), 1L)); exampleTaskList.add(new Task("name", "description", LocalDate.of(9019, 5, 5), 1L)); - exampleTaskList.add(new Task("name", "description", LocalDate.of(2019, 5, 5), 2L)); + exampleTaskList.add(new Task("name", "description", LocalDate.now().minusDays(10), LocalDate.now().plusDays(4),2, 2L)); } @Test @@ -157,19 +158,22 @@ class GardenScheduleTest { assertEquals(7, dayList.size()); //Check day 0 - assertEquals(1, dayList.get(0).size()); - assertEquals(exampleTaskList.get(2), dayList.get(0).get(0)); + assertEquals(2, dayList.get(0).size()); + assertTrue(dayList.get(0).contains(exampleTaskList.get(2))); + assertTrue(dayList.get(0).contains(exampleTaskList.get(4))); //Check day 1 assertEquals(1, dayList.get(1).size()); - assertEquals(exampleTaskList.get(1), dayList.get(1).get(0)); + assertTrue(dayList.get(1).contains(exampleTaskList.get(1))); //Check day 2 - assertEquals(0, dayList.get(2).size()); + assertEquals(1, dayList.get(2).size()); + assertTrue(dayList.get(2).contains(exampleTaskList.get(4))); //Check day 3 assertEquals(0, dayList.get(3).size()); //Check day 4 - assertEquals(0, dayList.get(4).size()); + assertEquals(1, dayList.get(4).size()); + assertTrue(dayList.get(4).contains(exampleTaskList.get(4))); //Check day 5 assertEquals(0, dayList.get(5).size()); //Check day 6