ItEr59S04ValidacionEProbasFuncionaisItEr58S04 : [Bug #476] Fixing Bug.

Adds and removes the advance 'Children' when is necessary.
This commit is contained in:
Susana Montes Pedreira 2010-06-02 16:45:32 +02:00 committed by Javier Moran Rua
parent 3d73fbac63
commit 73fcd62264
3 changed files with 83 additions and 12 deletions

View file

@ -48,16 +48,12 @@ public class Order extends OrderLineGroup {
public static Order create() {
Order order = new Order();
order.setNewObject(true);
OrderLineGroup.setupOrderLineGroup(order);
return order;
}
public static Order createUnvalidated(String code) {
Order order = create(new Order(), code);
OrderLineGroup.setupOrderLineGroup(order);
return order;
}

View file

@ -396,6 +396,7 @@ public abstract class OrderElement extends IntegrationEntity implements
if (this.getParent() != null) {
this.getParent().removeIndirectAdvanceAssignment(
advanceAssignment.getAdvanceType());
removeChildrenAdvanceInParents(this.getParent());
}
}
}
@ -448,11 +449,41 @@ public abstract class OrderElement extends IntegrationEntity implements
this.directAdvanceAssignments.add(newAdvanceAssignment);
if (this.getParent() != null) {
addChildrenAdvanceInParents(this.getParent());
this.getParent().addIndirectAdvanceAssignment(
newAdvanceAssignment.createIndirectAdvanceFor(this.getParent()));
}
}
public void addChildrenAdvanceInParents(OrderLineGroup parent) {
if ((parent != null) && (!parent.existChildrenAdvance())) {
parent.addChildrenAdvanceOrderLineGroup();
addChildrenAdvanceInParents(parent.getParent());
}
}
public void removeChildrenAdvanceInParents(OrderLineGroup parent) {
if ((parent != null) && (parent.existChildrenAdvance())
&& (!itsChildsHasAdvances(parent))) {
parent.removeChildrenAdvanceOrderLineGroup();
removeChildrenAdvanceInParents(parent.getParent());
}
}
private boolean itsChildsHasAdvances(OrderElement orderElement) {
for (OrderElement child : orderElement.getChildren()) {
if ((!child.getIndirectAdvanceAssignments().isEmpty())
|| (!child.getDirectAdvanceAssignments().isEmpty())) {
return true;
}
if (itsChildsHasAdvances(child)) {
return true;
}
}
return false;
}
protected void checkNoOtherGlobalAdvanceAssignment(
DirectAdvanceAssignment newAdvanceAssignment)
throws DuplicateValueTrueReportGlobalAdvanceException {

View file

@ -103,25 +103,69 @@ public class OrderLineGroup extends OrderElement implements
public static OrderLineGroup create() {
OrderLineGroup result = new OrderLineGroup();
result.setNewObject(true);
setupOrderLineGroup(result);
return result;
}
public static OrderLineGroup createUnvalidated(String code) {
OrderLineGroup orderLineGroup = create(new OrderLineGroup(), code);
setupOrderLineGroup(orderLineGroup);
return orderLineGroup;
}
protected static void setupOrderLineGroup(OrderLineGroup result) {
public void addChildrenAdvanceOrderLineGroup() {
boolean spread = (getReportGlobalAdvanceAssignment() == null);
IndirectAdvanceAssignment indirectAdvanceAssignment = IndirectAdvanceAssignment
.create(true);
.create(spread);
AdvanceType advanceType = PredefinedAdvancedTypes.CHILDREN.getType();
indirectAdvanceAssignment.setAdvanceType(advanceType);
indirectAdvanceAssignment.setOrderElement(result);
result.addIndirectAdvanceAssignment(indirectAdvanceAssignment);
indirectAdvanceAssignment.setOrderElement(this);
addIndirectAdvanceAssignment(indirectAdvanceAssignment);
}
public void removeChildrenAdvanceOrderLineGroup() {
for (IndirectAdvanceAssignment advance : getIndirectAdvanceAssignments()) {
if (advance.getAdvanceType().getUnitName().equals(
PredefinedAdvancedTypes.CHILDREN.getTypeName())) {
indirectAdvanceAssignments.remove(advance);
updateSpreadAdvance();
}
}
}
private void updateSpreadAdvance(){
if(getReportGlobalAdvanceAssignment() == null){
AdvanceType type = PredefinedAdvancedTypes.PERCENTAGE.getType();
DirectAdvanceAssignment advancePercentage = getAdvanceAssignmentByType(type);
if(advancePercentage != null) {
if(advancePercentage.isFake()){
for (IndirectAdvanceAssignment each : getIndirectAdvanceAssignments()) {
if (type != null && each.getAdvanceType().getId().equals(type.getId())) {
each.setReportGlobalAdvance(true);
}
}
}else{
advancePercentage.setReportGlobalAdvance(true);
}
} else {
for (DirectAdvanceAssignment advance : getDirectAdvanceAssignments()) {
advance.setReportGlobalAdvance(true);
return;
}
for (IndirectAdvanceAssignment advance : getIndirectAdvanceAssignments()) {
advance.setReportGlobalAdvance(true);
return;
}
}
}
}
public boolean existChildrenAdvance() {
for (IndirectAdvanceAssignment advance : getIndirectAdvanceAssignments()) {
if (advance.getAdvanceType().getUnitName().equals(
PredefinedAdvancedTypes.CHILDREN.getTypeName())) {
return true;
}
}
return false;
}
private List<OrderElement> children = new ArrayList<OrderElement>();