ItEr59S04ValidacionEProbasFuncionaisItEr58S04: Fixing bug.

When it is changed the advance type , it is updated the
advance type in the parents.
This commit is contained in:
Susana Montes Pedreira 2010-06-14 13:51:16 +02:00 committed by Javier Moran Rua
parent 1dfd0c3963
commit 8579f09121
2 changed files with 58 additions and 7 deletions

View file

@ -61,7 +61,14 @@ public abstract class AdvanceAssignment extends BaseEntity {
}
public void setAdvanceType(AdvanceType advanceType) {
this.advanceType = advanceType;
AdvanceType oldType = this.advanceType;
if (advanceType != null) {
this.advanceType = advanceType;
}
if (oldType != null && advanceType != null) {
changeAdvanceTypeInParents(oldType, this.advanceType, this);
}
}
@NotNull(message = "advance type not specified")
@ -69,6 +76,30 @@ public abstract class AdvanceAssignment extends BaseEntity {
return this.advanceType;
}
public void changeAdvanceTypeInParents(AdvanceType oldType,
AdvanceType newType, AdvanceAssignment advance) {
if (getOrderElement() != null) {
OrderLineGroup parent = getOrderElement().getParent();
while (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();
}
}
}
public IndirectAdvanceAssignment createIndirectAdvanceFor(OrderLineGroup parent) {
IndirectAdvanceAssignment result = new IndirectAdvanceAssignment();
result.setAdvanceType(getAdvanceType());

View file

@ -712,12 +712,9 @@ public class OrderLineGroup extends OrderElement implements
AdvanceType advanceType) {
Set<IndirectAdvanceAssignment> result = new HashSet<IndirectAdvanceAssignment>();
for (IndirectAdvanceAssignment indirectAdvanceAssignment : indirectAdvanceAssignments) {
if (indirectAdvanceAssignment.getAdvanceType().getUnitName()
.equals(advanceType.getUnitName())) {
result.add(indirectAdvanceAssignment);
break;
}
IndirectAdvanceAssignment indirectAdvanceAssignment = getIndirectAdvanceAssignment(advanceType);
if(indirectAdvanceAssignment != null){
result.add(indirectAdvanceAssignment);
}
for (OrderElement orderElement : children) {
@ -728,6 +725,17 @@ public class OrderLineGroup extends OrderElement implements
return result;
}
public IndirectAdvanceAssignment getIndirectAdvanceAssignment(
AdvanceType advanceType) {
for (IndirectAdvanceAssignment indirectAdvanceAssignment : indirectAdvanceAssignments) {
if (indirectAdvanceAssignment.getAdvanceType().getUnitName()
.equals(advanceType.getUnitName())) {
return indirectAdvanceAssignment;
}
}
return null;
}
@Override
protected Set<DirectAdvanceAssignment> getAllDirectAdvanceAssignmentsReportGlobal() {
Set<DirectAdvanceAssignment> result = new HashSet<DirectAdvanceAssignment>();
@ -819,6 +827,18 @@ public class OrderLineGroup extends OrderElement implements
return false;
}
public boolean existsIndirectAdvanceAssignmentWithTheSameType(
AdvanceType type) {
String unitName = type.getUnitName();
for (IndirectAdvanceAssignment indirectAdvanceAssignment : indirectAdvanceAssignments) {
if (unitName.equals(indirectAdvanceAssignment.getAdvanceType()
.getUnitName())) {
return true;
}
}
return false;
}
@Override
protected void checkNoOtherGlobalAdvanceAssignment(
DirectAdvanceAssignment newAdvanceAssignment)