ItEr27S06CUAsignacionGrupoRecursosAPlanificacionItEr26S07: Just one reportGlobal for each OrderLineGroup, taking into account direct and indirect AdvanceAssignments.

This commit is contained in:
Manuel Rego Casasnovas 2009-09-24 13:47:01 +02:00 committed by Javier Moran Rua
parent 7b2703b206
commit 88793f4faf
4 changed files with 59 additions and 6 deletions

View file

@ -216,7 +216,7 @@ public abstract class OrderElement extends BaseEntity {
}
}
private void checkNoOtherGlobalAdvanceAssignment(
protected void checkNoOtherGlobalAdvanceAssignment(
DirectAdvanceAssignment newAdvanceAssignment)
throws DuplicateValueTrueReportGlobalAdvanceException {
if (!newAdvanceAssignment.getReportGlobalAdvance()) {

View file

@ -21,6 +21,7 @@ import org.navalplanner.business.advance.entities.AdvanceType;
import org.navalplanner.business.advance.entities.DirectAdvanceAssignment;
import org.navalplanner.business.advance.entities.IndirectAdvanceAssignment;
import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException;
import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException;
public class OrderLineGroup extends OrderElement implements IOrderLineGroup {
@ -619,4 +620,22 @@ public class OrderLineGroup extends OrderElement implements IOrderLineGroup {
return false;
}
@Override
protected void checkNoOtherGlobalAdvanceAssignment(
DirectAdvanceAssignment newAdvanceAssignment)
throws DuplicateValueTrueReportGlobalAdvanceException {
if (!newAdvanceAssignment.getReportGlobalAdvance()) {
return;
}
Set<AdvanceAssignment> advanceAssignments = new HashSet<AdvanceAssignment>();
advanceAssignments.addAll(directAdvanceAssignments);
advanceAssignments.addAll(indirectAdvanceAssignments);
for (AdvanceAssignment advanceAssignment : advanceAssignments) {
if (advanceAssignment.getReportGlobalAdvance()) {
throw new DuplicateValueTrueReportGlobalAdvanceException(
"Duplicate Value True ReportGlobalAdvance For Order Element",
this, OrderElement.class);
}
}
}
}

View file

@ -237,7 +237,8 @@ public class AddAdvanceAssignmentsToOrderElementTest {
advanceAssignmentB.setAdvanceType(advanceTypeB);
advanceAssignmentB.getAdvanceMeasurements().add(advanceMeasurement);
OrderElementTest
.removeReportGlobalAdvanceFromChildrenAdvance(container);
container.addAdvanceAssignment(advanceAssignmentA);
son.addAdvanceAssignment(advanceAssignmentB);
}
@ -254,6 +255,8 @@ public class AddAdvanceAssignmentsToOrderElementTest {
DirectAdvanceAssignment advanceAssignmentA = createValidAdvanceAssignment(true);
advanceAssignmentA.setAdvanceType(advanceTypeA);
OrderElementTest
.removeReportGlobalAdvanceFromChildrenAdvance(container);
container.addAdvanceAssignment(advanceAssignmentA);
assertThat(container.getDirectAdvanceAssignments().size(), equalTo(1));
@ -273,6 +276,7 @@ public class AddAdvanceAssignmentsToOrderElementTest {
DirectAdvanceAssignment anotherAssignmentWithSameType = createValidAdvanceAssignment(false);
anotherAssignmentWithSameType.setAdvanceType(advanceTypeA);
OrderElementTest.removeReportGlobalAdvanceFromChildrenAdvance(father);
father.addAdvanceAssignment(advanceAssignmentA);
try {
@ -350,4 +354,19 @@ public class AddAdvanceAssignmentsToOrderElementTest {
}
}
@Test(expected = DuplicateValueTrueReportGlobalAdvanceException.class)
public void cannotAddTwoAssignmetsDirectAndIndirectWithGlobalReportValue()
throws Exception {
OrderLineGroup orderLineGroup = OrderLineGroup.create();
orderLineGroup.setName("test");
orderLineGroup.setCode("1");
AdvanceType advanceType = createAndSaveType("test");
DirectAdvanceAssignment advanceAssignment = createValidAdvanceAssignment(true);
advanceAssignment.setAdvanceType(advanceType);
orderLineGroup.addAdvanceAssignment(advanceAssignment);
}
}

View file

@ -372,10 +372,11 @@ public class OrderElementTest {
public void checkAdvancePercentageOrderGroupLineWithAssignments1()
throws DuplicateValueTrueReportGlobalAdvanceException,
DuplicateAdvanceAssignmentForOrderElementException {
OrderElement orderElement = givenOrderLineGroupWithTwoOrderLines(1000,
OrderLineGroup orderLineGroup = givenOrderLineGroupWithTwoOrderLines(
1000,
2000);
List<OrderElement> children = orderElement.getChildren();
List<OrderElement> children = orderLineGroup.getChildren();
addAvanceAssignmentWithMeasurement(children.get(0),
PredefinedAdvancedTypes.UNITS.getType(), new BigDecimal(1000),
new BigDecimal(400), true);
@ -383,11 +384,12 @@ public class OrderElementTest {
PredefinedAdvancedTypes.UNITS.getType(), new BigDecimal(2000),
new BigDecimal(200), true);
addAvanceAssignmentWithMeasurement(orderElement,
removeReportGlobalAdvanceFromChildrenAdvance(orderLineGroup);
addAvanceAssignmentWithMeasurement(orderLineGroup,
PredefinedAdvancedTypes.PERCENTAGE.getType(), new BigDecimal(
100), new BigDecimal(90), true);
assertThat(orderElement.getAdvancePercentage(), equalTo(new BigDecimal(
assertThat(orderLineGroup.getAdvancePercentage(), equalTo(new BigDecimal(
90).divide(new BigDecimal(100))));
}
@ -673,6 +675,7 @@ public class OrderElementTest {
AdvanceType advanceType2 = AdvanceType.create("test2", new BigDecimal(
10000), true, new BigDecimal(1), true, false);
removeReportGlobalAdvanceFromChildrenAdvance(orderLineGroup_1_1);
addAvanceAssignmentWithMeasurement(orderLineGroup_1_1, advanceType2,
new BigDecimal(100), new BigDecimal(50), true);
@ -882,4 +885,16 @@ public class OrderElementTest {
.setScale(2)));
}
public static void removeReportGlobalAdvanceFromChildrenAdvance(
OrderLineGroup orderLineGroup) {
for (IndirectAdvanceAssignment indirectAdvanceAssignment : orderLineGroup
.getIndirectAdvanceAssignments()) {
if (indirectAdvanceAssignment.getAdvanceType().getUnitName()
.equals(PredefinedAdvancedTypes.CHILDREN.getTypeName())) {
indirectAdvanceAssignment.setReportGlobalAdvance(false);
break;
}
}
}
}