ItEr28S14RFVistaGraficaInformacionAvance: Fixed bug in "getAdvancePercentage" when a measurement is in the future. Added the corresponding test.

This commit is contained in:
Manuel Rego Casasnovas 2009-10-01 13:09:12 +02:00 committed by Javier Moran Rua
parent 3d7c8e4ee8
commit bd303482f8
4 changed files with 54 additions and 13 deletions

View file

@ -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);
}

View file

@ -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);
}
}

View file

@ -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)));

View file

@ -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))));