From 4fa9ad309fa8ec95373da3500b24f36957d3f528 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Fri, 16 Oct 2009 13:03:24 +0200 Subject: [PATCH] ItEr30S11CUVistaRecursosTempoEmpresaItEr29S13: Fixing problem when there are gaps in the planning. --- .../web/planner/CompanyPlanningModel.java | 47 ++++++++++++++++- .../web/planner/OrderPlanningModel.java | 51 +++++++++++++++++-- 2 files changed, 92 insertions(+), 6 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/CompanyPlanningModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/CompanyPlanningModel.java index b5ea79305..e22ec43fd 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/CompanyPlanningModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/CompanyPlanningModel.java @@ -82,6 +82,12 @@ import org.zkoss.zul.Div; @Scope(BeanDefinition.SCOPE_SINGLETON) public abstract class CompanyPlanningModel implements ICompanyPlanningModel { + /** + * Number of days to Thursday since the beginning of the week. In order to + * calculate the middle of a week. + */ + private final static int DAYS_TO_THURSDAY = 3; + @Autowired private IOrderDAO orderDAO; @@ -352,8 +358,13 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel { fillZeroValueFromStart(writer, start, mapDayAssignments); - for (LocalDate day : mapDayAssignments.keySet()) { - Integer hours = mapDayAssignments.get(day); + LocalDate firstDay = firstDay(mapDayAssignments); + LocalDate lastDay = lastDay(mapDayAssignments); + + for (LocalDate day = firstDay; day.compareTo(lastDay) <= 0; day = nextDay(day)) { + Integer hours = mapDayAssignments.get(day) != null ? mapDayAssignments + .get(day) + : 0; printLine(writer, day, hours); } @@ -365,6 +376,34 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel { return uri; } + private LocalDate firstDay(SortedMap mapDayAssignments) { + LocalDate date = mapDayAssignments.firstKey(); + if (zoomByDay()) { + return date; + } else { + return date.dayOfWeek().withMinimumValue().plusDays( + DAYS_TO_THURSDAY); + } + } + + private LocalDate lastDay(SortedMap mapDayAssignments) { + LocalDate date = mapDayAssignments.lastKey(); + if (zoomByDay()) { + return date; + } else { + return date.dayOfWeek().withMinimumValue().plusDays( + DAYS_TO_THURSDAY); + } + } + + private LocalDate nextDay(LocalDate date) { + if (zoomByDay()) { + return date; + } else { + return date.plusWeeks(1); + } + } + /** * Calculate the hours by day for all the {@link DayAssignment} in the list. * @@ -476,4 +515,8 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel { return div; } + private boolean zoomByDay() { + return zoomLevel.equals(ZoomLevel.DETAIL_FIVE); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java index b0f15ed01..45e37e556 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java @@ -84,6 +84,12 @@ import org.zkoss.zul.Div; @Scope(BeanDefinition.SCOPE_SINGLETON) public abstract class OrderPlanningModel implements IOrderPlanningModel { + /** + * Number of days to Thursday since the beginning of the week. In order to + * calculate the middle of a week. + */ + private final static int DAYS_TO_THURSDAY = 3; + @Autowired private IOrderDAO orderDAO; @@ -470,8 +476,13 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { fillZeroValueFromStart(writer, start, mapDayAssignments); - for (LocalDate day : mapDayAssignments.keySet()) { - Integer hours = mapDayAssignments.get(day); + LocalDate firstDay = firstDay(mapDayAssignments); + LocalDate lastDay = lastDay(mapDayAssignments); + + for (LocalDate day = firstDay; day.compareTo(lastDay) <= 0; day = nextDay(day)) { + Integer hours = mapDayAssignments.get(day) != null ? mapDayAssignments + .get(day) + : 0; printLine(writer, day, hours); } @@ -483,6 +494,34 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { return uri; } + private LocalDate firstDay(SortedMap mapDayAssignments) { + LocalDate date = mapDayAssignments.firstKey(); + if (zoomByDay()) { + return date; + } else { + return date.dayOfWeek().withMinimumValue().plusDays( + DAYS_TO_THURSDAY); + } + } + + private LocalDate lastDay(SortedMap mapDayAssignments) { + LocalDate date = mapDayAssignments.lastKey(); + if (zoomByDay()) { + return date; + } else { + return date.dayOfWeek().withMinimumValue().plusDays( + DAYS_TO_THURSDAY); + } + } + + private LocalDate nextDay(LocalDate date) { + if (zoomByDay()) { + return date; + } else { + return date.plusWeeks(1); + } + } + private SortedMap calculateHoursAdditionByDay( List dayAssignments) { return calculateHoursAdditionByDay(dayAssignments, false, null, null); @@ -584,7 +623,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { } } - if (zoomLevel.equals(ZoomLevel.DETAIL_FIVE)) { + if (zoomByDay()) { return map; } else { return groupByWeek(map); @@ -613,7 +652,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { } private LocalDate getKey(LocalDate date) { - return date.dayOfWeek().withMinimumValue().plusDays(3); + return date.dayOfWeek().withMinimumValue().plusDays(DAYS_TO_THURSDAY); } private void setMaximunValueForChartIfGreater(Integer max) { @@ -631,4 +670,8 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { return div; } + private boolean zoomByDay() { + return zoomLevel.equals(ZoomLevel.DETAIL_FIVE); + } + }