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 bac08d6ad..e7e984bb8 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 @@ -65,9 +65,9 @@ import org.zkoss.zk.ui.Executions; public abstract class ChartFiller implements IChartFiller { protected abstract class HoursByDayCalculator { - public SortedMap calculate( + public SortedMap calculate( Collection elements) { - SortedMap result = new TreeMap(); + SortedMap result = new TreeMap(); if (elements.isEmpty()) { return result; } @@ -76,9 +76,9 @@ public abstract class ChartFiller implements IChartFiller { int hours = getHoursFor(element); LocalDate day = getDayFor(element); if (!result.containsKey(day)) { - result.put(day, 0); + result.put(day, BigDecimal.ZERO); } - result.put(day, result.get(day) + hours); + result.put(day, result.get(day).add(new BigDecimal(hours))); } } return convertAsNeededByZoom(result); @@ -352,28 +352,30 @@ public abstract class ChartFiller implements IChartFiller { return maximumValueForChart; } - protected SortedMap groupByWeek( - SortedMap map) { - SortedMap result = new TreeMap(); - for (Entry entry : map.entrySet()) { + protected SortedMap groupByWeek( + SortedMap map) { + SortedMap result = new TreeMap(); + for (Entry entry : map.entrySet()) { LocalDate day = entry.getKey(); LocalDate key = getThursdayOfThisWeek(day); - Integer hours = entry.getValue() == null ? 0 : entry.getValue(); + BigDecimal hours = entry.getValue() == null ? BigDecimal.ZERO + : entry.getValue(); if (result.get(key) == null) { result.put(key, hours); } else { - result.put(key, result.get(key) + hours); + result.put(key, result.get(key).add(hours)); } } - for (Entry entry : result.entrySet()) { + for (Entry entry : result.entrySet()) { LocalDate day = entry.getKey(); - result.put(entry.getKey(), result.get(day) / 7); + result.put(entry.getKey(), result.get(day).setScale(2).divide( + new BigDecimal(7), RoundingMode.DOWN)); } return result; } - protected SortedMap convertAsNeededByZoom( - SortedMap map) { + protected SortedMap convertAsNeededByZoom( + SortedMap map) { if (isZoomByDay()) { return map; } else { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/company/CompanyPlanningModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/company/CompanyPlanningModel.java index f9802d9a4..9d1d1cae3 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/company/CompanyPlanningModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/company/CompanyPlanningModel.java @@ -587,9 +587,9 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel { .list(DayAssignment.class); SortedMap> dayAssignmentGrouped = groupDayAssignmentsByDayAndResource(dayAssignments); - SortedMap mapDayAssignments = calculateHoursAdditionByDayWithoutOverload(dayAssignmentGrouped); + SortedMap mapDayAssignments = calculateHoursAdditionByDayWithoutOverload(dayAssignmentGrouped); - return convertToBigDecimal(mapDayAssignments); + return mapDayAssignments; } private SortedMap getOverload(Date start, @@ -598,23 +598,23 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel { .list(DayAssignment.class); SortedMap> dayAssignmentGrouped = groupDayAssignmentsByDayAndResource(dayAssignments); - SortedMap mapDayAssignments = calculateHoursAdditionByDayJustOverload(dayAssignmentGrouped); - SortedMap mapMaxAvailability = calculateHoursAdditionByDay( + SortedMap mapDayAssignments = calculateHoursAdditionByDayJustOverload(dayAssignmentGrouped); + SortedMap mapMaxAvailability = calculateHoursAdditionByDay( resourceDAO.list(Resource.class), start, finish); for (LocalDate day : mapDayAssignments.keySet()) { if ((day.compareTo(new LocalDate(start)) >= 0) && (day.compareTo(new LocalDate(finish)) <= 0)) { - Integer overloadHours = mapDayAssignments.get(day); - Integer maxHours = mapMaxAvailability.get(day); - mapDayAssignments.put(day, overloadHours + maxHours); + BigDecimal overloadHours = mapDayAssignments.get(day); + BigDecimal maxHours = mapMaxAvailability.get(day); + mapDayAssignments.put(day, overloadHours.add(maxHours)); } } - return convertToBigDecimal(mapDayAssignments); + return mapDayAssignments; } - private SortedMap calculateHoursAdditionByDayWithoutOverload( + private SortedMap calculateHoursAdditionByDayWithoutOverload( SortedMap> dayAssignmentGrouped) { SortedMap map = new TreeMap(); @@ -643,10 +643,10 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel { map.put(day, result); } - return convertAsNeededByZoom(map); + return convertAsNeededByZoom(convertToBigDecimal(map)); } - private SortedMap calculateHoursAdditionByDayJustOverload( + private SortedMap calculateHoursAdditionByDayJustOverload( SortedMap> dayAssignmentGrouped) { SortedMap map = new TreeMap(); @@ -673,18 +673,18 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel { map.put(day, result); } - return convertAsNeededByZoom(map); + return convertAsNeededByZoom(convertToBigDecimal(map)); } private SortedMap getCalendarMaximumAvailability( Date start, Date finish) { - SortedMap mapDayAssignments = calculateHoursAdditionByDay( + SortedMap mapDayAssignments = calculateHoursAdditionByDay( resourceDAO.list(Resource.class), start, finish); - return convertToBigDecimal(mapDayAssignments); + return mapDayAssignments; } - private SortedMap calculateHoursAdditionByDay( + private SortedMap calculateHoursAdditionByDay( List resources, Date start, Date finish) { return new HoursByDayCalculator>>() { 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 259e2f890..ab9db282d 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 @@ -679,11 +679,11 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { private final Order order; - private SortedMap mapOrderLoad = new TreeMap(); - private SortedMap mapOrderOverload = new TreeMap(); - private SortedMap mapMaxCapacity = new TreeMap(); - private SortedMap mapOtherLoad = new TreeMap(); - private SortedMap mapOtherOverload = new TreeMap(); + private SortedMap mapOrderLoad = new TreeMap(); + private SortedMap mapOrderOverload = new TreeMap(); + private SortedMap mapMaxCapacity = new TreeMap(); + private SortedMap mapOtherLoad = new TreeMap(); + private SortedMap mapOtherOverload = new TreeMap(); public OrderLoadChartFiller(Order orderReloaded) { this.order = orderReloaded; @@ -712,15 +712,17 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { convertAsNeededByZoomMaps(); Plotinfo plotOrderLoad = createPlotinfo( - convertToBigDecimal(mapOrderLoad), interval); + mapOrderLoad, interval); Plotinfo plotOrderOverload = createPlotinfo( - convertToBigDecimal(mapOrderOverload), interval); + mapOrderOverload, + interval); Plotinfo plotMaxCapacity = createPlotinfo( - convertToBigDecimal(mapMaxCapacity), interval); + mapMaxCapacity, interval); Plotinfo plotOtherLoad = createPlotinfo( - convertToBigDecimal(mapOtherLoad), interval); + mapOtherLoad, interval); Plotinfo plotOtherOverload = createPlotinfo( - convertToBigDecimal(mapOtherOverload), interval); + mapOtherOverload, + interval); plotOrderLoad.setFillColor(COLOR_ASSIGNED_LOAD_SPECIFIC); plotOrderLoad.setLineWidth(0); @@ -767,8 +769,9 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { SortedMap> resourceDayAssignmentsGrouped) { for (LocalDate day : orderDayAssignmentsGrouped.keySet()) { - int maxCapacity = getMaxCapcity(orderDayAssignmentsGrouped, day); - mapMaxCapacity.put(day, maxCapacity); + Integer maxCapacity = getMaxCapcity(orderDayAssignmentsGrouped, + day); + mapMaxCapacity.put(day, new BigDecimal(maxCapacity)); Integer orderLoad = 0; Integer orderOverload = 0; @@ -809,11 +812,12 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { } } - mapOrderLoad.put(day, orderLoad); - mapOrderOverload.put(day, orderOverload + maxCapacity); - mapOtherLoad.put(day, otherLoad + orderLoad); - mapOtherOverload.put(day, otherOverload + orderOverload - + maxCapacity); + mapOrderLoad.put(day, new BigDecimal(orderLoad)); + mapOrderOverload.put(day, new BigDecimal(orderOverload + + maxCapacity)); + mapOtherLoad.put(day, new BigDecimal(otherLoad + orderLoad)); + mapOtherOverload.put(day, new BigDecimal(otherOverload + + orderOverload + maxCapacity)); } }