ItEr41S11CUConfiguracionMaquinasItEr40S15: Reattaching resources so the derived assignments can be moved
This commit is contained in:
parent
a6be5c5164
commit
f4645d73fd
2 changed files with 62 additions and 4 deletions
|
|
@ -28,12 +28,14 @@ import java.util.ArrayList;
|
|||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.hibernate.Hibernate;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.navalplanner.business.common.IAdHocTransactionService;
|
||||
import org.navalplanner.business.common.IOnTransaction;
|
||||
|
|
@ -43,12 +45,18 @@ 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.Dependency;
|
||||
import org.navalplanner.business.planner.entities.DerivedAllocation;
|
||||
import org.navalplanner.business.planner.entities.ResourceAllocation;
|
||||
import org.navalplanner.business.planner.entities.StartConstraintType;
|
||||
import org.navalplanner.business.planner.entities.Task;
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.navalplanner.business.planner.entities.TaskMilestone;
|
||||
import org.navalplanner.business.planner.entities.TaskStartConstraint;
|
||||
import org.navalplanner.business.planner.entities.Dependency.Type;
|
||||
import org.navalplanner.business.resources.daos.IResourceDAO;
|
||||
import org.navalplanner.business.resources.entities.Machine;
|
||||
import org.navalplanner.business.resources.entities.MachineWorkersConfigurationUnit;
|
||||
import org.navalplanner.business.resources.entities.Resource;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
|
|
@ -101,6 +109,9 @@ public class TaskElementAdapter implements ITaskElementAdapter {
|
|||
@Autowired
|
||||
private ITaskElementDAO taskDAO;
|
||||
|
||||
@Autowired
|
||||
private IResourceDAO resourceDAO;
|
||||
|
||||
private List<IOnMoveListener> listeners = new ArrayList<IOnMoveListener>();
|
||||
|
||||
@Override
|
||||
|
|
@ -157,6 +168,7 @@ public class TaskElementAdapter implements ITaskElementAdapter {
|
|||
@Override
|
||||
public Long execute() {
|
||||
taskDAO.reattach(taskElement);
|
||||
reattachAllResourcesForTask();
|
||||
Long result = setBeginDateInsideTransaction(beginDate);
|
||||
fireTaskElementMoved(taskElement);
|
||||
return result;
|
||||
|
|
@ -165,6 +177,35 @@ public class TaskElementAdapter implements ITaskElementAdapter {
|
|||
return runOnReadOnlyTransaction;
|
||||
}
|
||||
|
||||
private void reattachAllResourcesForTask() {
|
||||
Set<Resource> resources = resourcesForTask();
|
||||
for (Resource each : resources) {
|
||||
resourceDAO.reattach(each);
|
||||
}
|
||||
for (Machine machine : Resource.machines(resources)) {
|
||||
Set<MachineWorkersConfigurationUnit> configurationUnits = machine
|
||||
.getConfigurationUnits();
|
||||
for (MachineWorkersConfigurationUnit eachUnit : configurationUnits) {
|
||||
Hibernate.initialize(eachUnit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Set<Resource> resourcesForTask() {
|
||||
Set<ResourceAllocation<?>> resourceAllocations = taskElement.getResourceAllocations();
|
||||
Set<Resource> resources = new HashSet<Resource>();
|
||||
for (ResourceAllocation<?> each : resourceAllocations) {
|
||||
resources.addAll(each
|
||||
.getAssociatedResources());
|
||||
for (DerivedAllocation derivedAllocation : each
|
||||
.getDerivedAllocations()) {
|
||||
resources
|
||||
.addAll(derivedAllocation.getResources());
|
||||
}
|
||||
}
|
||||
return resources;
|
||||
}
|
||||
|
||||
private Long setBeginDateInsideTransaction(final Date beginDate) {
|
||||
taskElement.moveTo(beginDate);
|
||||
return getLengthMilliseconds();
|
||||
|
|
|
|||
|
|
@ -47,7 +47,9 @@ 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.DerivedAllocation;
|
||||
import org.navalplanner.business.planner.entities.ICostCalculator;
|
||||
import org.navalplanner.business.planner.entities.ResourceAllocation;
|
||||
import org.navalplanner.business.planner.entities.Task;
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.navalplanner.business.planner.entities.TaskGroup;
|
||||
|
|
@ -579,11 +581,10 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
|
|||
taskElementAdapter.setOrder(orderReloaded);
|
||||
TaskGroup taskElement = orderReloaded
|
||||
.getAssociatedTaskElement();
|
||||
final List<Resource> allResources = resourceDAO.list(Resource.class);
|
||||
forceLoadOfChildren(Arrays.asList(taskElement));
|
||||
planningState = new PlanningState(taskElement,
|
||||
orderReloaded.getAssociatedTasks(),
|
||||
resourceDAO.list(Resource.class));
|
||||
forceLoadOfChildren(planningState.getInitial());
|
||||
planningState = new PlanningState(taskElement, orderReloaded
|
||||
.getAssociatedTasks(), allResources);
|
||||
forceLoadOfDependenciesCollections(planningState.getInitial());
|
||||
forceLoadOfWorkingHours(planningState.getInitial());
|
||||
forceLoadOfLabels(planningState.getInitial());
|
||||
|
|
@ -598,6 +599,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
|
|||
|
||||
private void forceLoadOfChildren(Collection<? extends TaskElement> initial) {
|
||||
for (TaskElement each : initial) {
|
||||
forceLoadOfResourceAllocationsResources(each);
|
||||
if (each instanceof TaskGroup) {
|
||||
findChildrenWithQueryToAvoidProxies((TaskGroup) each);
|
||||
List<TaskElement> children = each.getChildren();
|
||||
|
|
@ -606,6 +608,21 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Forcing the load of all resources so the resources at planning state and
|
||||
* at allocations are the same
|
||||
*/
|
||||
private void forceLoadOfResourceAllocationsResources(TaskElement taskElement) {
|
||||
Set<ResourceAllocation<?>> resourceAllocations = taskElement
|
||||
.getResourceAllocations();
|
||||
for (ResourceAllocation<?> each : resourceAllocations) {
|
||||
each.getAssociatedResources();
|
||||
for (DerivedAllocation eachDerived : each.getDerivedAllocations()) {
|
||||
eachDerived.getResources();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void findChildrenWithQueryToAvoidProxies(TaskGroup group) {
|
||||
for (TaskElement eachTask : taskDAO.findChildrenOf(group)) {
|
||||
Hibernate.initialize(eachTask);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue