diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SchedulingDataForVersion.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SchedulingDataForVersion.java index a630be671..c94a7fb54 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SchedulingDataForVersion.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SchedulingDataForVersion.java @@ -48,12 +48,14 @@ public class SchedulingDataForVersion extends BaseEntity { private TaskSource taskSource; - private SchedulingState.Type schedulingStateType = Type.NO_SCHEDULED; + private SchedulingState.Type schedulingStateType; private final OrderVersion originOrderVersion; private boolean hasPendingChanges = false; + private final Type initialSchedulingStateType; + private Data(OrderVersion orderVersion, SchedulingDataForVersion version, TaskSource taskSource, @@ -63,6 +65,7 @@ public class SchedulingDataForVersion extends BaseEntity { this.originVersion = version; this.taskSource = taskSource; this.schedulingStateType = schedulingStateType; + this.initialSchedulingStateType = schedulingStateType; } public TaskSource getTaskSource() { @@ -85,7 +88,7 @@ public class SchedulingDataForVersion extends BaseEntity { } public void initializeType(Type type) { - if (getSchedulingStateType() != Type.NO_SCHEDULED) { + if (getSchedulingStateType() != initialSchedulingStateType) { throw new IllegalStateException("already initialized"); } this.setSchedulingStateType(type); @@ -153,11 +156,17 @@ public class SchedulingDataForVersion extends BaseEntity { Validate.notNull(orderElement); SchedulingDataForVersion schedulingDataForVersion = new SchedulingDataForVersion(); schedulingDataForVersion.orderElement = orderElement; + schedulingDataForVersion.schedulingStateType = defaultTypeFor(orderElement); return create(schedulingDataForVersion); } + private static Type defaultTypeFor(OrderElement orderElement) { + return orderElement.isLeaf() ? Type.SCHEDULING_POINT + : Type.NO_SCHEDULED; + } + @NotNull - private SchedulingState.Type schedulingStateType = Type.NO_SCHEDULED; + private SchedulingState.Type schedulingStateType; @NotNull private OrderElement orderElement; diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/ResourceAllocationDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/ResourceAllocationDAOTest.java index 0c2b1eefc..35d1587c0 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/ResourceAllocationDAOTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/ResourceAllocationDAOTest.java @@ -147,7 +147,8 @@ public class ResourceAllocationDAOTest { OrderVersion orderVersion = setupVersionUsing(scenarioManager, order); orderLine.useSchedulingDataFor(orderVersion); - orderLine.getSchedulingState().schedule(); + assert orderLine.getSchedulingStateType().isSomewhatScheduled(); + orderElementDAO.save(orderLine); HoursGroup hoursGroup = HoursGroup.create(orderLine); diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java index 0fe4c82e1..0320b9fca 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java @@ -222,7 +222,7 @@ public class OrderModelTest { order.add(line); line.setName(UUID.randomUUID().toString()); line.setCode(UUID.randomUUID().toString()); - line.getSchedulingState().schedule(); + assert line.getSchedulingState().isSomewhatScheduled(); orderModel.save(); assertTrue(orderDAO.exists(order.getId())); TaskSource lineTaskSource = line.getTaskSource(); @@ -230,14 +230,15 @@ public class OrderModelTest { } @Test - public void itKnowsIfSchedulingDataHasBeenModified() { + public void ifAnOrderLineIsScheduledItsTypeChanges() { Order order = givenOrderFromPrepareForCreate(); - assertFalse(order.hasSchedulingDataBeingModified()); OrderElement line = OrderLine.createOrderLineWithUnfixedPercentage(20); + line.useSchedulingDataFor(order.getCurrentOrderVersion()); + line.getSchedulingState().unschedule(); order.add(line); - assertFalse(order.hasSchedulingDataBeingModified()); + assertFalse(order.getSchedulingState().isSomewhatScheduled()); line.getSchedulingState().schedule(); - assertTrue(order.hasSchedulingDataBeingModified()); + assertTrue(order.getSchedulingState().isSomewhatScheduled()); } @Ignore("Test ignored until having the possibility to have a user " +