From 867076e8fdbf67bdac1b3653c56f309afba33a58 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Mon, 27 Jun 2011 14:23:58 +0200 Subject: [PATCH] [Bug #1088] fix the representation of the chart of earned value month and upper zoom levels. There is two ways for represent the chart (by day and by week). By week, the hours is the average of the hours of whole week. FEA: ItEr75S04BugFixing --- .../web/planner/chart/ChartFiller.java | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/chart/ChartFiller.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/chart/ChartFiller.java index bf5f030c8..1f1192573 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/chart/ChartFiller.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/chart/ChartFiller.java @@ -33,10 +33,10 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; +import java.util.Map.Entry; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -302,12 +302,49 @@ public abstract class ChartFiller implements IChartFiller { @Override protected void fillInnerValues(PrintWriter writer, LocalDate firstDay, LocalDate lastDay) { + if (isZoomByDayOrWeek()) { + fillInnerValuesByDay(writer, firstDay, lastDay); + } else { + fillInnerValuesByWeek(writer, firstDay, lastDay); + } + } + + protected void fillInnerValuesByDay(PrintWriter writer, + LocalDate firstDay, LocalDate lastDay) { for (LocalDate day : getDays()) { BigDecimal hours = getHoursForDay(day); printIntervalLine(writer, day, hours, isZoomByDayOrWeek()); } } + protected void fillInnerValuesByWeek(PrintWriter writer, + LocalDate firstDay, LocalDate lastDay) { + for (LocalDate day = firstDay; day.compareTo(lastDay) <= 0; day = getFinishWeek(day)) { + BigDecimal hours = getHoursForWeek(day, getFinishWeek(day)); + printIntervalLine(writer, day, hours, false); + } + } + + protected BigDecimal getHoursForWeek(LocalDate firstDay, + LocalDate lastDay) { + BigDecimal averageHours = BigDecimal.ZERO; + int numDays = 0; + for (LocalDate day = firstDay; day.compareTo(lastDay) < 0; day = nextDay(day)) { + BigDecimal hours = getHoursForDay(day); + averageHours = averageHours.add(hours); + numDays++; + } + BigDecimal result = (numDays > 0) ? averageHours + .divide(new BigDecimal(numDays)) + : BigDecimal.ZERO; + return result; + } + + protected LocalDate getFinishWeek(LocalDate day) { + return day.plusDays(8 - day.getDayOfWeek()) + .toDateTimeAtStartOfDay().toLocalDate(); + } + } /**