ItEr59S04ValidacionEProbasFuncionaisItEr58S04 : Fixing bug.

the calculated advance is modified to check  precision.
This commit is contained in:
Susana Montes Pedreira 2010-06-15 09:35:06 +02:00 committed by Javier Moran Rua
parent 833c1b1eba
commit 228c4675b2

View file

@ -604,7 +604,7 @@ public class OrderLineGroup extends OrderElement implements
advanceMeasurement.setAdvanceAssignment(advanceAssignment);
advanceMeasurement.setDate(date);
previousResult = previousResult.add(add);
advanceMeasurement.setValue(previousResult);
checkAndSetValue(advanceMeasurement, previousResult);
advanceMeasurement.setCommunicationDate(communicationDate);
result.add(advanceMeasurement);
}
@ -631,7 +631,7 @@ public class OrderLineGroup extends OrderElement implements
AdvanceMeasurement advanceMeasurement = AdvanceMeasurement.create();
advanceMeasurement.setAdvanceAssignment(advanceAssignment);
advanceMeasurement.setDate(date);
advanceMeasurement.setValue(previousResult.add(add));
checkAndSetValue(advanceMeasurement, previousResult);
previousResult = advanceMeasurement.getValue();
advanceMeasurement.setCommunicationDate(communicationDate);
result.add(advanceMeasurement);
@ -659,7 +659,7 @@ public class OrderLineGroup extends OrderElement implements
AdvanceMeasurement advanceMeasurement = AdvanceMeasurement.create();
advanceMeasurement.setAdvanceAssignment(advanceAssignment);
advanceMeasurement.setDate(date);
advanceMeasurement.setValue(previousResult.add(add));
checkAndSetValue(advanceMeasurement, previousResult);
previousResult = advanceMeasurement.getValue();
advanceMeasurement.setCommunicationDate(communicationDate);
result.add(advanceMeasurement);
@ -667,6 +667,32 @@ public class OrderLineGroup extends OrderElement implements
}
private void checkAndSetValue(AdvanceMeasurement advanceMeasurement,
BigDecimal previousResult) {
advanceMeasurement.setValue(previousResult);
boolean checkPrecision = advanceMeasurement
.checkConstraintValidPrecision();
if (!checkPrecision) {
AdvanceAssignment advanceAssignment = advanceMeasurement
.getAdvanceAssignment();
if ((previousResult == null) || (advanceAssignment == null)
|| (advanceAssignment.getAdvanceType() == null)) {
return;
}
BigDecimal precision = advanceAssignment.getAdvanceType()
.getUnitPrecision();
BigDecimal result[] = previousResult.divideAndRemainder(precision);
BigDecimal checkResult;
if (previousResult.compareTo(result[1]) >= 0) {
checkResult = previousResult.subtract(result[1]);
} else {
checkResult = previousResult.add(result[1]);
}
advanceMeasurement.setValue(checkResult);
}
}
private BigDecimal addMeasure(BigDecimal add, BigDecimal totalHours,
BigDecimal orderElementHours) {
if ((totalHours != null) && (totalHours.compareTo(BigDecimal.ZERO) > 0)) {