Fix bug refresh queues correctly after replacing a resource allocation
of a task for another which may be in a different queue FEA: ItEr66OTS08CorreccionsRecursosLimitantesItEr65OTS04
This commit is contained in:
parent
3be35bc1a9
commit
da187a59ec
4 changed files with 72 additions and 30 deletions
|
|
@ -140,7 +140,7 @@ public interface ILimitingResourceQueueModel {
|
|||
|
||||
boolean userCanRead(Order order, String loginName);
|
||||
|
||||
void replaceLimitingResourceQueueElement(
|
||||
List<LimitingResourceQueueElement> replaceLimitingResourceQueueElement(
|
||||
LimitingResourceQueueElement oldElement,
|
||||
LimitingResourceQueueElement newElement);
|
||||
|
||||
|
|
|
|||
|
|
@ -1045,10 +1045,12 @@ public class LimitingResourceQueueModel implements ILimitingResourceQueueModel {
|
|||
|
||||
@Override
|
||||
@Transactional(readOnly=true)
|
||||
public void replaceLimitingResourceQueueElement(
|
||||
public List<LimitingResourceQueueElement> replaceLimitingResourceQueueElement(
|
||||
LimitingResourceQueueElement oldElement,
|
||||
LimitingResourceQueueElement newElement) {
|
||||
|
||||
List<LimitingResourceQueueElement> result = new ArrayList<LimitingResourceQueueElement>();
|
||||
|
||||
boolean needToReassign = oldElement.hasDayAssignments();
|
||||
|
||||
limitingResourceQueueElementDAO.save(oldElement);
|
||||
|
|
@ -1057,7 +1059,7 @@ public class LimitingResourceQueueModel implements ILimitingResourceQueueModel {
|
|||
queuesState.replaceLimitingResourceQueueElement(oldElement, newElement);
|
||||
|
||||
if (needToReassign) {
|
||||
assignLimitingResourceQueueElement(newElement);
|
||||
result.addAll(assignLimitingResourceQueueElement(newElement));
|
||||
}
|
||||
HashSet<LimitingResourceQueueDependency> dependencies = new HashSet<LimitingResourceQueueDependency>();
|
||||
dependencies.addAll(newElement.getDependenciesAsOrigin());
|
||||
|
|
@ -1065,6 +1067,8 @@ public class LimitingResourceQueueModel implements ILimitingResourceQueueModel {
|
|||
toBeSavedDependencies.put(newElement, dependencies);
|
||||
|
||||
markAsModified(newElement);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,10 @@ import static org.navalplanner.web.I18nHelper._;
|
|||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
|
|
@ -41,7 +44,6 @@ import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueue
|
|||
import org.navalplanner.business.resources.entities.Criterion;
|
||||
import org.navalplanner.business.resources.entities.LimitingResourceQueue;
|
||||
import org.navalplanner.business.resources.entities.Resource;
|
||||
import org.navalplanner.web.common.Util;
|
||||
import org.navalplanner.web.limitingresources.LimitingResourcesPanel.IToolbarCommand;
|
||||
import org.navalplanner.web.planner.order.BankHolidaysMarker;
|
||||
import org.navalplanner.web.planner.taskedition.EditTaskController;
|
||||
|
|
@ -325,41 +327,71 @@ public class LimitingResourcesController extends GenericForwardComposer {
|
|||
if (editTaskController.getStatus() == Messagebox.OK) {
|
||||
|
||||
// Update resource allocation for element
|
||||
LimitingResourceQueueElement newElement = task.getResourceAllocation().getLimitingResourceQueueElement();
|
||||
LimitingResourceQueueElement newElement = copyFrom(oldElement,
|
||||
getQueueElementFrom(task));
|
||||
|
||||
newElement.setEarlierStartDateBecauseOfGantt(oldElement.getEarlierStartDateBecauseOfGantt());
|
||||
newElement.setResourceAllocation(task.getResourceAllocation());
|
||||
// Replace old limiting resource with new one
|
||||
LimitingResourceQueue oldQueue = oldElement.getLimitingResourceQueue();
|
||||
List<LimitingResourceQueueElement> modified = limitingResourceQueueModel
|
||||
.replaceLimitingResourceQueueElement(oldElement,
|
||||
newElement);
|
||||
|
||||
|
||||
Set<LimitingResourceQueueDependency> outgoingDependencies = oldElement.getDependenciesAsOrigin();
|
||||
Set<LimitingResourceQueueDependency> incomingDependencies = oldElement.getDependenciesAsDestiny();
|
||||
|
||||
// Update dependencies
|
||||
for (LimitingResourceQueueDependency each: outgoingDependencies) {
|
||||
each.setOrigin(newElement);
|
||||
newElement.add(each);
|
||||
// Refresh modified queues
|
||||
Set<LimitingResourceQueue> toRefreshQueues = new HashSet<LimitingResourceQueue>();
|
||||
toRefreshQueues.addAll(getQueuesOf(modified));
|
||||
if (oldQueue != null) {
|
||||
toRefreshQueues.add(oldQueue);
|
||||
}
|
||||
for (LimitingResourceQueueDependency each: incomingDependencies) {
|
||||
each.setDestiny(newElement);
|
||||
newElement.add(each);
|
||||
}
|
||||
|
||||
LimitingResourceQueue queue = oldElement.getLimitingResourceQueue();
|
||||
limitingResourceQueueModel.replaceLimitingResourceQueueElement(oldElement, newElement);
|
||||
if (newElement.getLimitingResourceQueue() != null) {
|
||||
limitingResourcesPanel.removeQueueElementFrom(queue, oldElement);
|
||||
limitingResourcesPanel.appendQueueElementToQueue(newElement);
|
||||
|
||||
limitingResourcesPanel.refreshQueue(queue);
|
||||
limitingResourcesPanel.refreshQueue(newElement.getLimitingResourceQueue());
|
||||
}
|
||||
Util.reloadBindings(gridUnassignedLimitingResourceQueueElements);
|
||||
limitingResourcesPanel.refreshQueues(toRefreshQueues);
|
||||
}
|
||||
} catch (SuspendNotAllowedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private LimitingResourceQueueElement getQueueElementFrom(Task task) {
|
||||
return task.getResourceAllocation().getLimitingResourceQueueElement();
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies earliestStartDateBecauseOfGantt and dependencies from source to dest
|
||||
*
|
||||
* @param source
|
||||
* @param dest
|
||||
* @return
|
||||
*/
|
||||
private LimitingResourceQueueElement copyFrom(
|
||||
LimitingResourceQueueElement source,
|
||||
LimitingResourceQueueElement dest) {
|
||||
|
||||
dest.setEarlierStartDateBecauseOfGantt(source
|
||||
.getEarlierStartDateBecauseOfGantt());
|
||||
|
||||
for (LimitingResourceQueueDependency each : source
|
||||
.getDependenciesAsOrigin()) {
|
||||
each.setOrigin(dest);
|
||||
dest.add(each);
|
||||
}
|
||||
for (LimitingResourceQueueDependency each : source
|
||||
.getDependenciesAsDestiny()) {
|
||||
each.setDestiny(dest);
|
||||
dest.add(each);
|
||||
}
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
private Set<LimitingResourceQueue> getQueuesOf(
|
||||
List<LimitingResourceQueueElement> modified) {
|
||||
|
||||
Set<LimitingResourceQueue> result = new HashSet<LimitingResourceQueue>();
|
||||
|
||||
for (LimitingResourceQueueElement each: modified) {
|
||||
result.add(each.getLimitingResourceQueue());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private EditTaskController getEditController(Window window) {
|
||||
return (EditTaskController) editTaskWindow.getVariable("editController", true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -408,6 +408,12 @@ public class LimitingResourcesPanel extends HtmlMacroComponent {
|
|||
dependencyList.addDependenciesFor(element);
|
||||
}
|
||||
|
||||
public void refreshQueues(Set<LimitingResourceQueue> queues) {
|
||||
for (LimitingResourceQueue each: queues) {
|
||||
refreshQueue(each);
|
||||
}
|
||||
}
|
||||
|
||||
public void refreshQueue(LimitingResourceQueue queue) {
|
||||
dependencyList.removeDependenciesFor(queue);
|
||||
queueListComponent.refreshQueue(queue);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue