From e4e1479d5f4d7ba8ac9805caad71b0099c63c6a4 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Fri, 13 Jul 2012 12:49:42 +0200 Subject: [PATCH] Do not take into account work report lines with effort zero for task completion chart FEA: ItEr76S04BugFixing --- ...teFinishedTasksLagInCompletionVisitor.java | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/visitors/CalculateFinishedTasksLagInCompletionVisitor.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/visitors/CalculateFinishedTasksLagInCompletionVisitor.java index 3b1ca8dc3..a5abeaa9f 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/visitors/CalculateFinishedTasksLagInCompletionVisitor.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/visitors/CalculateFinishedTasksLagInCompletionVisitor.java @@ -25,6 +25,7 @@ package org.libreplan.business.planner.entities.visitors; * @author Nacho Barrientos */ import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.joda.time.Days; @@ -52,15 +53,29 @@ public class CalculateFinishedTasksLagInCompletionVisitor extends TaskElementVis List workReportLines = task. getOrderElement().getWorkReportLines(true); if (workReportLines.size() > 0) { - LocalDate lastRLDate = LocalDate.fromDateFields( - workReportLines.get(workReportLines.size()-1).getDate()); - LocalDate endDate = task.getEndAsLocalDate(); - deviations.add((double)Days. - daysBetween(endDate, lastRLDate).getDays()); + WorkReportLine last = getLastWorkReportLineWithEffortDurationNoZero(workReportLines); + if (last != null) { + LocalDate lastRLDate = LocalDate.fromDateFields(last + .getDate()); + LocalDate endDate = task.getEndAsLocalDate(); + deviations.add((double) Days.daysBetween(endDate, + lastRLDate).getDays()); + } } } } + private WorkReportLine getLastWorkReportLineWithEffortDurationNoZero( + List workReportLines) { + Collections.reverse(workReportLines); + for (WorkReportLine each : workReportLines) { + if (!each.getEffort().isZero()) { + return each; + } + } + return null; + } + public void visit(TaskGroup taskGroup) { for (TaskElement each: taskGroup.getChildren()) { each.acceptVisitor(this);