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 24941ada9..618ae4451 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 @@ -237,6 +237,16 @@ public abstract class OrderElement extends BaseEntity implements schedulingStateType = type; } + public void initializeTemplate(OrderElementTemplate template) { + if (!isNewObject()) { + throw new IllegalStateException(); + } + if (this.template != null) { + throw new IllegalStateException("already initialized"); + } + this.template = template; + } + public boolean isSchedulingPoint() { return getSchedulingState().getType() == Type.SCHEDULING_POINT; } 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 e2823bd45..845db9c96 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 @@ -378,7 +378,15 @@ public class OrderModel implements IOrderModel { } private Order createOrderFrom(OrderTemplate template) { - return template.createElement(); + return (Order) createOrderElementFrom(null, template); + } + + private OrderElement createOrderElementFrom(OrderLineGroup parent, + OrderElementTemplate template) { + OrderElement result = parent != null ? template.createElement(parent) + : template.createElement(); + result.initializeTemplate(template); + return result; } private void setDefaultOrderCode() throws ConcurrentModificationException { @@ -395,9 +403,8 @@ public class OrderModel implements IOrderModel { public OrderElement createFrom(OrderLineGroup parent, OrderElementTemplate template) { loadNeededDataForConversation(); - OrderElementTemplate templateReloaded = templateDAO - .findExistingEntity(template.getId()); - OrderElement result = templateReloaded.createElement(parent); + OrderElement result = createOrderElementFrom(parent, templateDAO + .findExistingEntity(template.getId())); if (isCodeAutogenerated()) { setAllCodeToNull(result); }