From bd303482f8044e7bcc5335b3b7e6da3a5a3c7ca1 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Thu, 1 Oct 2009 13:09:12 +0200 Subject: [PATCH] ItEr28S14RFVistaGraficaInformacionAvance: Fixed bug in "getAdvancePercentage" when a measurement is in the future. Added the corresponding test. --- .../orders/entities/OrderElement.java | 4 +-- .../business/orders/entities/OrderLine.java | 5 ++- .../orders/entities/OrderLineGroup.java | 23 +++++++++--- .../orders/entities/OrderElementTest.java | 35 ++++++++++++++++--- 4 files changed, 54 insertions(+), 13 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java index 97191b75b..acdf42d27 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java @@ -285,9 +285,9 @@ public abstract class OrderElement extends BaseEntity { } public BigDecimal getAdvancePercentage() { - return getAdvancePercentage(new LocalDate()); + return getAdvancePercentage(null); } - protected abstract BigDecimal getAdvancePercentage(LocalDate date); + public abstract BigDecimal getAdvancePercentage(LocalDate date); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java index 1d28063c7..e3b3ce8b1 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java @@ -350,9 +350,12 @@ public class OrderLine extends OrderElement { } @Override - protected BigDecimal getAdvancePercentage(LocalDate date) { + public BigDecimal getAdvancePercentage(LocalDate date) { for (DirectAdvanceAssignment directAdvanceAssignment : directAdvanceAssignments) { if (directAdvanceAssignment.getReportGlobalAdvance()) { + if (date == null) { + return directAdvanceAssignment.getLastPercentage(); + } return directAdvanceAssignment.getAdvancePercentage(date); } } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java index c6cc4972c..6e836a50f 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java @@ -177,9 +177,12 @@ public class OrderLineGroup extends OrderElement implements IOrderLineGroup { } @Override - protected BigDecimal getAdvancePercentage(LocalDate date) { + public BigDecimal getAdvancePercentage(LocalDate date) { for (DirectAdvanceAssignment directAdvanceAssignment : directAdvanceAssignments) { if (directAdvanceAssignment.getReportGlobalAdvance()) { + if (date == null) { + return directAdvanceAssignment.getLastPercentage(); + } return directAdvanceAssignment.getAdvancePercentage(date); } } @@ -188,9 +191,15 @@ public class OrderLineGroup extends OrderElement implements IOrderLineGroup { if (indirectAdvanceAssignment.getReportGlobalAdvance()) { if (indirectAdvanceAssignment.getAdvanceType().getUnitName() .equals(PredefinedAdvancedTypes.CHILDREN.getTypeName())) { + if (date == null) { + return getAdvancePercentageChildren(); + } return getAdvancePercentageChildren(date); } else { DirectAdvanceAssignment directAdvanceAssignment = calculateFakeDirectAdvanceAssignment(indirectAdvanceAssignment); + if (date == null) { + return directAdvanceAssignment.getLastPercentage(); + } return directAdvanceAssignment.getAdvancePercentage(date); } } @@ -200,17 +209,21 @@ public class OrderLineGroup extends OrderElement implements IOrderLineGroup { } public BigDecimal getAdvancePercentageChildren() { - return getAdvancePercentageChildren(new LocalDate()); + return getAdvancePercentageChildren(null); } - protected BigDecimal getAdvancePercentageChildren(LocalDate date) { + public BigDecimal getAdvancePercentageChildren(LocalDate date) { Integer hours = getWorkHours(); BigDecimal result = new BigDecimal(0); if (hours > 0) { for (OrderElement orderElement : children) { - BigDecimal childPercentage = orderElement - .getAdvancePercentage(date); + BigDecimal childPercentage; + if (date == null) { + childPercentage = orderElement.getAdvancePercentage(); + } else { + childPercentage = orderElement.getAdvancePercentage(date); + } Integer childHours = orderElement.getWorkHours(); result = result.add(childPercentage.multiply(new BigDecimal( childHours))); diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderElementTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderElementTest.java index f4183c7a2..bbe963c6d 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderElementTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderElementTest.java @@ -114,8 +114,18 @@ public class OrderElementTest { boolean reportGlobalAdvance) throws DuplicateValueTrueReportGlobalAdvanceException, DuplicateAdvanceAssignmentForOrderElementException { + addAvanceAssignmentWithMeasurement(orderElement, advanceType, maxValue, + currentValue, reportGlobalAdvance, new LocalDate()); + } + + public static void addAvanceAssignmentWithMeasurement( + OrderElement orderElement, AdvanceType advanceType, + BigDecimal maxValue, BigDecimal currentValue, + boolean reportGlobalAdvance, LocalDate date) + throws DuplicateValueTrueReportGlobalAdvanceException, + DuplicateAdvanceAssignmentForOrderElementException { AdvanceMeasurement advanceMeasurement = AdvanceMeasurement.create(); - advanceMeasurement.setDate(new LocalDate()); + advanceMeasurement.setDate(date); advanceMeasurement.setValue(currentValue); DirectAdvanceAssignment advanceAssignment = givenAdvanceAssigement( @@ -175,18 +185,33 @@ public class OrderElementTest { } @Test - public void checkAdvancePercentageOrderLineWithTwoAssignments2() + public void checkAdvancePercentageOrderLineWithFutureAdvanceMeasurement() + throws DuplicateValueTrueReportGlobalAdvanceException, + DuplicateAdvanceAssignmentForOrderElementException { + OrderLine orderLine = givenOrderLine("name", "code", 1000); + + LocalDate future = new LocalDate().plusWeeks(1); + addAvanceAssignmentWithMeasurement(orderLine, + givenAdvanceType("test1"), new BigDecimal(2000), + new BigDecimal(200), true, future); + + assertThat(orderLine.getAdvancePercentage(), equalTo(new BigDecimal(10) + .setScale(2).divide(new BigDecimal(100)))); + } + + @Test + public void checkAdvancePercentageOrderLineWithTwoAssignments3() throws DuplicateValueTrueReportGlobalAdvanceException, DuplicateAdvanceAssignmentForOrderElementException { OrderLine orderLine = givenOrderLine("name", "code", 1000); addAvanceAssignmentWithMeasurement(orderLine, - givenAdvanceType("test1"), new BigDecimal(2000), + PredefinedAdvancedTypes.UNITS.getType(), new BigDecimal(2000), new BigDecimal(200), false); addAvanceAssignmentWithMeasurement(orderLine, - givenAdvanceType("test2"), new BigDecimal(1000), - new BigDecimal(600), true); + PredefinedAdvancedTypes.PERCENTAGE.getType(), new BigDecimal( + 1000), new BigDecimal(600), true); assertThat(orderLine.getAdvancePercentage(), equalTo(new BigDecimal(60) .setScale(2).divide(new BigDecimal(100))));