From 73fcd62264a437ef0d581cdf76eea74779924a95 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Wed, 2 Jun 2010 16:45:32 +0200 Subject: [PATCH] ItEr59S04ValidacionEProbasFuncionaisItEr58S04 : [Bug #476] Fixing Bug. Adds and removes the advance 'Children' when is necessary. --- .../business/orders/entities/Order.java | 4 -- .../orders/entities/OrderElement.java | 31 ++++++++++ .../orders/entities/OrderLineGroup.java | 60 ++++++++++++++++--- 3 files changed, 83 insertions(+), 12 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java index 763077dab..87892a4f1 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java @@ -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; } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java index efa275d58..63d3478b4 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java @@ -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 { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java index 1517e3537..c71c2ffda 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java @@ -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 children = new ArrayList();