From 8579f091217d3caee6b1f151c6febb0b75e0cab9 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Mon, 14 Jun 2010 13:51:16 +0200 Subject: [PATCH] ItEr59S04ValidacionEProbasFuncionaisItEr58S04: Fixing bug. When it is changed the advance type , it is updated the advance type in the parents. --- .../advance/entities/AdvanceAssignment.java | 33 ++++++++++++++++++- .../orders/entities/OrderLineGroup.java | 32 ++++++++++++++---- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/AdvanceAssignment.java b/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/AdvanceAssignment.java index eb96248f7..75db3d407 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/AdvanceAssignment.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/AdvanceAssignment.java @@ -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()); 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 fc5754610..b765cb8ca 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 @@ -712,12 +712,9 @@ public class OrderLineGroup extends OrderElement implements AdvanceType advanceType) { Set result = new HashSet(); - 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 getAllDirectAdvanceAssignmentsReportGlobal() { Set result = new HashSet(); @@ -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)