diff --git a/backend/src/main/java/core/api/models/timemanager/tasks/repeatinginfo/TaskRepeatDayInfo.java b/backend/src/main/java/core/api/models/timemanager/tasks/repeatinginfo/TaskRepeatDayInfo.java index a188057..8bcf9b1 100644 --- a/backend/src/main/java/core/api/models/timemanager/tasks/repeatinginfo/TaskRepeatDayInfo.java +++ b/backend/src/main/java/core/api/models/timemanager/tasks/repeatinginfo/TaskRepeatDayInfo.java @@ -7,7 +7,6 @@ import java.time.LocalDate; public class TaskRepeatDayInfo { private int offset; - private DeadlineStrategy deadlineStrategy; @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX") private LocalDate endingDate; @@ -20,14 +19,6 @@ public class TaskRepeatDayInfo { this.offset = offset; } - public DeadlineStrategy getDeadlineStrategy() { - return deadlineStrategy; - } - - public void setDeadlineStrategy(DeadlineStrategy deadlineStrategy) { - this.deadlineStrategy = deadlineStrategy; - } - public LocalDate getEndingDate() { return endingDate; } diff --git a/backend/src/main/java/core/api/models/timemanager/tasks/repeatinginfo/TaskRepeatWeekInfo.java b/backend/src/main/java/core/api/models/timemanager/tasks/repeatinginfo/TaskRepeatWeekInfo.java index eadf689..4838296 100644 --- a/backend/src/main/java/core/api/models/timemanager/tasks/repeatinginfo/TaskRepeatWeekInfo.java +++ b/backend/src/main/java/core/api/models/timemanager/tasks/repeatinginfo/TaskRepeatWeekInfo.java @@ -15,7 +15,6 @@ public class TaskRepeatWeekInfo { @Size(min = 1, max = 7) private List weekDayInfos; - private DeadlineStrategy deadlineStrategy; @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX") private LocalDate endDate; @@ -26,15 +25,6 @@ public class TaskRepeatWeekInfo { public void setWeekDayInfos(List weekDayInfos) { this.weekDayInfos = weekDayInfos; } - - public DeadlineStrategy getDeadlineStrategy() { - return deadlineStrategy; - } - - public void setDeadlineStrategy(DeadlineStrategy deadlineStrategy) { - this.deadlineStrategy = deadlineStrategy; - } - public LocalDate getEndDate() { return endDate; } diff --git a/backend/src/main/java/core/entities/timemanager/Task.java b/backend/src/main/java/core/entities/timemanager/Task.java index 8d05038..efe9fd8 100644 --- a/backend/src/main/java/core/entities/timemanager/Task.java +++ b/backend/src/main/java/core/entities/timemanager/Task.java @@ -88,28 +88,19 @@ public class Task { return new Tripel<>(clonedTask, clonedTasks, clonedSchedules); } - public void shiftTask(long startingDayDifference, long endingDayDifference) { - this.setStartDate(this.getStartDate().plusDays(startingDayDifference)); - this.setDeadline(this.getDeadline().plusDays(endingDayDifference)); + public void shiftTask(long offset) { + this.setStartDate(this.getStartDate().plusDays(offset)); + this.setDeadline(this.getDeadline().plusDays(offset)); for(AbstractSchedule abstractSchedule : this.basicTaskSchedules) { - abstractSchedule.shiftSchedule(startingDayDifference); + abstractSchedule.shiftSchedule(offset); } for(Task subtask: this.subtasks) { - subtask.shiftTask(startingDayDifference, endingDayDifference); + subtask.shiftTask(offset); } } - public void shiftTask(long startingDayDifference) { - this.setStartDate(this.getStartDate().plusDays(startingDayDifference)); - this.setDeadline(this.getStartDate()); - - for(Task subtask: this.subtasks) { - subtask.shiftTask(startingDayDifference); - } - } - public long getTaskID() { return taskID; @@ -299,11 +290,4 @@ public class Task { public void increaseWorkTime(long minutes) { this.workTime += (int) minutes; } - - public void shiftStartingTask(long dayDifference) { - this.setStartDate(this.getStartDate().plusDays(dayDifference)); - for (Task subtask : this.subtasks) { - subtask.shiftTask(dayDifference); - } - } } diff --git a/backend/src/main/java/core/services/TaskSeriesService.java b/backend/src/main/java/core/services/TaskSeriesService.java index 10c752f..11764e3 100644 --- a/backend/src/main/java/core/services/TaskSeriesService.java +++ b/backend/src/main/java/core/services/TaskSeriesService.java @@ -29,13 +29,13 @@ public class TaskSeriesService { public ServiceExitCode createTaskSeries(TaskRepeatWeekInfo taskRepeatInfo) { - HashMap> offsetMap = calcWeeklyOffsetMap(taskRepeatInfo); + HashMap offsetMap = calcWeeklyOffsetMap(taskRepeatInfo); TaskSerie taskSerie = new TaskSerie(); List clonedTasks = new ArrayList<>(); List clonedSchedules = new ArrayList<>(); int weekDayIndex = 0; - for(Map.Entry> repeatingTaskInfo: offsetMap.entrySet()) { + for(Map.Entry repeatingTaskInfo: offsetMap.entrySet()) { Task rootTask = repeatingTaskInfo.getKey(); TaskSerieItem rootItem = new TaskSerieItem(rootTask, weekDayIndex); taskSerie.addItem(rootItem); @@ -58,11 +58,11 @@ public class TaskSeriesService { return ServiceExitCode.OK; } - private Tupel, Collection> repeatTask(Task rootTask, LocalDate endingDate, HashMap> offsetMap,TaskSerie taskSerie, int itemIndex) { + private Tupel, Collection> repeatTask(Task rootTask, LocalDate endingDate, HashMap offsetMap,TaskSerie taskSerie, int itemIndex) { List clonedTasks = new ArrayList<>(); List clonedSchedules = new ArrayList<>(); - LocalDate currentDate = rootTask.getStartDate().plusDays(offsetMap.get(rootTask).getValue00()); + LocalDate currentDate = rootTask.getStartDate().plusDays(offsetMap.get(rootTask)); while(currentDate.isBefore(endingDate)) { var cloneResult = rootTask.cloneTask(); Task clonedRootTask = cloneResult.getValue00(); @@ -74,87 +74,52 @@ public class TaskSeriesService { taskSerie.addItem(item); } - Tupel offsetEntry = offsetMap.get(rootTask); - clonedRootTask.shiftTask(offsetEntry.getValue00(), offsetEntry.getValue01()); + clonedRootTask.shiftTask(offsetMap.get(rootTask)); - currentDate = currentDate.plusDays(offsetEntry.getValue00()); + currentDate = currentDate.plusDays(offsetMap.get(rootTask)); itemIndex += offsetMap.size(); } return new Tupel<>(clonedTasks, clonedSchedules); } - private HashMap> calcWeeklyOffsetMap(TaskRepeatWeekInfo weekInfo) throws NoSuchElementException { - HashMap> offsetMap = new HashMap<>(); + private HashMap calcWeeklyOffsetMap(TaskRepeatWeekInfo weekInfo) throws NoSuchElementException { + HashMap offsetMap = new HashMap<>(); weekInfo.getWeekDayInfos().sort(Comparator.comparing(TaskRepeatWeekDayInfo::getDayOfWeek)); for(int i=0; i requestedTask = taskRepository.findById(weekInfo.getWeekDayInfos().get(i).getTaskID()); if(requestedTask.isEmpty()) { throw new NoSuchElementException(); } else { - if(weekInfo.getDeadlineStrategy() == DeadlineStrategy.DEADLINE_EQUAL_START) { - int offset = weekInfo.getWeekDayInfos().get(i).getOffset()-1; - offsetMap.put(requestedTask.get(), new Tupel<>(offset, offset)); - } else { - int startingOffset = weekInfo.getWeekDayInfos().get(i).getOffset() -1; - int endingOffset = getEndingOffset(weekInfo, i, startingOffset); - - offsetMap.put(requestedTask.get(), new Tupel<>(startingOffset, endingOffset)); - } + int offset = weekInfo.getWeekDayInfos().get(i).getOffset()-1; + offsetMap.put(requestedTask.get(), offset); } } return offsetMap; } - private static int getEndingOffset(TaskRepeatWeekInfo weekInfo, int i, int startingOffset) { - DayOfWeek nextWeekday; - if(i == weekInfo.getWeekDayInfos().size()-1) { - nextWeekday = weekInfo.getWeekDayInfos().get(0).getDayOfWeek(); - } else { - nextWeekday = weekInfo.getWeekDayInfos().get(i +1).getDayOfWeek(); - } - - DayOfWeek currentWeekDay = weekInfo.getWeekDayInfos().get(i).getDayOfWeek(); - - int endingOffset = startingOffset + Math.abs(nextWeekday.getValue() - currentWeekDay.getValue()); - return endingOffset; - } - public ServiceExitCode createTaskSeries(Task rootTask, TaskRepeatDayInfo taskRepeatInfo) { - if(taskRepeatInfo.getDeadlineStrategy() == DeadlineStrategy.FIX_DEADLINE) { - return ServiceExitCode.INVALID_PARAMETER; - } - - List taskList = new ArrayList<>(); - List abstractSchedules = new ArrayList<>(); TaskSerie taskSerie = new TaskSerie(); TaskSerieItem rootItem = taskSerie.addTask(rootTask); rootTask.setTaskSerieItem(rootItem); + HashMap offsetMap = new HashMap<>(); + offsetMap.put(rootTask, taskRepeatInfo.getOffset()); + + var repeatingResult = repeatTask(rootTask, taskRepeatInfo.getEndingDate(), offsetMap, taskSerie, 0); + List clonedTasks = new ArrayList<>(repeatingResult.getValue00()); + List clonedSchedules = new ArrayList<>(repeatingResult.getValue01()); taskSeriesRepository.save(taskSerie); - taskRepository.saveAll(taskList); + taskRepository.saveAll(clonedTasks); taskSerieItemRepository.saveAll(taskSerie.getTasks()); - scheduleRepository.saveAll(abstractSchedules); + scheduleRepository.saveAll(clonedSchedules); return ServiceExitCode.OK; } - public List cloneSchedules(Task previousTask, Task nextTask) { - long numberDays = ChronoUnit.DAYS.between(previousTask.getStartDate(), nextTask.getStartDate()); - - List clonedSchedules = new ArrayList<>(); - for(AbstractSchedule abstractSchedule : previousTask.getBasicTaskSchedules()) { - AbstractSchedule clonedSchedule = abstractSchedule.cloneSchedule(); - clonedSchedule.shiftSchedule(numberDays); - - clonedSchedules.add(clonedSchedule); - } - return clonedSchedules; - } - public void deleteTaskSeriesItem(Task task) { TaskSerieItem item = task.getTaskSerieItem(); TaskSerie taskSerie = task.getTaskSerieItem().getTaskSerie();