ItEr29S14ProcuraOrganizacionsTraballo: Filter OrderElements by label
This commit is contained in:
parent
4d54f4a47c
commit
65e89d6f3e
6 changed files with 129 additions and 2 deletions
|
|
@ -23,6 +23,7 @@ package org.navalplanner.web.orders;
|
|||
import java.util.List;
|
||||
|
||||
import org.navalplanner.business.common.exceptions.ValidationException;
|
||||
import org.navalplanner.business.labels.entities.Label;
|
||||
import org.navalplanner.business.orders.entities.IOrderLineGroup;
|
||||
import org.navalplanner.business.orders.entities.Order;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
|
|
@ -64,4 +65,5 @@ public interface IOrderModel {
|
|||
|
||||
void convertToScheduleAndSave(Order order);
|
||||
|
||||
void addLabelPredicate(Label label);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
package org.navalplanner.web.orders;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Diego Pino Garcia <dpino@igalia.com>
|
||||
*
|
||||
*/
|
||||
public interface IPredicate {
|
||||
|
||||
boolean complays(Object object);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
package org.navalplanner.web.orders;
|
||||
|
||||
import org.navalplanner.business.labels.entities.Label;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Diego Pino Garcia <dpino@igalia.com>
|
||||
*
|
||||
*/
|
||||
public class LabelOrderElementPredicate implements IPredicate {
|
||||
|
||||
Label label;
|
||||
|
||||
public LabelOrderElementPredicate(Label label) {
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean complays(Object object) {
|
||||
final OrderElement orderElement = (OrderElement) object;
|
||||
for (Label label : orderElement.getLabels()) {
|
||||
if (equalsLabel(label)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean equalsLabel(Label label) {
|
||||
return (this.label.getName().equals(label.getName()) && this.label
|
||||
.getType().getName().equals(label.getType().getName()));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -34,6 +34,7 @@ import org.navalplanner.business.orders.entities.Order;
|
|||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
import org.navalplanner.business.orders.entities.OrderLine;
|
||||
import org.navalplanner.web.common.Util;
|
||||
import org.navalplanner.web.common.components.bandboxsearch.BandboxSearch;
|
||||
import org.zkoss.zk.ui.Component;
|
||||
import org.zkoss.zk.ui.WrongValueException;
|
||||
import org.zkoss.zk.ui.event.DropEvent;
|
||||
|
|
@ -42,6 +43,7 @@ import org.zkoss.zk.ui.event.EventListener;
|
|||
import org.zkoss.zk.ui.event.Events;
|
||||
import org.zkoss.zk.ui.util.GenericForwardComposer;
|
||||
import org.zkoss.zul.Button;
|
||||
import org.zkoss.zul.Combobox;
|
||||
import org.zkoss.zul.Constraint;
|
||||
import org.zkoss.zul.Datebox;
|
||||
import org.zkoss.zul.Intbox;
|
||||
|
|
@ -61,6 +63,10 @@ import org.zkoss.zul.api.Tree;
|
|||
*/
|
||||
public class OrderElementTreeController extends GenericForwardComposer {
|
||||
|
||||
private Combobox cbFilterType;
|
||||
|
||||
private BandboxSearch bdFilter;
|
||||
|
||||
private Tree tree;
|
||||
|
||||
private OrderElementTreeitemRenderer renderer = new OrderElementTreeitemRenderer();
|
||||
|
|
@ -521,4 +527,19 @@ public class OrderElementTreeController extends GenericForwardComposer {
|
|||
}
|
||||
}
|
||||
|
||||
private final String FILTER_BY_LABEL = _("Filter by Label");
|
||||
|
||||
/**
|
||||
*
|
||||
* @param event
|
||||
*/
|
||||
public void onApplyFilter(Event event) {
|
||||
if (FILTER_BY_LABEL.equals(cbFilterType.getValue())) {
|
||||
org.navalplanner.business.labels.entities.Label label = (org.navalplanner.business.labels.entities.Label) bdFilter
|
||||
.getSelectedElement();
|
||||
orderModel.addLabelPredicate(label);
|
||||
Util.reloadBindings(tree);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import java.util.Date;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.hibernate.validator.ClassValidator;
|
||||
|
|
@ -36,7 +37,10 @@ import org.navalplanner.business.advance.entities.DirectAdvanceAssignment;
|
|||
import org.navalplanner.business.advance.entities.IndirectAdvanceAssignment;
|
||||
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.navalplanner.business.common.exceptions.ValidationException;
|
||||
import org.navalplanner.business.labels.daos.ILabelDAO;
|
||||
import org.navalplanner.business.labels.entities.Label;
|
||||
import org.navalplanner.business.orders.daos.IOrderDAO;
|
||||
import org.navalplanner.business.orders.daos.IOrderElementDAO;
|
||||
import org.navalplanner.business.orders.entities.HoursGroup;
|
||||
import org.navalplanner.business.orders.entities.IOrderLineGroup;
|
||||
import org.navalplanner.business.orders.entities.Order;
|
||||
|
|
@ -91,6 +95,12 @@ public class OrderModel implements IOrderModel {
|
|||
@Autowired
|
||||
private ITaskElementDAO taskElementDAO;
|
||||
|
||||
@Autowired
|
||||
private ILabelDAO labelDAO;
|
||||
|
||||
@Autowired
|
||||
private IOrderElementDAO orderElementDAO;
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<Order> getOrders() {
|
||||
|
|
@ -201,11 +211,51 @@ public class OrderModel implements IOrderModel {
|
|||
this.order = order;
|
||||
}
|
||||
|
||||
private IPredicate predicate;
|
||||
|
||||
public IPredicate getPredicate() {
|
||||
return predicate;
|
||||
}
|
||||
|
||||
public void setPredicate(IPredicate predicate) {
|
||||
this.predicate = predicate;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public OrderElementTreeModel getOrderElementTreeModel() {
|
||||
if (predicate != null) {
|
||||
return applyPredicate();
|
||||
}
|
||||
return orderElementTreeModel;
|
||||
}
|
||||
|
||||
private OrderElementTreeModel applyPredicate() {
|
||||
for (OrderElement orderElement : order.getOrderElements()) {
|
||||
reattachOrderElement(orderElement);
|
||||
initializeLabels(orderElement.getLabels());
|
||||
if (predicate.complays(orderElement)) {
|
||||
order.remove(orderElement);
|
||||
}
|
||||
}
|
||||
return new OrderElementTreeModel(order);
|
||||
}
|
||||
|
||||
private void reattachOrderElement(OrderElement orderElement) {
|
||||
orderElementDAO.save(orderElement);
|
||||
}
|
||||
|
||||
private void initializeLabels(Set<Label> labels) {
|
||||
for (Label label : labels) {
|
||||
initializeLabel(label);
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeLabel(Label label) {
|
||||
label.getName();
|
||||
label.getType().getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public IOrderElementModel getOrderElementModel(OrderElement orderElement) {
|
||||
|
|
@ -291,4 +341,9 @@ public class OrderModel implements IOrderModel {
|
|||
taskElementDAO.save(convertToInitialSchedule(order));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addLabelPredicate(Label label) {
|
||||
predicate = new LabelOrderElementPredicate(label);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,10 +38,12 @@
|
|||
<vbox>
|
||||
<hbox>
|
||||
<!-- Filter by label -->
|
||||
<combobox>
|
||||
<combobox id="cbFilterType">
|
||||
<comboitem label="Filter by Label" />
|
||||
</combobox>
|
||||
<bandboxSearch id="bdLabels" finder="LabelBandboxFinder" />
|
||||
<bandboxSearch id="bdFilter" finder="LabelBandboxFinder" />
|
||||
<button label="${i18n:_('Filter')}" style="margin-top: -4px"
|
||||
onClick="orderElementTreeController.onApplyFilter(event)"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
<vbox>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue