diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index d8a83e9..d01d75f 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -18,6 +18,9 @@ - https://github.com/ObeoNetwork/pepper/issues/18[#18] Enhance the ergonomy of contextual menu in Gantt - https://github.com/ObeoNetwork/pepper/issues/49[#49] Rework the detail views of Task and Workpackage - https://github.com/ObeoNetwork/pepper/issues/55[#55] Link detail view updates with Gantt view +- https://github.com/ObeoNetwork/pepper/issues/52[#52] Change task creation in Gantt +Change task creation in Gantt from creating a sibling task to a child task. + === Bug fixes diff --git a/backend/pepper-starter/src/main/java/pepper/starter/services/view/PepperMMJavaService.java b/backend/pepper-starter/src/main/java/pepper/starter/services/view/PepperMMJavaService.java index 5ab63fb..4fb133f 100644 --- a/backend/pepper-starter/src/main/java/pepper/starter/services/view/PepperMMJavaService.java +++ b/backend/pepper-starter/src/main/java/pepper/starter/services/view/PepperMMJavaService.java @@ -131,25 +131,35 @@ public void createTask(EObject context) { Task task = PepperFactory.eINSTANCE.createTask(); task.setName(NEW_TASK); if (context instanceof AbstractTask abstractTask) { - // The new task follows the context task and has the same duration as the context task. - if (abstractTask.getEndTime() != null && abstractTask.getStartTime() != null) { - if (abstractTask.getEndTime().equals(abstractTask.getStartTime())) { - // If the task is a Milestone - task.setStartTime(abstractTask.getEndTime()); - task.setEndTime(Instant.ofEpochSecond(2 * abstractTask.getEndTime().getEpochSecond() - abstractTask.getStartTime().getEpochSecond())); + // The new task follows the last sub-task. + Optional optionalTask = abstractTask.getSubTasks().stream().reduce((first, second) -> second) + .filter(filteredTask -> filteredTask.getEndTime() != null && filteredTask.getStartTime() != null); + + if (optionalTask.isPresent()) { + Task lastTask = optionalTask.get(); + if (lastTask.getEndTime().equals(lastTask.getStartTime())) { + // If the last task is a Milestone + task.setStartTime(lastTask.getEndTime()); + task.setEndTime(lastTask.getEndTime()); } else { - task.setStartTime(abstractTask.getEndTime().plus(1, ChronoUnit.MINUTES)); - task.setEndTime(Instant.ofEpochSecond(2 * abstractTask.getEndTime().getEpochSecond() - abstractTask.getStartTime().getEpochSecond()).plus(1, ChronoUnit.MINUTES)); + task.setStartTime(lastTask.getEndTime().plus(1, ChronoUnit.MINUTES)); + task.setEndTime(Instant.ofEpochSecond(2 * lastTask.getEndTime().getEpochSecond() - lastTask.getStartTime().getEpochSecond()).plus(1, ChronoUnit.MINUTES)); + } + } else { + if (abstractTask.getEndTime() != null && abstractTask.getStartTime() != null) { + task.setStartTime(abstractTask.getStartTime()); + task.setEndTime(abstractTask.getEndTime()); } } - - EObject parent = context.eContainer(); - if (parent instanceof Workpackage workpackage) { - int index = workpackage.getOwnedTasks().indexOf(context); - workpackage.getOwnedTasks().add(index + 1, task); - } else if (parent instanceof AbstractTask parentTask) { - int index = parentTask.getSubTasks().indexOf(context); - parentTask.getSubTasks().add(index + 1, task); + abstractTask.getSubTasks().add(task); + int levelLayer = 1; + var parent = context.eContainer(); + while (!(parent instanceof Workpackage)) { + levelLayer++; + parent = parent.eContainer(); + } + if (levelLayer == 4) { + this.feedbackMessageService.addFeedbackMessage(new Message("This view does not display more than 4 levels of tasks.", MessageLevel.WARNING)); } } else if (context instanceof Workpackage workpackage) { long epochSecondStartTime = Instant.now().getEpochSecond(); diff --git a/backend/pepper-starter/src/test/java/pepper/starter/configuration/view/PepperMMJavaServiceTests.java b/backend/pepper-starter/src/test/java/pepper/starter/configuration/view/PepperMMJavaServiceTests.java index ac6e135..ce2e35b 100644 --- a/backend/pepper-starter/src/test/java/pepper/starter/configuration/view/PepperMMJavaServiceTests.java +++ b/backend/pepper-starter/src/test/java/pepper/starter/configuration/view/PepperMMJavaServiceTests.java @@ -313,14 +313,14 @@ public void createTask() { assertThat(workpackage.getOwnedTasks()).hasSize(2); service.createTask(task1); - assertThat(workpackage.getOwnedTasks()).hasSize(3); - assertThat(workpackage.getOwnedTasks().get(1).getStartTime()).isEqualTo(Instant.parse(DATE2024_01_02_T00_00_00)); - assertThat(workpackage.getOwnedTasks().get(1).getEndTime()).isEqualTo(Instant.parse(DATE2024_01_02_T23_59_00)); - - service.createTask(task11); assertThat(task1.getSubTasks()).hasSize(2); assertThat(task1.getSubTasks().get(1).getStartTime()).isEqualTo(Instant.parse(DATE2024_01_02_T00_00_00)); assertThat(task1.getSubTasks().get(1).getEndTime()).isEqualTo(Instant.parse(DATE2024_01_02_T23_59_00)); + + service.createTask(task11); + assertThat(task11.getSubTasks()).hasSize(1); + assertThat(task11.getSubTasks().get(0).getStartTime()).isEqualTo(task11.getStartTime()); + assertThat(task11.getSubTasks().get(0).getEndTime()).isEqualTo(task11.getEndTime()); } @Test