From 1e4dd5eb490e67166e5ebd9cb9e1391dd71c13d9 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Mon, 4 Apr 2011 12:55:36 +0200 Subject: [PATCH] [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 --- .../advance/entities/AdvanceAssignment.java | 11 ++---- .../orders/entities/OrderElement.java | 18 +++++++--- .../orders/entities/OrderLineGroup.java | 6 ++-- .../ManageOrderElementAdvancesModel.java | 34 +++++++++++-------- 4 files changed, 38 insertions(+), 31 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 cf2a3e219..37fc13bbc 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 @@ -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(); } } } 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 2522ac461..3c76b424e 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 @@ -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) { 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 5cd7bf101..f8ac8650d 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 @@ -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) { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java index 9da039905..10b119151 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java @@ -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 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 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); + } } } }