ItEr56S11CUEscaladoPantallaCargaRecursosEmpresaItEr55S15: Integrated a Bandbox to filter workers individually in the Overall resources load page.

This commit is contained in:
Jacobo Aragunde Pérez 2010-04-29 11:48:40 +02:00 committed by Javier Moran Rua
parent 7faf495cfe
commit 590f2385a1
5 changed files with 88 additions and 0 deletions

View file

@ -279,6 +279,11 @@ public class ResourcesLoadPanel extends HtmlMacroComponent {
TimeTrackerComponent timeTrackerHeader = createTimeTrackerHeader();
getFellow("insertionPointTimetracker").appendChild(timeTrackerHeader);
Component additionalFilter = (Component) getVariable("additionalFilter", true);
if(additionalFilter != null) {
getFellow("additionalFilterInsertionPoint").appendChild(additionalFilter);
}
timeTrackerHeader.afterCompose();
timeTrackerComponent.afterCompose();
listZoomLevels = (Listbox) getFellow("listZoomLevels");

View file

@ -47,6 +47,8 @@ resourcesLoadPanel = self;
${i18n:_('Show resources between')}:
<combobox id="filterByNameCombo"
onChange="resourcesLoadPanel.onSelectFilterByName(self.selectedItemApi.value)" />
<separator/>
<hbox id="additionalFilterInsertionPoint" />
</hbox>
</north>

View file

@ -24,6 +24,7 @@ import java.util.List;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.resources.entities.Resource;
import org.zkoss.ganttz.data.resourceload.LoadTimeLine;
import org.zkoss.ganttz.timetracker.zoom.ZoomLevel;
import org.zkoss.ganttz.util.Interval;
@ -43,4 +44,6 @@ public interface IResourceLoadModel {
Order getOrderByTask(TaskElement task);
boolean userCanRead(Order order, String loginName);
void setResourcesToShow(List<Resource> resourcesList);
}

View file

@ -29,6 +29,9 @@ import java.util.List;
import org.apache.commons.lang.Validate;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.web.common.components.bandboxsearch.BandboxMultipleSearch;
import org.navalplanner.web.common.components.finders.FilterPair;
import org.navalplanner.web.planner.order.BankHolidaysMarker;
import org.navalplanner.web.planner.order.IOrderPlanningGate;
import org.navalplanner.web.security.SecurityUtils;
@ -44,7 +47,12 @@ import org.zkoss.ganttz.resourceload.ResourcesLoadPanel.IToolbarCommand;
import org.zkoss.ganttz.timetracker.TimeTracker;
import org.zkoss.ganttz.timetracker.zoom.SeveralModificators;
import org.zkoss.ganttz.timetracker.zoom.ZoomLevel;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.util.Composer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.Messagebox;
/**
@ -74,6 +82,8 @@ public class ResourceLoadController implements Composer {
private IOrderPlanningGate planningControllerEntryPoints;
private BandboxMultipleSearch bandBox;
public ResourceLoadController() {
}
@ -165,13 +175,54 @@ public class ResourceLoadController implements Composer {
if (resourcesLoadPanel != null) {
resourcesLoadPanel.init(resourceLoadModel.getLoadTimeLines(),
timeTracker);
if(bandBox != null && resourcesLoadPanel.getFilter()) {
//if the worker bandbox filter is active, we disable the name filter
resourcesLoadPanel.setNameFilterDisabled(
!bandBox.getSelectedElements().isEmpty());
}
} else {
resourcesLoadPanel = new ResourcesLoadPanel(resourceLoadModel
.getLoadTimeLines(), timeTracker, parent);
if(filterBy == null) {
addWorkersBandbox();
}
addListeners();
}
}
private void addWorkersBandbox() {
bandBox = new BandboxMultipleSearch();
bandBox.setId("workerBandboxMultipleSearch");
bandBox.setWidthBandbox("285px");
bandBox.setWidthListbox("300px");
bandBox.setFinder("workerMultipleFiltersFinder");
bandBox.afterCompose();
Button button = new Button();
button.setImage("/common/img/ico_filter.png");
button.setTooltip(_("Filter by worker"));
button.addEventListener(Events.ON_CLICK, new EventListener() {
@Override
@SuppressWarnings("unchecked")
public void onEvent(Event event) throws Exception {
List<FilterPair> filterPairList = bandBox.getSelectedElements();
List<Resource> workersList = new ArrayList<Resource>();
for(FilterPair filterPair : filterPairList) {
workersList.add((Resource)filterPair.getValue());
}
resourceLoadModel.setResourcesToShow(workersList);
reload(resourcesLoadPanel.getFilter());
}
});
Hbox hbox = new Hbox();
hbox.appendChild(bandBox);
hbox.appendChild(button);
hbox.setAlign("center");
resourcesLoadPanel.setVariable("additionalFilter", hbox, true);
}
public void filterBy(Order order) {
this.filterBy = order;
}

View file

@ -103,6 +103,8 @@ public class ResourceLoadModel implements IResourceLoadModel {
private boolean filterByResources = true;
private List<Resource> resourcesToShowList = new ArrayList<Resource>();
@Override
@Transactional(readOnly = true)
public void initGlobalView(boolean filterByResources) {
@ -198,6 +200,10 @@ public class ResourceLoadModel implements IResourceLoadModel {
}
private List<Resource> resourcesToShow() {
if(!resourcesToShowList.isEmpty()) {
return getResourcesToShowReattached();
}
// if we haven't manually specified some resources to show, we load them
if (filter()) {
return resourcesForActiveTasks();
} else {
@ -649,6 +655,27 @@ public class ResourceLoadModel implements IResourceLoadModel {
.getStart()), new LocalDate(interval.getFinish()));
}
@Override
public void setResourcesToShow(List<Resource> resourcesList) {
this.resourcesToShowList.clear();
this.resourcesToShowList.addAll(resourcesList);
}
private List<Resource> getResourcesToShowReattached() {
List<Resource> list = new ArrayList<Resource>();
for(Resource worker : resourcesToShowList) {
try {
//for some reason, resourcesDAO.reattach(worker) doesn't work
//and we have to retrieve them again with find
list.add(resourcesDAO.find(worker.getId()));
}
catch(InstanceNotFoundException e) {
//maybe it was removed by another transaction
//we just ignore the exception to not show the Resource
}
}
return list;
}
}
class PeriodsBuilder {