diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/FilterUtils.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/FilterUtils.java index 0c24a5b4c..eb0f54cbe 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/FilterUtils.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/FilterUtils.java @@ -221,4 +221,17 @@ public class FilterUtils { return Sessions.getCurrent() != null; } + public static boolean hasOrderWBSFiltersChanged(Order order) { + return sessionExists() + && (Sessions.getCurrent().getAttribute( + order.getCode() + "-orderWBSFilterChanged") != null) + && ((Boolean) Sessions.getCurrent().getAttribute( + order.getCode() + "-orderWBSFilterChanged")); + } + + public static void writeOrderWBSFiltersChanged(Order order, boolean changed) { + Sessions.getCurrent().setAttribute( + order.getCode() + "-orderWBSFilterChanged", changed); + } + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderCRUDController.java index d241f45d2..0aae5e922 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderCRUDController.java @@ -274,49 +274,19 @@ public class OrderCRUDController extends GenericForwardComposer { filterFinishDate.setValue(endDate); loadLabels(); - + FilterUtils.writeProjectPlanningFilterChanged(false); } private void loadLabels() { - List sessionFilterPairs = FilterUtils + List sessionFilters = FilterUtils .readProjectsParameters(); // Allow labels when list is empty - if (sessionFilterPairs != null) { - for (FilterPair filterPair : sessionFilterPairs) { - - FilterPair toadd; - TaskGroupFilterEnum type = (TaskGroupFilterEnum) filterPair - .getType(); - switch (type) { - case Label: - toadd = new FilterPair(OrderFilterEnum.Label, - filterPair.getPattern(), filterPair.getValue()); - break; - case Criterion: - toadd = new FilterPair(OrderFilterEnum.Criterion, - filterPair.getPattern(), filterPair.getValue()); - break; - case ExternalCompany: - toadd = new FilterPair(OrderFilterEnum.ExternalCompany, - filterPair.getPattern(), filterPair.getValue()); - break; - case State: - toadd = new FilterPair(OrderFilterEnum.State, - filterPair.getPattern(), filterPair.getValue()); - - break; - default: - toadd = new FilterPair(OrderFilterEnum.Label, - filterPair.getPattern(), filterPair.getValue()); - break; - } - bdFilters.addSelectedElement(toadd); - } + if (sessionFilters != null) { + bdFilters.addSelectedElements(toOrderFilterEnum(sessionFilters)); return; } User user = orderModel.getUser(); - // Calculate filter based on user preferences if ((user != null) && (user.getProjectsFilterLabel() != null)) { bdFilters.addSelectedElement(new FilterPair(OrderFilterEnum.Label, @@ -325,6 +295,39 @@ public class OrderCRUDController extends GenericForwardComposer { } } + private List toOrderFilterEnum(List filterPairs) { + List result = new ArrayList(); + for (FilterPair filterPair : filterPairs) { + FilterPair toadd; + TaskGroupFilterEnum type = (TaskGroupFilterEnum) filterPair + .getType(); + switch (type) { + case Label: + toadd = new FilterPair(OrderFilterEnum.Label, + filterPair.getPattern(), filterPair.getValue()); + break; + case Criterion: + toadd = new FilterPair(OrderFilterEnum.Criterion, + filterPair.getPattern(), filterPair.getValue()); + break; + case ExternalCompany: + toadd = new FilterPair(OrderFilterEnum.ExternalCompany, + filterPair.getPattern(), filterPair.getValue()); + break; + case State: + toadd = new FilterPair(OrderFilterEnum.State, + filterPair.getPattern(), filterPair.getValue()); + break; + default: + toadd = new FilterPair(OrderFilterEnum.Label, + filterPair.getPattern(), filterPair.getValue()); + break; + } + result.add(toadd); + } + return result; + } + private void setupGlobalButtons() { Hbox perspectiveButtonsInsertionPoint = (Hbox) page .getFellow("perspectiveButtonsInsertionPoint"); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java index 8c5976f60..ce3874210 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java @@ -637,7 +637,7 @@ public class OrderElementTreeController extends TreeController { result.add(toTasKElementFilterEnum(filterPair)); } FilterUtils.writeOrderParameters(order, result); - + FilterUtils.writeOrderWBSFiltersChanged(order, true); } private FilterPair toTasKElementFilterEnum(FilterPair each) { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java index 7d7418381..914118d6c 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java @@ -230,7 +230,11 @@ public class OrderPlanningController implements Composer { } } - private void importOrderFiltersFromSession() { + public void importOrderFiltersFromSession() { + importOrderFiltersFromSession(false); + } + + public void importOrderFiltersFromSession(boolean forceReload) { filterNameOrderElement.setValue(FilterUtils.readOrderTaskName(order)); filterStartDateOrderElement.setValue(FilterUtils .readOrderStartDate(order)); @@ -238,11 +242,9 @@ public class OrderPlanningController implements Composer { .readOrderEndDate(order)); List sessionFilterPairs = FilterUtils .readOrderParameters(order); - if (sessionFilterPairs != null - && bdFiltersOrderElement.getSelectedElements().isEmpty()) { - for (Object each : sessionFilterPairs) { - bdFiltersOrderElement.addSelectedElement(each); - } + if ((sessionFilterPairs != null) + && (bdFiltersOrderElement.getSelectedElements().isEmpty() || forceReload)) { + bdFiltersOrderElement.addSelectedElements(sessionFilterPairs); } if (FilterUtils.readOrderInheritance(order) != null) { labelsWithoutInheritance.setChecked(FilterUtils @@ -272,9 +274,18 @@ public class OrderPlanningController implements Composer { public void onApplyFilter() { filterByPredicate(createPredicate()); + List listFilters = (List) bdFiltersOrderElement + .getSelectedElements(); + FilterUtils.writeOrderParameters(order, listFilters); } private TaskElementPredicate createPredicate() { + + if (FilterUtils.hasOrderWBSFiltersChanged(order)) { + importOrderFiltersFromSession(true); + FilterUtils.writeOrderWBSFiltersChanged(order, false); + } + List listFilters = (List) bdFiltersOrderElement .getSelectedElements(); Date startDate = filterStartDateOrderElement.getValue(); @@ -289,10 +300,7 @@ public class OrderPlanningController implements Composer { FilterUtils.writeOrderTaskName(order, name); FilterUtils.writeOrderStartDate(order, startDate); FilterUtils.writeOrderEndDate(order, finishDate); - - // Peding to change FilterUtils.writeOrderInheritance(order, ignoreLabelsInheritance); - FilterUtils.writeOrderParameters(order, listFilters); return new TaskElementPredicate(listFilters, startDate, finishDate, name, ignoreLabelsInheritance); } @@ -354,7 +362,7 @@ public class OrderPlanningController implements Composer { && (filterStartDateOrderElement.getValue() != null) && (finishDate.compareTo(filterStartDateOrderElement .getValue()) < 0)) { - filterFinishDateOrderElement.setValue(null); + filterFinishDateOrderElement.setRawValue(null); throw new WrongValueException(comp, _("must be after start date")); } @@ -373,7 +381,7 @@ public class OrderPlanningController implements Composer { && (filterFinishDateOrderElement.getValue() != null) && (startDate.compareTo(filterFinishDateOrderElement .getValue()) > 0)) { - filterStartDateOrderElement.setValue(null); + filterStartDateOrderElement.setRawValue(null); throw new WrongValueException(comp, _("must be lower than end date")); } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/OrdersTabCreator.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/OrdersTabCreator.java index f2dee5bbe..0d4125839 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/OrdersTabCreator.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/OrdersTabCreator.java @@ -126,7 +126,6 @@ public class OrdersTabCreator { protected void afterShowAction() { if (checkFiltersChanged()) { orderCRUDController.readSessionFilterDates(); - orderCRUDController.onApplyFilter(); setFiltersUnchanged(); } orderCRUDController.goToList();