From 1ddeb946fa3cca8dfd8f5a09f4cba1eb7621fb04 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Wed, 4 May 2011 18:04:03 +0200 Subject: [PATCH] [Bug #1039] Added new test to check spread advance and set them randomly if needed. FEA: ItEr74S07WBSTreeRefactoring --- .../orders/entities/OrderElement.java | 23 +++++++++ .../business/orders/entities/OrderLine.java | 1 + .../orders/entities/OrderLineGroup.java | 48 ++++++++----------- .../orders/entities/OrderElementTest.java | 27 +++++++++++ 4 files changed, 72 insertions(+), 27 deletions(-) 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 16a668a9a..0a65a668a 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 @@ -556,6 +556,7 @@ public abstract class OrderElement extends IntegrationEntity implements removeChildrenAdvanceInParents(this.getParent()); } markAsDirtyLastAdvanceMeasurementForSpreading(); + updateSpreadAdvance(); } } @@ -1403,4 +1404,26 @@ public abstract class OrderElement extends IntegrationEntity implements return result; } + protected void updateSpreadAdvance() { + if (getReportGlobalAdvanceAssignment() == null) { + // Set PERCENTAGE type as spread if any + String type = PredefinedAdvancedTypes.PERCENTAGE.getTypeName(); + for (DirectAdvanceAssignment each : directAdvanceAssignments) { + if (each.getAdvanceType() != null + && each.getAdvanceType().getType() != null + && each.getAdvanceType().getType().equals(type)) { + each.setReportGlobalAdvance(true); + return; + } + } + + // Otherwise, set first advance assignment + if (!directAdvanceAssignments.isEmpty()) { + directAdvanceAssignments.iterator().next() + .setReportGlobalAdvance(true); + return; + } + } + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java index 88f720934..ce2227093 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java @@ -234,6 +234,7 @@ public class OrderLine extends OrderElement { if (advanceAssignment != null) { advanceAssignment.setReportGlobalAdvance(false); } + markAsDirtyLastAdvanceMeasurementForSpreading(); } public boolean containsHoursGroup(String code) { 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 acc0b9825..57df9bb32 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 @@ -164,30 +164,28 @@ public class OrderLineGroup extends OrderElement implements } } - 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); + @Override + protected void updateSpreadAdvance() { + if (getReportGlobalAdvanceAssignment() == null) { + // Set CHILDREN type as spread if any + String type = PredefinedAdvancedTypes.CHILDREN.getTypeName(); + for (IndirectAdvanceAssignment each : indirectAdvanceAssignments) { + if (each.getAdvanceType() != null + && each.getAdvanceType().getType() != null + && each.getAdvanceType().getType().equals(type)) { + each.setReportGlobalAdvance(true); return; } } + + // Otherwise, set first indirect advance assignment + if (!indirectAdvanceAssignments.isEmpty()) { + indirectAdvanceAssignments.iterator().next() + .setReportGlobalAdvance(true); + return; + } + + super.updateSpreadAdvance(); } } @@ -925,12 +923,7 @@ public class OrderLineGroup extends OrderElement implements } if (toRemove != null) { indirectAdvanceAssignments.remove(toRemove); - if (toRemove.getReportGlobalAdvance()) { - IndirectAdvanceAssignment childrenAdvance = getChildrenAdvance(); - if (childrenAdvance != null) { - childrenAdvance.setReportGlobalAdvance(true); - } - } + updateSpreadAdvance(); } if (parent != null) { @@ -1010,6 +1003,7 @@ public class OrderLineGroup extends OrderElement implements if (advanceAssignment != null) { advanceAssignment.setReportGlobalAdvance(false); } + markAsDirtyLastAdvanceMeasurementForSpreading(); } public DirectAdvanceAssignment getAdvanceAssignmentByType(AdvanceType type) { diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderElementTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderElementTest.java index c85b90c1d..0b8d56509 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderElementTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderElementTest.java @@ -23,6 +23,7 @@ package org.navalplanner.business.test.orders.entities; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -1148,4 +1149,30 @@ public class OrderElementTest { .iterator().next().isValid()); } + @Test + public void checkSpreadAdvanceInOrderLine() + throws DuplicateValueTrueReportGlobalAdvanceException, + DuplicateAdvanceAssignmentForOrderElementException { + OrderLine orderLine = givenOrderLine("element", "element-code", 100); + + AdvanceType advanceType1 = PredefinedAdvancedTypes.PERCENTAGE.getType(); + AdvanceType advanceType2 = PredefinedAdvancedTypes.UNITS.getType(); + + addAvanceAssignmentWithoutMeasurement(orderLine, advanceType1, + BigDecimal.TEN, true); + addAvanceAssignmentWithoutMeasurement(orderLine, advanceType2, + BigDecimal.TEN, false); + + assertThat(orderLine.getReportGlobalAdvanceAssignment() + .getAdvanceType(), equalTo(advanceType1)); + assertNotNull(orderLine.getReportGlobalAdvanceAssignment()); + + orderLine.removeAdvanceAssignment(orderLine + .getAdvanceAssignmentByType(advanceType1)); + + assertNotNull(orderLine.getReportGlobalAdvanceAssignment()); + assertThat(orderLine.getReportGlobalAdvanceAssignment() + .getAdvanceType(), equalTo(advanceType2)); + } + }