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 bfd4d2583..881eacc04 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 @@ -1444,4 +1444,8 @@ public abstract class OrderElement extends IntegrationEntity implements } } + public List getOrderVersions() { + return new ArrayList(schedulingDatasForVersion.keySet()); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java index 81ff1d806..54d7719ed 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java @@ -398,7 +398,7 @@ public class OrderModel extends IntegrationEntityModel implements IOrderModel { loadNeededDataForConversation(); Order order = createOrderFrom((OrderTemplate) templateDAO .findExistingEntity(template.getId())); - planningStateCreator.createOn(desktop, order); + planningState = planningStateCreator.createOn(desktop, order); forceLoadAdvanceAssignmentsAndMeasurements(planningState.getOrder()); initializeOrder(); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/PlanningStateCreator.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/PlanningStateCreator.java index 3f2137475..f64029561 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/PlanningStateCreator.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/PlanningStateCreator.java @@ -169,6 +169,9 @@ public class PlanningStateCreator { } void setupScenario(Order order) { + if (!order.hasNoVersions()) { + return; + } Scenario currentScenario = scenarioManager.getCurrent(); OrderVersion orderVersion = currentScenario.addOrder(order); order.setVersionForScenario(currentScenario, orderVersion); @@ -428,8 +431,8 @@ public class PlanningStateCreator { public void saveVersioningInfo() throws IllegalStateException { current.saveVersioningInfo(); - } + } public void afterCommit() { if (current instanceof ChangeScenarioInfoOnSave) { current = new UsingOwnerScenario(current.getCurrentScenario(), @@ -466,12 +469,24 @@ public class PlanningStateCreator { public void saveVersioningInfo() { OrderVersion orderVersion = order.getCurrentVersionInfo() .getOrderVersion(); + if (order.isNewObject()) { + scenarioDAO.updateDerivedScenariosWithNewVersion(null, order, + currentScenario, orderVersion); + } orderVersion.savingThroughOwner(); - synchronizeWithSchedule(order, - TaskSource.persistTaskSources(taskSourceDAO)); + synchronizeWithSchedule(order, getPersistence()); order.writeSchedulingDataChanges(); } + IOptionalPersistence getPersistence() { + if (order.isNewObject()) { + return TaskSource + .persistButDontRemoveTaskSources(taskSourceDAO); + } else { + return TaskSource.persistTaskSources(taskSourceDAO); + } + } + @Override public void afterCommit() { // do nothing diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SaveCommandBuilder.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SaveCommandBuilder.java index b69e14bf6..4f16ce22a 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SaveCommandBuilder.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SaveCommandBuilder.java @@ -748,6 +748,7 @@ public class SaveCommandBuilder { private void dontPoseAsTransientObjectAnymore(OrderElement orderElement) { orderElement.dontPoseAsTransientObjectAnymore(); + dontPoseAsTransientObjectAnymore(orderElement.getOrderVersions()); dontPoseAsTransientObjectAnymore(orderElement .getTaskSourcesFromBottomToTop()); dontPoseAsTransientObjectAnymore(orderElement