ItEr45S09RFNavegacionOrganizacionTraballoItEr44S15: Applied filtering to company view scheduling
This commit is contained in:
parent
51dbc2e1dd
commit
4deda900aa
6 changed files with 112 additions and 30 deletions
|
|
@ -7,18 +7,19 @@ planner = self;
|
|||
<borderlayout sclass="plannerlayout" width="auto">
|
||||
<north height="30px" border="0">
|
||||
<hbox align="center" id="toolbar" sclass="toolbar-box">
|
||||
|
||||
<!-- Commands -->
|
||||
<button id="btnPrint" onClick="planner.print()"
|
||||
image="/common/img/ico_print.png"
|
||||
tooltiptext="${i18n:_('Print')}" />
|
||||
<separator/>
|
||||
|
||||
<!-- Visualization modes -->
|
||||
<label>${i18n:_('Zoom level')}:</label>
|
||||
<listbox mold="select" rows="1"
|
||||
model="${planner.zoomLevels}"
|
||||
onSelect="planner.setZoomLevel(self.selectedItem.value);" >
|
||||
</listbox>
|
||||
|
||||
<button id="showCriticalPath" onClick="planner.showCriticalPath();"
|
||||
image="/common/img/ico_criticalpath.png"
|
||||
tooltiptext="${i18n:_('Show/Hide Critical path')}" />
|
||||
|
|
@ -28,22 +29,10 @@ planner = self;
|
|||
<button id="showAllResources" onClick="planner.showAllResources();"
|
||||
image="/common/img/ico_resources.png"
|
||||
tooltiptext="${i18n:_('Show all resources')}" sclass="planner-command show-resources" />
|
||||
<separator />
|
||||
|
||||
<!-- Filtering -->
|
||||
<separator/>
|
||||
<label>${i18n:_('Filter')}:</label>
|
||||
<combobox>
|
||||
<comboitem label="Orders"
|
||||
description="Show full orders and company view" />
|
||||
<comboitem label="Tasks"
|
||||
description="Tasks inside orders or filtered" />
|
||||
</combobox>
|
||||
<combobox>
|
||||
<comboitem label="Filter by Label" />
|
||||
<comboitem label="Filter by criterion" />
|
||||
<comboitem label="Filter by resources" />
|
||||
<comboitem label="Critical way" />
|
||||
</combobox>
|
||||
<textbox/>
|
||||
<vbox id="orderFilter"/>
|
||||
<separator />
|
||||
|
||||
</hbox>
|
||||
|
|
|
|||
|
|
@ -207,6 +207,8 @@ public class OrderModel implements IOrderModel {
|
|||
|
||||
private void initializeOrders(List<Order> list) {
|
||||
for (Order order : list) {
|
||||
// Remove or not?
|
||||
// orderDAO.reattachUnmodifiedEntity(order);
|
||||
if (order.getCustomer() != null) {
|
||||
order.getCustomer().getName();
|
||||
}
|
||||
|
|
@ -686,7 +688,6 @@ public class OrderModel implements IOrderModel {
|
|||
public List<Order> getFilterOrders(OrderPredicate predicate) {
|
||||
List<Order> filterOrderList = new ArrayList<Order>();
|
||||
for (Order order : orderList) {
|
||||
orderDAO.reattachUnmodifiedEntity(order);
|
||||
if (predicate.accepts(order)) {
|
||||
filterOrderList.add(order);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,22 +21,31 @@
|
|||
package org.navalplanner.web.planner.company;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.navalplanner.web.common.components.bandboxsearch.BandboxMultipleSearch;
|
||||
import org.navalplanner.web.common.components.finders.FilterPair;
|
||||
import org.navalplanner.web.orders.OrderPredicate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.zkoss.ganttz.Planner;
|
||||
import org.zkoss.ganttz.extensions.ICommandOnTask;
|
||||
import org.zkoss.ganttz.resourceload.ScriptsRequiredByResourceLoadPanel;
|
||||
import org.zkoss.ganttz.timetracker.zoom.ZoomLevel;
|
||||
import org.zkoss.ganttz.util.OnZKDesktopRegistry;
|
||||
import org.zkoss.ganttz.util.script.IScriptsRegister;
|
||||
import org.zkoss.zk.ui.Component;
|
||||
import org.zkoss.zk.ui.Executions;
|
||||
import org.zkoss.zk.ui.util.Composer;
|
||||
import org.zkoss.zul.Checkbox;
|
||||
import org.zkoss.zul.Datebox;
|
||||
import org.zkoss.zul.Vbox;
|
||||
|
||||
/**
|
||||
* Controller for company planning view. Representation of company orders in the
|
||||
|
|
@ -44,7 +53,7 @@ import org.zkoss.zk.ui.util.Composer;
|
|||
*
|
||||
* @author Manuel Rego Casasnovas <mrego@igalia.com>
|
||||
*/
|
||||
@Component
|
||||
@org.springframework.stereotype.Component
|
||||
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
|
||||
public class CompanyPlanningController implements Composer{
|
||||
|
||||
|
|
@ -55,6 +64,13 @@ public class CompanyPlanningController implements Composer{
|
|||
|
||||
private Planner planner;
|
||||
|
||||
private Vbox orderFilter;
|
||||
private Vbox filter;
|
||||
private Datebox filterStartDate;
|
||||
private Datebox filterFinishDate;
|
||||
private BandboxMultipleSearch bdFilters;
|
||||
private Checkbox checkIncludeOrderElements;
|
||||
|
||||
private ICommandOnTask<TaskElement> doubleClickCommand;
|
||||
|
||||
private Map<String, String[]> parameters;
|
||||
|
|
@ -82,12 +98,29 @@ public class CompanyPlanningController implements Composer{
|
|||
planner.setAreContainersExpandedByDefault(Planner
|
||||
.guessContainersExpandedByDefault(parameters));
|
||||
|
||||
orderFilter = (Vbox) planner.getFellow("orderFilter");
|
||||
// Configuration of the order filter
|
||||
Component filterComponent = Executions.createComponents(
|
||||
"/orders/_orderFilter.zul", orderFilter,
|
||||
new HashMap<String, String>());
|
||||
filterComponent.setVariable("controller", this, true);
|
||||
filterStartDate = (Datebox) filterComponent
|
||||
.getFellow("filterStartDate");
|
||||
filterFinishDate = (Datebox) filterComponent
|
||||
.getFellow("filterFinishDate");
|
||||
bdFilters = (BandboxMultipleSearch) filterComponent
|
||||
.getFellow("bdFilters");
|
||||
checkIncludeOrderElements = (Checkbox) filterComponent
|
||||
.getFellow("checkIncludeOrderElements");
|
||||
filterComponent.setVisible(true);
|
||||
|
||||
}
|
||||
|
||||
public void setConfigurationForPlanner() {
|
||||
// Added predicate
|
||||
model
|
||||
.setConfigurationToPlanner(planner, additional,
|
||||
doubleClickCommand);
|
||||
doubleClickCommand, createPredicate());
|
||||
}
|
||||
|
||||
public void setAdditional(List<ICommandOnTask<TaskElement>> additional) {
|
||||
|
|
@ -105,4 +138,38 @@ public class CompanyPlanningController implements Composer{
|
|||
this.parameters = parameters;
|
||||
}
|
||||
|
||||
public void onApplyFilter() {
|
||||
OrderPredicate predicate = createPredicate();
|
||||
if (predicate != null) {
|
||||
filterByPredicate(predicate);
|
||||
} else {
|
||||
showAllOrders();
|
||||
}
|
||||
}
|
||||
|
||||
private OrderPredicate createPredicate() {
|
||||
List<FilterPair> listFilters = (List<FilterPair>) bdFilters
|
||||
.getSelectedElements();
|
||||
Date startDate = filterStartDate.getValue();
|
||||
Date finishDate = filterFinishDate.getValue();
|
||||
Boolean includeOrderElements = checkIncludeOrderElements.isChecked();
|
||||
|
||||
if (listFilters.isEmpty() && startDate == null && finishDate == null) {
|
||||
return null;
|
||||
}
|
||||
return new OrderPredicate(listFilters, startDate, finishDate,
|
||||
includeOrderElements);
|
||||
}
|
||||
|
||||
private void filterByPredicate(OrderPredicate predicate) {
|
||||
// Recalculate predicate
|
||||
model.setConfigurationToPlanner(planner, additional,
|
||||
doubleClickCommand, createPredicate());
|
||||
planner.invalidate();
|
||||
}
|
||||
|
||||
public void showAllOrders() {
|
||||
planner.invalidate();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ import org.navalplanner.business.users.daos.IUserDAO;
|
|||
import org.navalplanner.business.users.entities.User;
|
||||
import org.navalplanner.business.workreports.daos.IWorkReportLineDAO;
|
||||
import org.navalplanner.business.workreports.entities.WorkReportLine;
|
||||
import org.navalplanner.web.orders.OrderPredicate;
|
||||
import org.navalplanner.web.planner.ITaskElementAdapter;
|
||||
import org.navalplanner.web.planner.chart.Chart;
|
||||
import org.navalplanner.web.planner.chart.ChartFiller;
|
||||
|
|
@ -103,7 +104,6 @@ import org.zkoss.zul.Tabpanels;
|
|||
import org.zkoss.zul.Tabs;
|
||||
import org.zkoss.zul.Vbox;
|
||||
|
||||
|
||||
/**
|
||||
* Model for company planning view.
|
||||
*
|
||||
|
|
@ -177,8 +177,9 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel {
|
|||
@Transactional(readOnly = true)
|
||||
public void setConfigurationToPlanner(Planner planner,
|
||||
Collection<ICommandOnTask<TaskElement>> additional,
|
||||
ICommandOnTask<TaskElement> doubleClickCommand) {
|
||||
PlannerConfiguration<TaskElement> configuration = createConfiguration();
|
||||
ICommandOnTask<TaskElement> doubleClickCommand,
|
||||
OrderPredicate predicate) {
|
||||
PlannerConfiguration<TaskElement> configuration = createConfiguration(predicate);
|
||||
|
||||
Tabbox chartComponent = new Tabbox();
|
||||
chartComponent.setOrient("vertical");
|
||||
|
|
@ -496,8 +497,18 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel {
|
|||
}
|
||||
|
||||
private PlannerConfiguration<TaskElement> createConfiguration() {
|
||||
return createConfiguration(null);
|
||||
}
|
||||
|
||||
private PlannerConfiguration<TaskElement> createConfiguration(
|
||||
OrderPredicate predicate) {
|
||||
ITaskElementAdapter taskElementAdapter = getTaskElementAdapter();
|
||||
List<TaskElement> toShow = sortByStartDate(retainOnlyTopLevel());
|
||||
List<TaskElement> toShow;
|
||||
if (predicate != null) {
|
||||
toShow = sortByStartDate(retainOnlyTopLevel(predicate));
|
||||
} else {
|
||||
toShow = sortByStartDate(retainOnlyTopLevel(null));
|
||||
}
|
||||
forceLoadOfDependenciesCollections(toShow);
|
||||
forceLoadOfWorkingHours(toShow);
|
||||
forceLoadOfLabels(toShow);
|
||||
|
|
@ -522,9 +533,10 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel {
|
|||
return result;
|
||||
}
|
||||
|
||||
private List<TaskElement> retainOnlyTopLevel() {
|
||||
private List<TaskElement> retainOnlyTopLevel(OrderPredicate predicate) {
|
||||
List<TaskElement> result = new ArrayList<TaskElement>();
|
||||
User user;
|
||||
|
||||
try {
|
||||
user = userDAO.findByLoginName(SecurityUtils.getSessionUserLoginName());
|
||||
}
|
||||
|
|
@ -533,11 +545,16 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel {
|
|||
//anyway, if it happenned we return an empty list
|
||||
return result;
|
||||
}
|
||||
|
||||
List<Order> list = orderDAO.getOrdersByReadAuthorization(user);
|
||||
|
||||
for (Order order : list) {
|
||||
TaskGroup associatedTaskElement = order.getAssociatedTaskElement();
|
||||
|
||||
if (associatedTaskElement != null) {
|
||||
result.add(associatedTaskElement);
|
||||
if (predicate == null || predicate.accepts(order)) {
|
||||
result.add(associatedTaskElement);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ package org.navalplanner.web.planner.company;
|
|||
import java.util.Collection;
|
||||
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.navalplanner.web.orders.OrderPredicate;
|
||||
import org.zkoss.ganttz.Planner;
|
||||
import org.zkoss.ganttz.extensions.ICommandOnTask;
|
||||
|
||||
|
|
@ -40,4 +41,9 @@ public interface ICompanyPlanningModel {
|
|||
Collection<ICommandOnTask<TaskElement>> additional,
|
||||
ICommandOnTask<TaskElement> doubleClickCommand);
|
||||
|
||||
public void setConfigurationToPlanner(Planner planner,
|
||||
Collection<ICommandOnTask<TaskElement>> additional,
|
||||
ICommandOnTask<TaskElement> doubleClickCommand,
|
||||
OrderPredicate predicate);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<hbox align="center" style="margin-left:240px;">
|
||||
<!-- Filter by -->
|
||||
<label>Filter order:</label>
|
||||
<hbox align="center" sclass="filtering-area">
|
||||
<label value="${i18n:_('Filter by')}"
|
||||
tooltiptext="${i18n:_('Select required criteria set and press filter button')}"/>
|
||||
<bandboxMultipleSearch id="bdFilters" widthBandbox="285px" widthListbox="300px"
|
||||
finder="multipleFiltersFinder"/>
|
||||
<label value="${i18n:_('from')}"/>
|
||||
|
|
@ -8,7 +8,9 @@
|
|||
<label value="${i18n:_('to')}"/>
|
||||
<datebox id="filterFinishDate" constraint = "@{controller.checkConstraintFinishDate}"/>
|
||||
<label value="${i18n:_('include order elements')}"/>
|
||||
<checkbox id="checkIncludeOrderElements"/>
|
||||
<checkbox id="checkIncludeOrderElements"
|
||||
tooltiptext="${i18n:_('Apply filtering to order elements satisfying required critera')}" />
|
||||
<button label="${i18n:_('Filter')}" style="margin-top: -4px"
|
||||
tooltiptext="${i18n:_('Apply filtering to order elements satisfying required critera')}"
|
||||
onClick="controller.onApplyFilter()"/>
|
||||
</hbox>
|
||||
Loading…
Add table
Reference in a new issue