From f031dd5a7f25487194e01cfd9a5817c37ff495d2 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Fri, 22 Jul 2011 13:18:10 +0200 Subject: [PATCH] [Bug #1115] Fix bug and add new ProgressType for spread progress Calculation done for progress of all tasks it was really showing the spread progress. Then a new ProgressType is created and calculation is fixed. FEA: ItEr75S04BugFixing --- .../common/entities/ProgressType.java | 5 +- .../planner/entities/PlanningData.java | 8 +++ .../planner/entities/TaskElement.java | 8 ++- .../business/planner/entities/TaskGroup.java | 15 ++++-- .../src/main/resources/db.changelog-1.1.xml | 7 +++ .../business/planner/entities/Tasks.hbm.xml | 1 + .../web/planner/order/OrderPlanningModel.java | 50 ++++++++++++++----- .../planner/_contentOverallProgress.zul | 18 +++++-- 8 files changed, 89 insertions(+), 23 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/ProgressType.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/ProgressType.java index 4c1cb3359..d4049f524 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/ProgressType.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/ProgressType.java @@ -21,7 +21,7 @@ package org.navalplanner.business.common.entities; -import static org.navalplanner.business.i18n.I18nHelper.*; +import static org.navalplanner.business.i18n.I18nHelper._; import java.util.Arrays; import java.util.List; @@ -33,7 +33,8 @@ import java.util.List; */ public enum ProgressType { - SPREAD_PROGRESS(_("Progress with all tasks by hours")), + SPREAD_PROGRESS(_("Spreading progress")), + ALL_NUMHOURS(_("Progress with all tasks by hours")), CRITICAL_PATH_DURATION(_("Progress with critical path tasks by hours")), CRITICAL_PATH_NUMHOURS(_("Progress with critical path tasks by duration")); diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/PlanningData.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/PlanningData.java index 020110f95..7badcc9f2 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/PlanningData.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/PlanningData.java @@ -47,6 +47,8 @@ public class PlanningData extends BaseEntity { private TaskGroup rootTask; + private BigDecimal progressAllByNumHours; + private BigDecimal progressByDuration; private BigDecimal progressByNumHours; @@ -55,6 +57,10 @@ public class PlanningData extends BaseEntity { } + public BigDecimal getProgressAllByNumHours() { + return progressAllByNumHours; + } + public BigDecimal getProgressByDuration() { return progressByDuration; } @@ -72,6 +78,8 @@ public class PlanningData extends BaseEntity { LOG.warn("it can't be updated because the critical path provided is empty"); return; } + progressAllByNumHours = rootTask.getOrderElement() + .getAdvancePercentageChildren(); progressByDuration = calculateByDuration(criticalPath); progressByNumHours = calculateByNumHours(criticalPath); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java index f006bc384..b55169186 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java @@ -625,6 +625,12 @@ public abstract class TaskElement extends BaseEntity { : advancePercentage; } + /** + * For common tasks it just return the spread progress. + * + * It's overridden in {@link TaskGroup} to return different progresses + * depending on parameter + */ public BigDecimal getAdvancePercentage(ProgressType progressType) { if (progressType.equals(ProgressType.SPREAD_PROGRESS)) { return advancePercentage; @@ -676,4 +682,4 @@ public abstract class TaskElement extends BaseEntity { return getName(); } -} \ No newline at end of file +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskGroup.java index 89141dcad..23e7b5c82 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskGroup.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskGroup.java @@ -74,6 +74,13 @@ public class TaskGroup extends TaskElement { return planningData.getProgressByNumHours(); } + public BigDecimal getProgressAllByNumHours() { + if (planningData == null) { + return BigDecimal.ZERO; + } + return planningData.getProgressAllByNumHours(); + } + @SuppressWarnings("unused") @AssertTrue(message = "order element associated to a task group must be not null") private boolean theOrderElementMustBeNotNull() { @@ -270,10 +277,12 @@ public class TaskGroup extends TaskElement { */ public BigDecimal getAdvancePercentage(ProgressType progressType) { if (isTaskRoot(this)) { - if (progressType.equals(ProgressType.CRITICAL_PATH_DURATION)) { + switch (progressType) { + case ALL_NUMHOURS: + return getProgressAllByNumHours(); + case CRITICAL_PATH_DURATION: return getCriticalPathProgressByDuration(); - } - if (progressType.equals(ProgressType.CRITICAL_PATH_NUMHOURS)) { + case CRITICAL_PATH_NUMHOURS: return getCriticalPathProgressByNumHours(); } } diff --git a/navalplanner-business/src/main/resources/db.changelog-1.1.xml b/navalplanner-business/src/main/resources/db.changelog-1.1.xml index 28660171e..6ee75e41c 100644 --- a/navalplanner-business/src/main/resources/db.changelog-1.1.xml +++ b/navalplanner-business/src/main/resources/db.changelog-1.1.xml @@ -216,4 +216,11 @@ + + Add column progress_all_by_num_hours in planning_data + + + + + diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/Tasks.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/Tasks.hbm.xml index e522ed3fd..95922cc77 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/Tasks.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/Tasks.hbm.xml @@ -143,6 +143,7 @@ + diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java index 7d39ac78d..aa6f507b5 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java @@ -1459,14 +1459,19 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { private Label lbCriticalPathByNumHours; - private Progressmeter progressAdvancePercentage; + private Progressmeter progressSpread; - private Label lbAdvancePercentage; + private Label lbProgressSpread; + + private Progressmeter progressAllByNumHours; + + private Label lbProgressAllByNumHours; public OverAllProgressContent(Tabpanel tabpanel) { initializeProgressCriticalPathByDuration(tabpanel); initializeProgressCriticalPathByNumHours(tabpanel); - initializeProgressAdvancePercentage(tabpanel); + initializeProgressSpread(tabpanel); + initializeProgressAllByNumHours(tabpanel); tabpanel.setVariable("overall_progress_content", this, true); } @@ -1489,22 +1494,31 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { .setValue(_(ProgressType.CRITICAL_PATH_DURATION.toString())); } - public void initializeProgressAdvancePercentage(Tabpanel tabpanel) { - progressAdvancePercentage = (Progressmeter) tabpanel - .getFellow("progressAdvancePercentage"); - lbAdvancePercentage = (Label) tabpanel - .getFellow("lbAdvancePercentage"); - ((Label) tabpanel.getFellow("textAdvancePercentage")) + public void initializeProgressSpread(Tabpanel tabpanel) { + progressSpread = (Progressmeter) tabpanel + .getFellow("progressSpread"); + lbProgressSpread = (Label) tabpanel.getFellow("lbProgressSpread"); + ((Label) tabpanel.getFellow("textProgressSpread")) .setValue(_(ProgressType.SPREAD_PROGRESS.toString())); } + public void initializeProgressAllByNumHours(Tabpanel tabpanel) { + progressAllByNumHours = (Progressmeter) tabpanel + .getFellow("progressAllByNumHours"); + lbProgressAllByNumHours = (Label) tabpanel + .getFellow("lbProgressAllByNumHours"); + ((Label) tabpanel.getFellow("textProgressAllByNumHours")) + .setValue(_(ProgressType.ALL_NUMHOURS.toString())); + } + public void refresh() { if (planningState.isEmpty()) { return; } TaskGroup rootTask = planningState.getRootTask(); - setAdvancePercentage(rootTask.getAdvancePercentage()); + setProgressSpread(rootTask.getAdvancePercentage()); + setProgressAllByNumHours(rootTask.getProgressAllByNumHours()); setCriticalPathByDuration(rootTask .getCriticalPathProgressByDuration()); setCriticalPathByNumHours(rootTask @@ -1528,14 +1542,24 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { } } - private void setAdvancePercentage(BigDecimal value) { + private void setProgressSpread(BigDecimal value) { if (value == null) { value = BigDecimal.ZERO; } value = value.multiply(BigDecimal.valueOf(100)); value = value.setScale(2, BigDecimal.ROUND_HALF_EVEN); - lbAdvancePercentage.setValue(value.toString() + " %"); - progressAdvancePercentage.setValue(value.intValue()); + lbProgressSpread.setValue(value.toString() + " %"); + progressSpread.setValue(value.intValue()); + } + + private void setProgressAllByNumHours(BigDecimal value) { + if (value == null) { + value = BigDecimal.ZERO; + } + value = value.multiply(BigDecimal.valueOf(100)); + value = value.setScale(2, BigDecimal.ROUND_HALF_EVEN); + lbProgressAllByNumHours.setValue(value.toString() + " %"); + progressAllByNumHours.setValue(value.intValue()); } public void setCriticalPathByDuration(BigDecimal value) { diff --git a/navalplanner-webapp/src/main/webapp/planner/_contentOverallProgress.zul b/navalplanner-webapp/src/main/webapp/planner/_contentOverallProgress.zul index 7a6fdf877..6c0190404 100644 --- a/navalplanner-webapp/src/main/webapp/planner/_contentOverallProgress.zul +++ b/navalplanner-webapp/src/main/webapp/planner/_contentOverallProgress.zul @@ -27,12 +27,22 @@ - -