ItEr56S11CUEscaladoPantallaCargaRecursosEmpresaItEr55S15: Integrated a Bandbox to filter workers individually in the Overall resources load page.
This commit is contained in:
parent
7faf495cfe
commit
590f2385a1
5 changed files with 88 additions and 0 deletions
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue