From cf95c33b2c920034a34a5c168f9e7992f394e266 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Wed, 11 Jul 2012 10:39:55 +0200 Subject: [PATCH] Bug #1502: Fix NPE in deviation indicator It has been reviewed the behavior of "Estimation deviation on completed tasks" chart in order to fulfill the next requirements: * No hours reported: The task is not taken into account * No allocation: It uses the estimated hours * No estimated hours: The task is not taken into account FEA: ItEr76S04BugFixing --- ...nishedTasksEstimationDeviationVisitor.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/visitors/CalculateFinishedTasksEstimationDeviationVisitor.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/visitors/CalculateFinishedTasksEstimationDeviationVisitor.java index c05685d39..cc4dcddd7 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/visitors/CalculateFinishedTasksEstimationDeviationVisitor.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/visitors/CalculateFinishedTasksEstimationDeviationVisitor.java @@ -28,6 +28,7 @@ package org.libreplan.business.planner.entities.visitors; import java.util.ArrayList; import java.util.List; +import org.libreplan.business.orders.entities.SumChargedEffort; import org.libreplan.business.planner.entities.Task; import org.libreplan.business.planner.entities.TaskElement; import org.libreplan.business.planner.entities.TaskGroup; @@ -52,15 +53,20 @@ public class CalculateFinishedTasksEstimationDeviationVisitor extends TaskElemen public void visit(Task task) { if (task.isFinished()) { - int allocatedHours = task.getAssignedHours(); - if (allocatedHours > 0) { - EffortDuration spentEffort = task.getOrderElement() - .getSumChargedEffort().getTotalChargedEffort(); - deviations.add(new Double( - ((1.0*spentEffort.getHours() - - allocatedHours)/allocatedHours)*100)); - } else { - deviations.add(new Double(0.0)); + int hours = task.getAssignedHours(); + if (hours == 0) { + hours = task.getOrderElement().getWorkHours(); + } + if (hours != 0) { + SumChargedEffort sumChargedEffort = task.getOrderElement() + .getSumChargedEffort(); + EffortDuration spentEffort = sumChargedEffort == null ? EffortDuration + .zero() : sumChargedEffort.getTotalChargedEffort(); + if (!spentEffort.isZero()) { + deviations + .add(new Double( + ((1.0 * spentEffort.getHours() - hours) / hours) * 100)); + } } }