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 a76e48ef1..04a353de8 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 @@ -16,6 +16,7 @@ import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.orders.services.IOrderService; import org.navalplanner.business.planner.services.ITaskElementService; +import org.navalplanner.business.resources.daos.ICriterionDAO; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionType; import org.navalplanner.business.resources.services.ICriterionService; @@ -58,6 +59,9 @@ public class OrderModel implements IOrderModel { private final ITaskElementService taskElementService; + @Autowired + private ICriterionDAO criterionDAO; + @Autowired public OrderModel(IOrderService orderService, ITaskElementService taskElementService) { @@ -89,7 +93,6 @@ public class OrderModel implements IOrderModel { public void prepareEditFor(Order order) { Validate.notNull(order); loadCriterions(); - this.order = getFromDB(order); this.orderElementTreeModel = new OrderElementTreeModel(this.order); } @@ -114,6 +117,7 @@ public class OrderModel implements IOrderModel { @Override @Transactional public void save() throws ValidationException { + reattachCriterions(); InvalidValue[] invalidValues = orderValidator.getInvalidValues(order); if (invalidValues.length > 0) throw new ValidationException(invalidValues); @@ -121,6 +125,14 @@ public class OrderModel implements IOrderModel { this.orderService.save(order); } + private void reattachCriterions() { + for (List list : mapCriterions.values()) { + for (Criterion criterion : list) { + criterionDAO.reattachUnmodifiedEntity(criterion); + } + } + } + @Override public IOrderLineGroup getOrder() { return order; @@ -146,7 +158,9 @@ public class OrderModel implements IOrderModel { } @Override + @Transactional(readOnly = true) public IOrderElementModel getOrderElementModel(OrderElement orderElement) { + reattachCriterions(); orderElementModel.setCurrent(orderElement, this); return orderElementModel; }