From ea805b32539bf9d656a3235700209df0b999e6f9 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Mon, 9 Jul 2012 09:37:49 +0200 Subject: [PATCH] Bug #1483: Fix problem getting the last value calculated FEA: ItEr76S04BugFixing --- .../entities/OrderEarnedValueCalculator.java | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/OrderEarnedValueCalculator.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/OrderEarnedValueCalculator.java index 0bc7cc23a..bda69cd0f 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/OrderEarnedValueCalculator.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/OrderEarnedValueCalculator.java @@ -47,8 +47,7 @@ public class OrderEarnedValueCalculator extends EarnedValueCalculator implements @Override public BigDecimal getActualCostWorkPerformedAt(Order order, LocalDate date) { SortedMap actualCost = calculateActualCostWorkPerformed(order); - BigDecimal result = actualCost.get(date); - return (result != null) ? result : BigDecimal.ZERO; + return getValueAt(actualCost, date); } @Transactional(readOnly = true) @@ -130,8 +129,24 @@ public class OrderEarnedValueCalculator extends EarnedValueCalculator implements @Transactional(readOnly = true) public BigDecimal getBudgetedCostWorkPerformedAt(Order order, LocalDate date) { SortedMap budgetedCost = calculateBudgetedCostWorkPerformed(order); - BigDecimal result = budgetedCost.get(date); - return (result != null) ? result : BigDecimal.ZERO; + return getValueAt(budgetedCost, date); + } + + private BigDecimal getValueAt(SortedMap map, + LocalDate date) { + BigDecimal result = map.get(date); + if (result != null) { + return result; + } + for (LocalDate each : map.keySet()) { + if (date.isBefore(each)) { + return map.get(each); + } + } + if (date.isAfter(map.lastKey())) { + return map.get(map.lastKey()); + } + return BigDecimal.ZERO; } @Override