[Bug #947] check if not exists any indirect or direct advance when it changes advance type.

When it changes the advance type, the previous indirect advances in its ancestors
are deleted  and the new one is added if not exists any indirect or direct
advance with the same type.

ItEr73S04BugFixing
This commit is contained in:
Susana Montes Pedreira 2011-04-04 12:55:36 +02:00
parent adebb0348b
commit 1e4dd5eb49
4 changed files with 38 additions and 31 deletions

View file

@ -77,26 +77,19 @@ public abstract class AdvanceAssignment extends BaseEntity {
return this.advanceType;
}
public void changeAdvanceTypeInParents(AdvanceType oldType,
public void changeAdvanceTypeInParents(final AdvanceType oldType,
AdvanceType newType, AdvanceAssignment advance) {
if (getOrderElement() != null) {
OrderLineGroup parent = getOrderElement().getParent();
while (parent != null) {
if (parent != null) {
IndirectAdvanceAssignment oldIndirect = parent
.getIndirectAdvanceAssignment(oldType);
if (oldIndirect != null) {
parent.removeIndirectAdvanceAssignment(oldType);
}
if (!parent
.existsIndirectAdvanceAssignmentWithTheSameType(newType)) {
IndirectAdvanceAssignment newIndirect = advance
.createIndirectAdvanceFor(parent);
parent.addIndirectAdvanceAssignment(newIndirect);
}
parent = parent.getParent();
}
}
}

View file

@ -697,15 +697,13 @@ public abstract class OrderElement extends IntegrationEntity implements
OrderElement orderElement,
DirectAdvanceAssignment newAdvanceAssignment)
throws DuplicateAdvanceAssignmentForOrderElementException {
for (DirectAdvanceAssignment directAdvanceAssignment : orderElement
.getDirectAdvanceAssignments()) {
if (AdvanceType.equivalentInDB(directAdvanceAssignment
.getAdvanceType(), newAdvanceAssignment.getAdvanceType())) {
if (orderElement
.existsDirectAdvanceAssignmentWithTheSameType(newAdvanceAssignment
.getAdvanceType())) {
throw new DuplicateAdvanceAssignmentForOrderElementException(
_("Duplicate Progress Assignment For Task"),
this,
OrderElement.class);
}
}
if (!orderElement.getChildren().isEmpty()) {
for (OrderElement child : orderElement.getChildren()) {
@ -715,6 +713,16 @@ public abstract class OrderElement extends IntegrationEntity implements
}
}
public boolean existsDirectAdvanceAssignmentWithTheSameType(AdvanceType type) {
for (DirectAdvanceAssignment directAdvanceAssignment : directAdvanceAssignments) {
if (AdvanceType.equivalentInDB(directAdvanceAssignment
.getAdvanceType(), type)) {
return true;
}
}
return false;
}
public BigDecimal getAdvancePercentage() {
if ((dirtyLastAdvanceMeasurementForSpreading == null)
|| dirtyLastAdvanceMeasurementForSpreading) {

View file

@ -824,8 +824,10 @@ public class OrderLineGroup extends OrderElement implements
public void addIndirectAdvanceAssignment(
IndirectAdvanceAssignment indirectAdvanceAssignment) {
if (!existsIndirectAdvanceAssignmentWithTheSameType(indirectAdvanceAssignment
.getAdvanceType())) {
if ((!existsIndirectAdvanceAssignmentWithTheSameType(indirectAdvanceAssignment
.getAdvanceType()))
&& (!existsDirectAdvanceAssignmentWithTheSameType(indirectAdvanceAssignment
.getAdvanceType()))) {
indirectAdvanceAssignments.add(indirectAdvanceAssignment);
}
if (parent != null) {

View file

@ -362,6 +362,7 @@ public class ManageOrderElementAdvancesModel implements
@Override
public void removeLineAdvanceAssignment(AdvanceAssignment advance) {
advance.setOrderElement(null);
this.listAdvanceAssignments.remove(advance);
orderElement.removeAdvanceAssignment(advance);
this.advanceAssignment = null;
@ -685,21 +686,24 @@ public class ManageOrderElementAdvancesModel implements
} else {
directAdvanceAssignment = calculateFakeDirectAdvanceAssignment((IndirectAdvanceAssignment) each);
}
String title = getInfoAdvanceAssignment(directAdvanceAssignment);
SortedSet<AdvanceMeasurement> listAdvanceMeasurements = directAdvanceAssignment
.getAdvanceMeasurements();
if (listAdvanceMeasurements.size() > 1) {
for (AdvanceMeasurement advanceMeasurement : listAdvanceMeasurements) {
BigDecimal value = advanceMeasurement.getValue();
if ((selectedAdvances.size() > 1) && (value != null)) {
BigDecimal maxValue = directAdvanceAssignment
.getMaxValue();
value = value.divide(maxValue, RoundingMode.DOWN);
}
LocalDate date = advanceMeasurement.getDate();
if ((value != null) && (date != null)) {
xymodel.addValue(title, Long.valueOf(date
.toDateTimeAtStartOfDay().getMillis()), value);
if (directAdvanceAssignment != null) {
String title = getInfoAdvanceAssignment(directAdvanceAssignment);
SortedSet<AdvanceMeasurement> listAdvanceMeasurements = directAdvanceAssignment
.getAdvanceMeasurements();
if (listAdvanceMeasurements.size() > 1) {
for (AdvanceMeasurement advanceMeasurement : listAdvanceMeasurements) {
BigDecimal value = advanceMeasurement.getValue();
if ((selectedAdvances.size() > 1) && (value != null)) {
BigDecimal maxValue = directAdvanceAssignment
.getMaxValue();
value = value.divide(maxValue, RoundingMode.DOWN);
}
LocalDate date = advanceMeasurement.getDate();
if ((value != null) && (date != null)) {
xymodel.addValue(title, Long.valueOf(date
.toDateTimeAtStartOfDay().getMillis()),
value);
}
}
}
}