From 3d1a5c1aa8f97d037bbe69dc225cda1b1fcebc3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacobo=20Aragunde=20P=C3=A9rez?= Date: Wed, 21 Dec 2011 12:40:00 +0100 Subject: [PATCH] Replace attribute TaskElement.sumOfHoursAllocated with an equivalent attribute measured in EffortDuration. FEA: ItEr75S04BugFixing --- .../business/planner/daos/TaskElementDAO.java | 47 +++++++++++-------- .../planner/entities/TaskElement.java | 22 ++++----- .../src/main/resources/db.changelog-1.2.xml | 15 ++++++ .../business/planner/entities/Tasks.hbm.xml | 3 +- .../test/planner/daos/TaskElementDAOTest.java | 4 +- .../web/planner/TaskElementAdapter.java | 34 +++++++------- 6 files changed, 71 insertions(+), 54 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/TaskElementDAO.java b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/TaskElementDAO.java index cb50f54c2..e504e212b 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/TaskElementDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/TaskElementDAO.java @@ -32,6 +32,7 @@ import org.libreplan.business.common.daos.GenericDAOHibernate; import org.libreplan.business.planner.entities.ResourceAllocation; import org.libreplan.business.planner.entities.TaskElement; import org.libreplan.business.planner.entities.TaskGroup; +import org.libreplan.business.workingday.EffortDuration; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Repository; @@ -69,45 +70,51 @@ public class TaskElementDAO extends GenericDAOHibernate } private void updateSumOfAllocatedHours(TaskElement taskElement) { - Integer allocatedHours = 0; - Integer oldAllocatedHours = taskElement.getSumOfHoursAllocated(); + EffortDuration assignedEffort = EffortDuration.hours(0); + EffortDuration oldAssignedEffort = taskElement.getSumOfAssignedEffort(); for(ResourceAllocation allocation : taskElement.getAllResourceAllocations()) { - allocatedHours += allocation.getAssignedHours(); + assignedEffort = assignedEffort.plus(allocation.getAssignedEffort()); } - if(allocatedHours != oldAllocatedHours) { - taskElement.setSumOfHoursAllocated(allocatedHours); + if(assignedEffort.compareTo(oldAssignedEffort) != 0) { + taskElement.setSumOfAssignedEffort(assignedEffort); updateSumOfAllocatedHoursToParent(taskElement.getParent(), - allocatedHours - oldAllocatedHours); - updateSumOfAllocatedHoursToChildren(taskElement, - allocatedHours - oldAllocatedHours); + oldAssignedEffort, assignedEffort); + updateSumOfAllocatedHoursToChildren(taskElement); } } - private void updateSumOfAllocatedHoursToChildren( - TaskElement parent, Integer differenceOfHours) { + private void updateSumOfAllocatedHoursToChildren(TaskElement parent) { if(parent instanceof TaskGroup) { for(TaskElement child : parent.getChildren()) { - Integer allocatedHours = 0; - Integer oldAllocatedHours = child.getSumOfHoursAllocated(); + EffortDuration assignedEffort = EffortDuration.hours(0); + EffortDuration oldAssignedEffort = child.getSumOfAssignedEffort(); for(ResourceAllocation allocation : child.getAllResourceAllocations()) { - allocatedHours += allocation.getAssignedHours(); + assignedEffort = assignedEffort.plus(allocation.getAssignedEffort()); } - if(allocatedHours != oldAllocatedHours) { - child.setSumOfHoursAllocated(allocatedHours); - updateSumOfAllocatedHoursToChildren(child, - allocatedHours - oldAllocatedHours); + if(assignedEffort.compareTo(oldAssignedEffort) != 0) { + child.setSumOfAssignedEffort(assignedEffort); + updateSumOfAllocatedHoursToChildren(child); } } } } - private void updateSumOfAllocatedHoursToParent(TaskGroup taskGroup, Integer differenceOfHours) { + private void updateSumOfAllocatedHoursToParent(TaskGroup taskGroup, + EffortDuration oldAssignedEffort, EffortDuration newAssignedEffort) { if (taskGroup != null) { if (!Hibernate.isInitialized(taskGroup)) { reattach(taskGroup); } - taskGroup.addSumOfHoursAllocated(differenceOfHours); - updateSumOfAllocatedHoursToParent(taskGroup.getParent(), differenceOfHours); + if(newAssignedEffort.compareTo(oldAssignedEffort) < 0) { + taskGroup.setSumOfAssignedEffort(taskGroup.getSumOfAssignedEffort().minus( + oldAssignedEffort.minus(newAssignedEffort))); + } + else { + taskGroup.setSumOfAssignedEffort(taskGroup.getSumOfAssignedEffort().plus( + newAssignedEffort.minus(oldAssignedEffort))); + } + updateSumOfAllocatedHoursToParent(taskGroup.getParent(), + oldAssignedEffort, newAssignedEffort); } } 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 9b6453483..3fd600ced 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 @@ -603,7 +603,7 @@ public abstract class TaskElement extends BaseEntity { //simplified calculation has only two states: //unassigned, when hours allocated is zero, and //assigned otherwise - if (getSumOfHoursAllocated() == 0) { + if (getSumOfAssignedEffort().isZero()) { return "unassigned"; } return "assigned"; @@ -658,24 +658,20 @@ public abstract class TaskElement extends BaseEntity { this.advancePercentage = advancePercentage; } - private Integer sumOfHoursAllocated = 0; + private EffortDuration sumOfAssignedEffort = EffortDuration.hours(0); - public void setSumOfHoursAllocated(Integer sumOfHoursAllocated) { - this.sumOfHoursAllocated = sumOfHoursAllocated; + public void setSumOfAssignedEffort(EffortDuration sumOfAssignedEffort) { + this.sumOfAssignedEffort = sumOfAssignedEffort; } - public void addSumOfHoursAllocated(Integer sumOfHoursAllocated) { - this.sumOfHoursAllocated += sumOfHoursAllocated; + public EffortDuration getSumOfAssignedEffort() { + return sumOfAssignedEffort; } - public Integer getSumOfHoursAllocated() { - return sumOfHoursAllocated; - } - - public Integer getSumOfHoursAllocatedCalculated() { - int result = 0; + public EffortDuration getSumOfAssignedEffortCalculated() { + EffortDuration result = EffortDuration.hours(0); for(ResourceAllocation allocation : getAllResourceAllocations()) { - result += allocation.getAssignedHours(); + result = result.plus(allocation.getAssignedEffort()); } return result; } diff --git a/libreplan-business/src/main/resources/db.changelog-1.2.xml b/libreplan-business/src/main/resources/db.changelog-1.2.xml index ea0de61fb..af260567f 100644 --- a/libreplan-business/src/main/resources/db.changelog-1.2.xml +++ b/libreplan-business/src/main/resources/db.changelog-1.2.xml @@ -17,4 +17,19 @@ defaultValueNumeric="0" /> + + Changing sum_of_hours_allocated to sum_of_assigned_effort + + + + Updating effort values (hours to seconds) in task_element table + + UPDATE task_element + SET sum_of_assigned_effort = sum_of_assigned_effort*3600 + + + diff --git a/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/Tasks.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/Tasks.hbm.xml index 34d83d7cd..8c4912e11 100644 --- a/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/Tasks.hbm.xml +++ b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/Tasks.hbm.xml @@ -27,7 +27,8 @@ - +