diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskElement.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskElement.java index 249c8b6c0..d7b1d444e 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskElement.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskElement.java @@ -243,7 +243,8 @@ public abstract class TaskElement extends BaseEntity { } public String getProjectCode() { - return getOrderElement().getOrder().getCode(); + //then get the top level project code + return getTopMost().getOrderElement().getOrder().getCode(); } public void setName(String name) { diff --git a/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/TaskElementDAOTest.java b/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/TaskElementDAOTest.java index d4b5a3af7..ccb873460 100644 --- a/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/TaskElementDAOTest.java +++ b/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/TaskElementDAOTest.java @@ -303,6 +303,42 @@ public class TaskElementDAOTest { assertThat(child.getParent(), equalTo(reloaded)); } + @Test + @Transactional + public void theTopMostPropertyIsTheToplevelTask() { + TaskGroup taskGroup = createValidTaskGroup(); + TaskElement taskElement = createValidTask(); + taskGroup.addTaskElement(taskElement); + taskElementDAO.save(taskGroup); + + TaskGroup taskGroup2 = createValidTaskGroup(); + TaskElement taskElement2 = createValidTask(); + taskGroup2.addTaskElement(taskElement2); + taskElementDAO.save(taskGroup2); + + taskGroup.addTaskElement(taskGroup2); + taskElementDAO.save(taskGroup); + + flushAndEvict(taskGroup); + flushAndEvict(taskGroup2); + + TaskElement reloaded; + try { + reloaded = taskElementDAO.find(taskGroup.getId()); + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + + List children = reloaded.getChildren(); + + for (TaskElement child : children) { + if (child instanceof TaskGroup) { + TaskElement child2 = child.getChildren().get(0); + assertThat(child2.getTopMost(), equalTo(reloaded)); + } + } + } + @Test @Transactional public void savingGroupSavesAssociatedTaskElements() { diff --git a/libreplan-webapp/src/main/java/org/libreplan/importers/notifications/realization/SendEmailOnMilestoneReached.java b/libreplan-webapp/src/main/java/org/libreplan/importers/notifications/realization/SendEmailOnMilestoneReached.java index 54d024033..ba090f3a8 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/importers/notifications/realization/SendEmailOnMilestoneReached.java +++ b/libreplan-webapp/src/main/java/org/libreplan/importers/notifications/realization/SendEmailOnMilestoneReached.java @@ -113,8 +113,8 @@ public class SendEmailOnMilestoneReached implements IEmailNotificationJob { private void sendEmailNotificationToManager(TaskElement item) { String responsible = ""; - if ( item.getParent().getOrderElement().getOrder().getResponsible() != null ) { - responsible = item.getParent().getOrderElement().getOrder().getResponsible(); + if ( item.getTopMost().getOrderElement().getOrder().getResponsible() != null ) { + responsible = item.getTopMost().getOrderElement().getOrder().getResponsible(); } User user = null; @@ -130,7 +130,7 @@ public class SendEmailOnMilestoneReached implements IEmailNotificationJob { emailNotificationModel.setUpdated(new Date()); emailNotificationModel.setResource(user.getWorker()); emailNotificationModel.setTask(item); - emailNotificationModel.setProject(item.getParent()); + emailNotificationModel.setProject(item.getTopMost()); emailNotificationModel.confirmSave(); } } catch (InstanceNotFoundException e) { diff --git a/libreplan-webapp/src/main/java/org/libreplan/importers/notifications/realization/SendEmailOnTaskShouldFinish.java b/libreplan-webapp/src/main/java/org/libreplan/importers/notifications/realization/SendEmailOnTaskShouldFinish.java index 7248490db..f06fee3a0 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/importers/notifications/realization/SendEmailOnTaskShouldFinish.java +++ b/libreplan-webapp/src/main/java/org/libreplan/importers/notifications/realization/SendEmailOnTaskShouldFinish.java @@ -145,7 +145,7 @@ public class SendEmailOnTaskShouldFinish implements IEmailNotificationJob { emailNotificationModel.setUpdated(new Date()); emailNotificationModel.setResource(resourceItem); emailNotificationModel.setTask(item); - emailNotificationModel.setProject(item.getParent()); + emailNotificationModel.setProject(item.getTopMost()); emailNotificationModel.confirmSave(); } } diff --git a/libreplan-webapp/src/main/java/org/libreplan/importers/notifications/realization/SendEmailOnTaskShouldStart.java b/libreplan-webapp/src/main/java/org/libreplan/importers/notifications/realization/SendEmailOnTaskShouldStart.java index 6eedb01fd..09ee3e2a7 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/importers/notifications/realization/SendEmailOnTaskShouldStart.java +++ b/libreplan-webapp/src/main/java/org/libreplan/importers/notifications/realization/SendEmailOnTaskShouldStart.java @@ -147,7 +147,7 @@ public class SendEmailOnTaskShouldStart implements IEmailNotificationJob { emailNotificationModel.setUpdated(new Date()); emailNotificationModel.setResource(resourceItem); emailNotificationModel.setTask(item); - emailNotificationModel.setProject(item.getParent()); + emailNotificationModel.setProject(item.getTopMost()); emailNotificationModel.confirmSave(); } } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/taskedition/TaskPropertiesController.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/taskedition/TaskPropertiesController.java index 0554c4248..e67edf56e 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/taskedition/TaskPropertiesController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/taskedition/TaskPropertiesController.java @@ -800,7 +800,7 @@ public class TaskPropertiesController extends GenericForwardComposer emailNotificationModel.setTask(currentTaskElement.getTaskSource().getTask()); - emailNotificationModel.setProject(currentTaskElement.getParent().getTaskSource().getTask()); + emailNotificationModel.setProject(currentTaskElement.getTopMost().getTaskSource().getTask()); emailNotificationModel.confirmSave(); } catch (DataIntegrityViolationException e) {