ItEr40S05ValidacionEProbasFuncionaisItEr39S05: Fixing bug.

The resource allocation form was not being shown because the task was a proxy. Queries are being done now to avoid proxies.
This commit is contained in:
Óscar González Fernández 2009-12-21 19:00:12 +01:00
parent 9e2a6062b7
commit d1f6dbbd19
3 changed files with 41 additions and 3 deletions

View file

@ -20,9 +20,12 @@
package org.navalplanner.business.planner.daos;
import java.util.List;
import org.navalplanner.business.common.daos.IGenericDAO;
import org.navalplanner.business.planner.entities.DayAssignment;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.planner.entities.TaskGroup;
/**
* @author Óscar González Fernández <ogonzalez@igalia.com>
@ -34,4 +37,6 @@ public interface ITaskElementDAO extends IGenericDAO<TaskElement, Long> {
*/
void removeOrphanedDayAssignments();
List<TaskElement> findChildrenOf(TaskGroup each);
}

View file

@ -29,6 +29,7 @@ import org.navalplanner.business.planner.entities.DayAssignment;
import org.navalplanner.business.planner.entities.GenericDayAssignment;
import org.navalplanner.business.planner.entities.SpecificDayAssignment;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.planner.entities.TaskGroup;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
@ -72,4 +73,11 @@ public class TaskElementDAO extends GenericDAOHibernate<TaskElement, Long>
return getSession().createCriteria(SpecificDayAssignment.class).add(
Restrictions.isNull("specificResourceAllocation")).list();
}
@SuppressWarnings("unchecked")
@Override
public List<TaskElement> findChildrenOf(TaskGroup each) {
return getSession().createCriteria(TaskElement.class).add(
Restrictions.eq("parent", each)).list();
}
}

View file

@ -24,6 +24,7 @@ import static org.navalplanner.web.I18nHelper._;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
@ -33,6 +34,7 @@ import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import org.hibernate.Hibernate;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.navalplanner.business.calendars.entities.BaseCalendar;
@ -43,10 +45,12 @@ import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.orders.daos.IOrderDAO;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.planner.daos.ITaskElementDAO;
import org.navalplanner.business.planner.entities.DayAssignment;
import org.navalplanner.business.planner.entities.ICostCalculator;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.planner.entities.TaskGroup;
import org.navalplanner.business.planner.entities.TaskMilestone;
import org.navalplanner.business.resources.daos.IResourceDAO;
import org.navalplanner.business.resources.entities.Resource;
@ -130,6 +134,9 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
@Autowired
private IWorkReportLineDAO workReportLineDAO;
@Autowired
private ITaskElementDAO taskDAO;
@Autowired
private IAdHocTransactionService transactionService;
@ -562,11 +569,13 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
Order orderReloaded) {
taskElementAdapter = getTaskElementAdapter();
taskElementAdapter.setOrder(orderReloaded);
planningState = new PlanningState(orderReloaded
.getAssociatedTaskElement(),
TaskGroup taskElement = orderReloaded
.getAssociatedTaskElement();
forceLoadOfChildren(Arrays.asList(taskElement));
planningState = new PlanningState(taskElement,
orderReloaded.getAssociatedTasks(),
resourceDAO.list(Resource.class));
forceLoadOfChildren(planningState.getInitial());
forceLoadOfDependenciesCollections(planningState.getInitial());
forceLoadOfWorkingHours(planningState.getInitial());
forceLoadOfLabels(planningState.getInitial());
@ -579,6 +588,22 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
return result;
}
private void forceLoadOfChildren(Collection<? extends TaskElement> initial) {
for (TaskElement each : initial) {
if (each instanceof TaskGroup) {
findChildrenWithQueryToAvoidProxies((TaskGroup) each);
List<TaskElement> children = each.getChildren();
forceLoadOfChildren(children);
}
}
}
private void findChildrenWithQueryToAvoidProxies(TaskGroup group) {
for (TaskElement eachTask : taskDAO.findChildrenOf(group)) {
Hibernate.initialize(eachTask);
}
}
private void forceLoadOfWorkingHours(List<TaskElement> initial) {
for (TaskElement taskElement : initial) {
OrderElement orderElement = taskElement.getOrderElement();