diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/ISchedulingProgressPerOrderModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/ISchedulingProgressPerOrderModel.java index 424bfa668..8518754fa 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/ISchedulingProgressPerOrderModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/ISchedulingProgressPerOrderModel.java @@ -40,8 +40,16 @@ public interface ISchedulingProgressPerOrderModel { AdvanceType advanceType, Date startingDate, Date endingDate, LocalDate referenceDate); + void init(); + List getOrders(); List getAdvanceTypes(); + void removeSelectedOrder(Order order); + + boolean addSelectedOrder(Order order); + + List getSelectedOrders(); + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/SchedulingProgressPerOrderController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/SchedulingProgressPerOrderController.java index cd142a55d..fa8da09cc 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/SchedulingProgressPerOrderController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/SchedulingProgressPerOrderController.java @@ -23,6 +23,7 @@ package org.navalplanner.web.reports; import static org.navalplanner.web.I18nHelper._; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -35,7 +36,9 @@ import org.apache.commons.lang.StringUtils; import org.joda.time.LocalDate; import org.navalplanner.business.advance.entities.AdvanceType; import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.web.common.Util; import org.navalplanner.web.common.components.ExtendedJasperreport; +import org.navalplanner.web.common.components.bandboxsearch.BandboxSearch; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.WrongValueException; import org.zkoss.zul.Datebox; @@ -43,9 +46,8 @@ import org.zkoss.zul.Listbox; import org.zkoss.zul.Listitem; /** - * * @author Diego Pino Garcia - * + * @author Susana Montes Pedreira */ public class SchedulingProgressPerOrderController extends NavalplannerReportController { @@ -63,23 +65,62 @@ public class SchedulingProgressPerOrderController extends NavalplannerReportCont private Datebox endingDate; + private BandboxSearch bdOrders; + @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); comp.setVariable("controller", this, true); lbAdvanceType.setSelectedIndex(0); + schedulingProgressPerOrderModel.init(); } - public List getOrders() { + public List getAllOrders() { return schedulingProgressPerOrderModel.getOrders(); } + public List getSelectedOrdersToFilter() { + return (getSelectedOrders().isEmpty()) ? Collections + .unmodifiableList(getAllOrders()) + : getSelectedOrders(); + } + + /** + * Return selected orders, if none are selected return all orders in listbox + * @return + */ + public List getSelectedOrders() { + return Collections.unmodifiableList(schedulingProgressPerOrderModel + .getSelectedOrders()); + } + + public void onSelectOrder() { + Order order = (Order) bdOrders.getSelectedElement(); + if (order == null) { + throw new WrongValueException(bdOrders, _("please, select a order")); + } + boolean result = schedulingProgressPerOrderModel + .addSelectedOrder(order); + if (!result) { + throw new WrongValueException(bdOrders, + _("This order has already been added.")); + } else { + Util.reloadBindings(lbOrders); + } + bdOrders.clear(); + } + + public void onRemoveOrder(Order order) { + schedulingProgressPerOrderModel.removeSelectedOrder(order); + Util.reloadBindings(lbOrders); + } + protected String getReportName() { return REPORT_NAME; } protected JRDataSource getDataSource() { - List orders = getSelectedOrders(); + List orders = getSelectedOrdersToFilter(); return schedulingProgressPerOrderModel .getSchedulingProgressPerOrderReport(orders, getAdvanceType(), @@ -87,21 +128,6 @@ public class SchedulingProgressPerOrderController extends NavalplannerReportCont new LocalDate(getReferenceDate())); } - /** - * Return selected orders, if none are selected return all orders in listbox - * - * @return - */ - private List getSelectedOrders() { - List result = new ArrayList(); - - final Set listItems = lbOrders.getSelectedItems(); - for (Listitem each: listItems) { - result.add((Order) each.getValue()); - } - return (!result.isEmpty()) ? result : getOrders(); - } - private Date getReferenceDate() { Date result = referenceDate.getValue(); if (result == null) { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/SchedulingProgressPerOrderModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/SchedulingProgressPerOrderModel.java index d649d662f..a27e8dfaf 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/SchedulingProgressPerOrderModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/SchedulingProgressPerOrderModel.java @@ -53,8 +53,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** - * Diego Pino Garcia - * + * @author Diego Pino Garcia + * @author Susana Montes Pedreira */ @Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) @@ -72,13 +72,23 @@ public class SchedulingProgressPerOrderModel implements ISchedulingProgressPerOr @Autowired private IScenarioManager scenarioManager; + private List selectedOrders = new ArrayList(); + + private List allOrders = new ArrayList(); + @Override @Transactional(readOnly = true) - public List getOrders() { - List orders = orderDAO.getOrdersByScenario(scenarioManager + public void init() { + selectedOrders.clear(); + allOrders.clear(); + loadAllOrders(); + } + + private void loadAllOrders() { + allOrders = orderDAO.getOrdersByScenario(scenarioManager .getCurrent()); - for (Order each: orders) { + for (Order each : allOrders) { each.useSchedulingDataFor(scenarioManager.getCurrent()); initializeTasks(each.getTaskElements()); initializeOrderElements(each.getAllOrderElements()); @@ -87,7 +97,6 @@ public class SchedulingProgressPerOrderModel implements ISchedulingProgressPerOr initializeDirectAdvanceAssignments(each.getDirectAdvanceAssignments()); initializeIndirectAdvanceAssignments(each.getIndirectAdvanceAssignments()); } - return orders; } private void initializeOrderElements(List orderElements) { @@ -212,4 +221,29 @@ public class SchedulingProgressPerOrderModel implements ISchedulingProgressPerOr } return result; } + + @Override + public List getOrders() { + return allOrders; + } + + @Override + public void removeSelectedOrder(Order order) { + this.selectedOrders.remove(order); + } + + @Override + public boolean addSelectedOrder(Order order) { + if (this.selectedOrders.contains(order)) { + return false; + } + this.selectedOrders.add(order); + return true; + } + + @Override + public List getSelectedOrders() { + return selectedOrders; + } + } diff --git a/navalplanner-webapp/src/main/webapp/reports/schedulingProgressPerOrderReport.zul b/navalplanner-webapp/src/main/webapp/reports/schedulingProgressPerOrderReport.zul index b6f8779db..2396948f2 100644 --- a/navalplanner-webapp/src/main/webapp/reports/schedulingProgressPerOrderReport.zul +++ b/navalplanner-webapp/src/main/webapp/reports/schedulingProgressPerOrderReport.zul @@ -101,17 +101,37 @@ border="normal" style="overflow:auto"> - + + + + +