ItEr58S10CUAsignacionRecursosLimitantesItEr57S11: Unschedule limiting task

This commit is contained in:
Diego Pino Garcia 2010-05-12 11:48:39 +02:00 committed by Javier Moran Rua
parent 46ed8f5ea5
commit 841cad0457
7 changed files with 96 additions and 41 deletions

View file

@ -566,6 +566,10 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
setOriginalTotalAssigment(getAssignedHours());
}
public void removeLimitingDayAssignments() {
allocateLimitingDayAssignments(Collections.<T>emptyList());
}
public void allocateLimitingDayAssignments(List<T> assignments) {
assert isLimiting();
resetAssignmentsTo(assignments);

View file

@ -109,4 +109,6 @@ public interface ILimitingResourceQueueModel {
boolean userCanRead(Order order, String loginName);
void unschedule(LimitingResourceQueueElement element);
}

View file

@ -202,7 +202,7 @@ public class LimitingResourceQueueModel implements ILimitingResourceQueueModel {
private void initializeCalendarIfAny(Resource resource) {
if (resource != null) {
resourceDAO.reattach(resource);
resource.getName();
initializeCalendarIfAny(resource.getCalendar());
}
}
@ -466,6 +466,20 @@ public class LimitingResourceQueueModel implements ILimitingResourceQueueModel {
return null;
}
private LimitingResourceQueue retrieveQueueFromModel(LimitingResourceQueue queue) {
return findQueue(limitingResourceQueues, queue);
}
private LimitingResourceQueue findQueue(List<LimitingResourceQueue> queues,
LimitingResourceQueue queue) {
for (LimitingResourceQueue each : limitingResourceQueues) {
if (each.getId().equals(queue.getId())) {
return each;
}
}
return null;
}
private LimitingResourceQueueElement retrieveQueueElementFromModel(
LimitingResourceQueueElement element) {
return findQueueElement(unassignedLimitingResourceQueueElements,
@ -591,4 +605,22 @@ public class LimitingResourceQueueModel implements ILimitingResourceQueueModel {
taskDAO.save(task);
}
@Override
public void unschedule(LimitingResourceQueueElement element) {
LimitingResourceQueue queue = retrieveQueueFromModel(element.getLimitingResourceQueue());
queue.removeLimitingResourceQueueElement(element);
// Set as unassigned element
element.setLimitingResourceQueue(null);
element.setStartDate(null);
element.setStartHour(0);
element.setEndDate(null);
element.setEndHour(0);
element.getResourceAllocation().removeLimitingDayAssignments();
unassignedLimitingResourceQueueElements.add(element);
toBeSaved.add(element);
}
}

View file

@ -34,6 +34,7 @@ import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.planner.entities.GenericResourceAllocation;
import org.navalplanner.business.planner.entities.LimitingResourceQueueElement;
import org.navalplanner.business.planner.entities.Task;
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;
@ -51,6 +52,7 @@ import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.util.Composer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Div;
import org.zkoss.zul.Grid;
import org.zkoss.zul.Label;
import org.zkoss.zul.Messagebox;
@ -161,19 +163,8 @@ public class LimitingResourcesController implements Composer {
SeveralModificators.create(new BankHolidaysMarker()), parent);
}
private void updateLimitingResourceQueues() {
limitingResourcesPanel
.resetLimitingResourceQueues(limitingResourceQueueModel
.getLimitingResourceQueues());
limitingResourcesPanel.reloadLimitingResourcesList();
}
private LimitingResourcesPanel buildLimitingResourcesPanel() {
LimitingResourcesPanel result = new LimitingResourcesPanel(
limitingResourceQueueModel.getLimitingResourceQueues(),
timeTracker);
result.setVariable("limitingResourcesController", this, true);
return result;
return new LimitingResourcesPanel(this, timeTracker);
}
/**
@ -328,7 +319,7 @@ public class LimitingResourcesController implements Composer {
limitingResourceQueueModel
.assignLimitingResourceQueueElement(element);
Util.reloadBindings(gridUnassignedLimitingResourceQueueElements);
updateLimitingResourceQueues();
limitingResourcesPanel.reloadLimitingResourcesList();
}
private Checkbox automaticQueueing(
@ -344,4 +335,14 @@ public class LimitingResourcesController implements Composer {
}
public List<LimitingResourceQueue> getLimitingResourceQueues() {
return limitingResourceQueueModel.getLimitingResourceQueues();
}
public void unschedule(QueueTask task) {
limitingResourceQueueModel.unschedule(task.getLimitingResourceQueueElement());
Util.reloadBindings(gridUnassignedLimitingResourceQueueElements);
task.detach();
}
}

View file

@ -20,9 +20,8 @@
package org.navalplanner.web.limitingresources;
import static org.zkoss.ganttz.i18n.I18nHelper._;
import static org.navalplanner.web.I18nHelper._;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -61,14 +60,14 @@ public class LimitingResourcesPanel extends HtmlMacroComponent {
public String getImage();
}
private LimitingResourcesController limitingResourcesController;
private TimeTrackerComponent timeTrackerComponent;
private LimitingResourcesLeftPane leftPane;
private QueueListComponent queueListComponent;
private List<LimitingResourceQueue> limitingResourceQueues = new ArrayList<LimitingResourceQueue>();
private MutableTreeModel<LimitingResourceQueue> treeModel;
private TimeTracker timeTracker;
@ -84,33 +83,46 @@ public class LimitingResourcesPanel extends HtmlMacroComponent {
private LimitingDependencyList dependencyList;
public LimitingResourcesPanel(List<LimitingResourceQueue> groups,
public LimitingResourcesPanel(LimitingResourcesController limitingResourcesController,
TimeTracker timeTracker) {
init(groups, timeTracker);
init(limitingResourcesController, timeTracker);
}
public void init(List<LimitingResourceQueue> groups, TimeTracker timeTracker) {
limitingResourceQueues.addAll(groups);
public void init(LimitingResourcesController limitingResourcesController,
TimeTracker timeTracker) {
this.limitingResourcesController = limitingResourcesController;
this.timeTracker = timeTracker;
this.setVariable("limitingResourcesController",
limitingResourcesController, true);
treeModel = createModelForTree();
timeTrackerComponent = timeTrackerForResourcesLoadPanel(timeTracker);
queueListComponent = new QueueListComponent(timeTracker,
treeModel);
leftPane = new LimitingResourcesLeftPane(treeModel,
queueListComponent);
registerNeededScripts();
}
public void resetLimitingResourceQueues(List<LimitingResourceQueue> queues) {
limitingResourceQueues = new ArrayList<LimitingResourceQueue>();
limitingResourceQueues.addAll(queues);
}
public void reloadLimitingResourcesList() {
queueListComponent.setModel(createModelForTree());
queueListComponent.invalidate();
}
private MutableTreeModel<LimitingResourceQueue> createModelForTree() {
MutableTreeModel<LimitingResourceQueue> result = MutableTreeModel
.create(LimitingResourceQueue.class);
for (LimitingResourceQueue LimitingResourceQueue : getLimitingResourceQueues()) {
result.addToRoot(LimitingResourceQueue);
}
return result;
}
private List<LimitingResourceQueue> getLimitingResourceQueues() {
return limitingResourcesController.getLimitingResourceQueues();
}
public ListModel getFilters() {
String[] filters = new String[] { filterResources, filterCriterions };
return new SimpleListModel(filters);
@ -192,16 +204,6 @@ public class LimitingResourcesPanel extends HtmlMacroComponent {
.retrieve();
}
private MutableTreeModel<LimitingResourceQueue> createModelForTree() {
MutableTreeModel<LimitingResourceQueue> result = MutableTreeModel
.create(LimitingResourceQueue.class);
for (LimitingResourceQueue LimitingResourceQueue : this.limitingResourceQueues) {
result.addToRoot(LimitingResourceQueue);
}
return result;
}
private TimeTrackerComponent timeTrackerForResourcesLoadPanel(
TimeTracker timeTracker) {
return new TimeTrackerComponent(timeTracker) {
@ -282,5 +284,8 @@ public class LimitingResourcesPanel extends HtmlMacroComponent {
};
}
public void unschedule(QueueTask task) {
limitingResourcesController.unschedule(task);
}
}
}

View file

@ -37,6 +37,7 @@ import org.zkoss.ganttz.timetracker.zoom.IZoomLevelChangedListener;
import org.zkoss.ganttz.timetracker.zoom.ZoomLevel;
import org.zkoss.ganttz.util.MenuBuilder;
import org.zkoss.ganttz.util.MenuBuilder.ItemAction;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.ext.AfterCompose;
import org.zkoss.zul.impl.XulElement;
@ -132,9 +133,19 @@ public class QueueComponent extends XulElement implements
}
}
// FIXME: Implement real unnasign operation
private void unnasign(QueueTask choosen) {
choosen.detach();
final LimitingResourcesPanel panel = getLimitingResourcesPanel(choosen.getParent());
panel.unschedule(choosen);
}
private LimitingResourcesPanel getLimitingResourcesPanel(Component comp) {
if (comp == null) {
return null;
}
if (comp instanceof LimitingResourcesPanel) {
return (LimitingResourcesPanel) comp;
}
return getLimitingResourcesPanel(comp.getParent());
}
private static QueueTask createDivForQueueElement(IDatesMapper datesMapper,

View file

@ -64,7 +64,6 @@ public class QueueTask extends Div {
+ taskUid + "')");
}
});
}
public LocalDate getStart() {
@ -83,4 +82,5 @@ public class QueueTask extends Div {
public LimitingResourceQueueElement getLimitingResourceQueueElement() {
return element;
}
}