From ad3268654a3182cf0264e1f09faa5a89ae8ef5cf Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Thu, 13 Oct 2011 09:54:19 +0200 Subject: [PATCH] [Bug #1205] Fix issue going to edition of a task in WBS directly The problem was related with a Hibernate proxy when trying to use method getOrder of an OrderElement. FEA: ItEr75S04BugFixing --- .../business/planner/entities/TaskElement.java | 4 ++++ .../navalplanner/web/orders/OrderElementModel.java | 14 ++++++++++++-- .../web/planner/order/PlanningStateCreator.java | 13 +++++++++++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java index b1db655a5..d0105d7e8 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java @@ -502,6 +502,10 @@ public abstract class TaskElement extends BaseEntity { this.calendar = calendar; } + public BaseCalendar getOwnCalendar() { + return calendar; + } + public BaseCalendar getCalendar() { if (calendar == null) { OrderElement orderElement = getOrderElement(); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java index 115d42a8a..94a1bbe41 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java @@ -27,8 +27,10 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.navalplanner.business.orders.daos.IOrderDAO; import org.navalplanner.business.orders.daos.IOrderElementDAO; import org.navalplanner.business.orders.entities.HoursGroup; +import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.resources.daos.ICriterionTypeDAO; import org.navalplanner.business.resources.entities.Criterion; @@ -50,6 +52,9 @@ public class OrderElementModel implements IOrderElementModel { @Autowired private IOrderElementDAO orderElementDAO; + @Autowired + private IOrderDAO orderDAO; + @Autowired private ICriterionTypeDAO criterionTypeDao; @@ -144,11 +149,16 @@ public class OrderElementModel implements IOrderElementModel { } @Override + @Transactional(readOnly = true) public boolean isCodeAutogenerated() { - if ((orderElement == null) || (orderElement.getOrder() == null)) { + if (orderElement == null) { return false; } - return orderElement.getOrder().isCodeAutogenerated(); + Order order = orderDAO.loadOrderAvoidingProxyFor(orderElement); + if (order == null) { + return false; + } + return order.isCodeAutogenerated(); } } 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 2f563d8bb..1bcdc81c4 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 @@ -33,6 +33,7 @@ import org.hibernate.Hibernate; import org.joda.time.LocalDate; import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; import org.navalplanner.business.advance.entities.IndirectAdvanceAssignment; +import org.navalplanner.business.calendars.entities.BaseCalendar; import org.navalplanner.business.common.IAdHocTransactionService; import org.navalplanner.business.common.IOnTransaction; import org.navalplanner.business.common.daos.IEntitySequenceDAO; @@ -312,8 +313,16 @@ public class PlanningStateCreator { private void forceLoadOfDataAssociatedTo(TaskElement each) { forceLoadOfResourceAllocationsResourcesAndAssignmentFunction(each); forceLoadOfCriterions(each); - if (each.getCalendar() != null) { - BaseCalendarModel.forceLoadBaseCalendar(each.getCalendar()); + + BaseCalendar calendar = each.getOwnCalendar(); + if (calendar == null) { + if (each.getOrderElement() != null) { + calendar = orderDAO.loadOrderAvoidingProxyFor( + each.getOrderElement()).getCalendar(); + } + } + if (calendar != null) { + BaseCalendarModel.forceLoadBaseCalendar(calendar); } each.hasConsolidations(); }