Author: jleroux
Date: Sun Feb 4 03:40:32 2007 New Revision: 503391 URL: http://svn.apache.org/viewvc?view=rev&rev=503391 Log: A slightly enhanced patch from Leon Torres (I added filters) "Pagination in https://host_name:8443/ordermgr/control/orderlist needed" (https://issues.apache.org/jira/browse/OFBIZ-644) I kept how one-line getters and setters are formatted. Not sure it would be better to put them on more lines. I deleted the "TODO: Bug: Clicking All so none are selected shows all orders anyway". Because I think this is a good behaviour (rechecking some options by default). Who would want to search for an empty list ? Added: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderListState.java (with props) Modified: ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/filterorderlist.bsh ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/orderlist.bsh ofbiz/trunk/applications/order/webapp/ordermgr/order/orderlist.ftl Added: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderListState.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderListState.java?view=auto&rev=503391 ============================================================================== --- ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderListState.java (added) +++ ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderListState.java Sun Feb 4 03:40:32 2007 @@ -0,0 +1,248 @@ +package org.ofbiz.order.order; + +import java.util.*; +import javax.servlet.http.*; +import javolution.util.*; +import org.ofbiz.base.util.*; +import org.ofbiz.entity.*; +import org.ofbiz.entity.condition.*; +import org.ofbiz.entity.util.*; + +/** + * Session object for keeping track of the list of orders. + * The state of the list is preserved here instead of + * via url parameters, which can get messy. There + * are three types of state: Order State, Order Type, + * and pagination position. + * + * Also provides convenience methods for retrieving + * the right set of data for a particular state. + * + * Configuration for this may be found in + * applications/order/config/OrderListState.properties + * + * TODO: this can be generalized to use a set of State + * objects, including Pagination. Think about design + * patterns in Fowler. + */ +public class OrderListState { + + public static final String module = OrderListState.class.getName(); + //Integer.parseInt(UtilProperties.getPropertyValue("OrderListState.properties", "view_size", "10")); + public static final String SESSION_KEY = "__ORDER_LIST_STATUS__"; + public static final String VIEW_SIZE_PARAM = "viewSize"; + public static final String VIEW_INDEX_PARAM = "viewIndex"; + + // state variables + protected int viewSize; + protected int viewIndex; + protected Map orderStatusState; + protected Map orderTypeState; + protected Map orderFilterState; + protected int orderListSize; + + // parameter to ID maps + protected static final Map parameterToOrderStatusId; + protected static final Map parameterToOrderTypeId; + protected static final Map parameterToFilterId; + static { + Map map = FastMap.newInstance(); + map.put("viewcompleted", "ORDER_COMPLETED"); + map.put("viewcancelled", "ORDER_CANCELLED"); + map.put("viewrejected", "ORDER_REJECTED"); + map.put("viewapproved", "ORDER_APPROVED"); + map.put("viewcreated", "ORDER_CREATED"); + map.put("viewprocessing", "ORDER_PROCESSING"); + map.put("viewsent", "ORDER_SENT"); + parameterToOrderStatusId = map; + + map = FastMap.newInstance(); + map.put("view_SALES_ORDER", "SALES_ORDER"); + map.put("view_PURCHASE_ORDER", "PURCHASE_ORDER"); + parameterToOrderTypeId = map; + + map = FastMap.newInstance(); + map.put("filterInventoryProblems", "filterInventoryProblems"); + map.put("filterAuthProblems", "filterAuthProblems"); + map.put("filterPartiallyReceivedPOs", "filterPartiallyReceivedPOs"); + map.put("filterPOsOpenPastTheirETA", "filterPOsOpenPastTheirETA"); + map.put("filterPOsWithRejectedItems", "filterPOsWithRejectedItems"); + parameterToFilterId = map; + } + + //============= Initialization and Request methods ===================// + + /** + * Initializes the order list state with default values. Do not use directly, + * instead use getInstance(). + */ + protected OrderListState() { + viewSize = Integer.parseInt(UtilProperties.getPropertyValue("OrderListState.properties", "view_size", "10")); + viewIndex = 0; + orderStatusState = FastMap.newInstance(); + orderTypeState = FastMap.newInstance(); + orderFilterState = FastMap.newInstance(); + + // defaults (TODO: configuration) + orderStatusState.put("viewcreated", "Y"); + orderStatusState.put("viewprocessing", "Y"); + orderStatusState.put("viewapproved", "Y"); + orderTypeState.put("view_SALES_ORDER", "Y"); + } + + /** + * Retrieves the current user's OrderListState from the session + * or creates a new one with defaults. + */ + public static OrderListState getInstance(HttpServletRequest request) { + HttpSession session = request.getSession(); + OrderListState status = (OrderListState) session.getAttribute(SESSION_KEY); + if (status == null) { + status = new OrderListState(); + session.setAttribute(SESSION_KEY, status); + } + return status; + } + + /** + * Given a request, decides what state to change. If a parameter changeStatusAndTypeState + * is present with value "Y", the status and type state will be updated. Otherwise, if the + * viewIndex and viewSize parameters are present, the pagination changes. + */ + public void update(HttpServletRequest request) { + if ("Y".equals(request.getParameter("changeStatusAndTypeState"))) { + changeOrderListStates(request); + } else { + String viewSizeParam = request.getParameter(VIEW_SIZE_PARAM); + String viewIndexParam = request.getParameter(VIEW_INDEX_PARAM); + if (!UtilValidate.isEmpty(viewSizeParam) && !UtilValidate.isEmpty(viewIndexParam)) + changePaginationState(viewSizeParam, viewIndexParam); + } + } + + private void changePaginationState(String viewSizeParam, String viewIndexParam) { + try { + viewSize = Integer.parseInt(viewSizeParam); + viewIndex = Integer.parseInt(viewIndexParam); + } catch (NumberFormatException e) { + Debug.logWarning("Values of " + VIEW_SIZE_PARAM + " ["+viewSizeParam+"] and " + VIEW_INDEX_PARAM + " ["+viewIndexParam+"] must both be Integers. Not paginating order list.", module); + } + } + + private void changeOrderListStates(HttpServletRequest request) { + for (Iterator iter = parameterToOrderStatusId.keySet().iterator(); iter.hasNext(); ) { + String param = (String) iter.next(); + String value = request.getParameter(param); + if ("Y".equals(value)) { + orderStatusState.put(param, "Y"); + } else { + orderStatusState.put(param, "N"); + } + } + for (Iterator iter = parameterToOrderTypeId.keySet().iterator(); iter.hasNext(); ) { + String param = (String) iter.next(); + String value = request.getParameter(param); + if ("Y".equals(value)) { + orderTypeState.put(param, "Y"); + } else { + orderTypeState.put(param, "N"); + } + } + for (Iterator iter = parameterToFilterId.keySet().iterator(); iter.hasNext(); ) { + String param = (String) iter.next(); + String value = request.getParameter(param); + if ("Y".equals(value)) { + orderFilterState.put(param, "Y"); + } else { + orderFilterState.put(param, "N"); + } + } + viewIndex = 0; + } + + + //============== Get and Set methods =================// + + + public Map getOrderStatusState() { return orderStatusState; }; + public Map getOrderTypeState() { return orderTypeState; } + public Map getorderFilterState() { return orderFilterState; } + + public boolean hasStatus(String param) { return ("Y".equals(orderStatusState.get(param))); } + public boolean hasType(String param) { return ("Y".equals(orderTypeState.get(param))); } + public boolean hasFilter(String param) { return ("Y".equals(orderFilterState.get(param))); } + + public boolean hasAllStatus() { + for (Iterator iter = orderStatusState.values().iterator(); iter.hasNext(); ) { + if (!"Y".equals(iter.next())) return false; + } + return true; + } + + public int getViewSize() { return viewSize; } + public int getViewIndex() { return viewIndex; } + public int getSize() { return orderListSize; } + + public boolean hasPrevious() { return (viewIndex > 0); } + public boolean hasNext() { return (viewIndex < getSize() / viewSize); } + + /** + * Get the OrderHeaders corresponding to the state. + */ + public List getOrders(String facilityId, GenericDelegator delegator) throws GenericEntityException { + List allConditions = new ArrayList(); + + if (facilityId != null) { + allConditions.add(new EntityExpr("originFacilityId", EntityOperator.EQUALS, facilityId)); + } + + List statusConditions = new ArrayList(); + for (Iterator iter = orderStatusState.keySet().iterator(); iter.hasNext(); ) { + String status = (String) iter.next(); + if (!hasStatus(status)) continue; + statusConditions.add( new EntityExpr("statusId", EntityOperator.EQUALS, parameterToOrderStatusId.get(status)) ); + } + List typeConditions = new ArrayList(); + for (Iterator iter = orderTypeState.keySet().iterator(); iter.hasNext(); ) { + String type = (String) iter.next(); + if (!hasType(type)) continue; + typeConditions.add( new EntityExpr("orderTypeId", EntityOperator.EQUALS, parameterToOrderTypeId.get(type)) ); + } + List filterConditions = new ArrayList(); + for (Iterator iter = orderFilterState.keySet().iterator(); iter.hasNext(); ) { + String type = (String) iter.next(); + if (!hasType(type)) continue; + filterConditions.add( new EntityExpr("orderFiltersStateId", EntityOperator.EQUALS, parameterToFilterId.get(type)) ); + } + + EntityCondition statusConditionsList = new EntityConditionList(statusConditions, EntityOperator.OR); + EntityCondition typeConditionsList = new EntityConditionList(typeConditions, EntityOperator.OR); + EntityCondition filterConditionsList = new EntityConditionList(filterConditions, EntityOperator.OR); + if ((typeConditions.size() > 0) && (statusConditions.size() > 0) && (filterConditions.size() > 0)) { + allConditions.add(statusConditionsList); + allConditions.add(typeConditionsList); + allConditions.add(filterConditionsList); + } + + EntityCondition queryConditionsList = new EntityConditionList(allConditions, EntityOperator.AND); + EntityFindOptions options = new EntityFindOptions(true, EntityFindOptions.TYPE_SCROLL_INSENSITIVE, EntityFindOptions.CONCUR_READ_ONLY, true); + EntityListIterator iterator = delegator.findListIteratorByCondition("OrderHeader", queryConditionsList, null, null, UtilMisc.toList("orderDate DESC"), options); + + // get subset corresponding to pagination state + List orders = iterator.getPartialList(viewSize * viewIndex, viewSize); + iterator.last(); + orderListSize = iterator.currentIndex(); + iterator.close(); + //Debug.logInfo("### size of list: " + orderListSize, module); + return orders; + } + + public String toString() { + StringBuffer buff = new StringBuffer("OrderListState:\n\t"); + buff.append("viewIndex=").append(viewIndex).append(", viewSize=").append(viewSize).append("\n\t"); + buff.append(getOrderStatusState().toString()).append("\n\t"); + buff.append(getOrderTypeState().toString()).append("\n\t"); + buff.append(getorderFilterState().toString()).append("\n\t"); + return buff.toString(); + } +} Propchange: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderListState.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderListState.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author URL Id" Propchange: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderListState.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/filterorderlist.bsh URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/filterorderlist.bsh?view=diff&rev=503391&r1=503390&r2=503391 ============================================================================== --- ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/filterorderlist.bsh (original) +++ ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/filterorderlist.bsh Sun Feb 4 03:40:32 2007 @@ -22,13 +22,14 @@ import org.ofbiz.entity.GenericValue; import org.ofbiz.order.order.OrderReadHelper; import org.ofbiz.product.store.ProductStoreWorker; +import org.ofbiz.order.order.OrderListState; orderHeaderList = context.get("orderHeaderList"); productStore = ProductStoreWorker.getProductStore(request); List filterInventoryProblems = new ArrayList(); -if ("Y".equals(requestParameters.get("filterInventoryProblems")) && UtilValidate.isNotEmpty(orderHeaderList)) { +if (state.hasFilter("view_InventoryProblems") && UtilValidate.isNotEmpty(orderHeaderList)) { for (ohi = orderHeaderList.iterator(); ohi.hasNext();) { orderHeader = (GenericValue) ohi.next(); orderReadHelper = OrderReadHelper.getHelper(orderHeader); @@ -43,9 +44,12 @@ List filterPOsWithRejectedItems = new ArrayList(); List filterPartiallyReceivedPOs = new ArrayList(); -if (("Y".equals(requestParameters.get("filterPartiallyReceivedPOs")) || - "Y".equals(requestParameters.get("filterPOsOpenPastTheirETA")) || - "Y".equals(requestParameters.get("filterPOsWithRejectedItems"))) && +state = OrderListState.getInstance(request); +//print("### " + state.toString()); + +if ((state.hasFilter("filterPartiallyReceivedPOs") || + state.hasFilter("filterPOsOpenPastTheirETA") || + state.hasFilter("filterPOsWithRejectedItems")) && UtilValidate.isNotEmpty(orderHeaderList)) { for (ohi = orderHeaderList.iterator(); ohi.hasNext();) { orderHeader = (GenericValue) ohi.next(); @@ -56,17 +60,17 @@ orderReadHelper = OrderReadHelper.getHelper(orderHeader); if ("PURCHASE_ORDER".equals(orderHeader.getString("orderTypeId"))) { if (orderReadHelper.getRejectedOrderItems() && - "Y".equals(requestParameters.get("filterPOsWithRejectedItems"))) { + state.hasFilter("filterPOsWithRejectedItems")) { filterPOsWithRejectedItems.add(orderHeader.get("orderId")); continue; } if (orderReadHelper.getPastEtaOrderItems(orderHeader.get("orderId")) && - "Y".equals(requestParameters.get("filterPOsOpenPastTheirETA"))) { + state.hasFilter("filterPOsOpenPastTheirETA")) { filterPOsOpenPastTheirETA.add(orderHeader.get("orderId")); continue; } if (orderReadHelper.getPartiallyReceivedItems() && - "Y".equals(requestParameters.get("filterPartiallyReceivedPOs"))) { + state.hasFilter("filterPartiallyReceivedPOs")) { filterPartiallyReceivedPOs.add(orderHeader.get("orderId")); continue; } @@ -76,7 +80,7 @@ List filterAuthProblems = new ArrayList(); -if ("Y".equals(requestParameters.get("filterAuthProblems")) && UtilValidate.isNotEmpty(orderHeaderList)) { +if (state.hasFilter("filterAuthProblems") && UtilValidate.isNotEmpty(orderHeaderList)) { for (ohi = orderHeaderList.iterator(); ohi.hasNext();) { orderHeader = (GenericValue) ohi.next(); orderReadHelper = OrderReadHelper.getHelper(orderHeader); Modified: ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/orderlist.bsh URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/orderlist.bsh?view=diff&rev=503391&r1=503390&r2=503391 ============================================================================== --- ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/orderlist.bsh (original) +++ ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/orderlist.bsh Sun Feb 4 03:40:32 2007 @@ -21,6 +21,7 @@ import org.ofbiz.entity.*; import org.ofbiz.entity.util.*; import org.ofbiz.entity.condition.*; +import org.ofbiz.order.order.OrderListState; delegator = request.getAttribute("delegator"); session = request.getSession(true); @@ -30,125 +31,24 @@ partyId = request.getParameter("partyId"); facilityId = request.getParameter("facilityId"); -// checkboxes -viewcompleted = request.getParameter("viewcompleted"); -viewcancelled = request.getParameter("viewcancelled"); -viewrejected = request.getParameter("viewrejected"); -viewapproved = request.getParameter("viewapproved"); -viewcreated = request.getParameter("viewcreated"); -viewprocessing = request.getParameter("viewprocessing"); -viewsent = request.getParameter("viewsent"); -viewall = request.getParameter("viewall"); -view_SALES_ORDER = request.getParameter("view_SALES_ORDER"); -view_PURCHASE_ORDER = request.getParameter("view_PURCHASE_ORDER"); - - -// if no status is selected, view created, processing, and approved orders by default -if ((viewcompleted == null) && (viewcancelled == null) && (viewrejected == null) && (viewapproved == null) && (viewcreated == null) && (viewprocessing == null) && (viewsent == null)) { - viewcreated = "Y"; - viewprocessing = "Y"; - viewapproved = "Y"; -} - -// put back in context for pre-checking checkboxes -context.put("viewcompleted", viewcompleted); -context.put("viewcancelled", viewcancelled); -context.put("viewrejected", viewrejected); -context.put("viewapproved", viewapproved); -context.put("viewcreated", viewcreated); -context.put("viewprocessing", viewprocessing); -context.put("viewsent", viewsent); -context.put("viewall", viewall); - -// when no constraints are evident, default to view all sales -if ((view_SALES_ORDER == null) && (view_PURCHASE_ORDER == null)) { - view_SALES_ORDER = "Y"; -} -context.put("view_SALES_ORDER", view_SALES_ORDER); -context.put("view_PURCHASE_ORDER", view_PURCHASE_ORDER); - -typeConditions = new ArrayList(); // list of order type conditions -statusConditions = new ArrayList(); // list of order status conditions -allConditions = new ArrayList(); // type and status conditions joined by AND - -// condition for facility Id -if (facilityId != null) { - allConditions.add(new EntityExpr("originFacilityId", EntityOperator.EQUALS, facilityId)); -} - -// conditions for order status -completedOrdersCondition = new EntityExpr("statusId", EntityOperator.EQUALS, "ORDER_COMPLETED"); -cancelledOrdersCondition = new EntityExpr("statusId", EntityOperator.EQUALS, "ORDER_CANCELLED"); -rejectedOrdersCondition = new EntityExpr("statusId", EntityOperator.EQUALS, "ORDER_REJECTED"); -approvedOrdersCondition = new EntityExpr("statusId", EntityOperator.EQUALS, "ORDER_APPROVED"); -createdOrdersCondition = new EntityExpr("statusId", EntityOperator.EQUALS, "ORDER_CREATED"); -processingOrdersCondition = new EntityExpr("statusId", EntityOperator.EQUALS, "ORDER_PROCESSING"); -sentOrdersCondition = new EntityExpr("statusId", EntityOperator.EQUALS, "ORDER_SENT"); - -// conditions for order type -salesOrdersCondition = null; -purchaseOrdersCondition = null; -workOrdersCondition = null; - +state = OrderListState.getInstance(request); +state.update(request); +context.put("state", state); +//print("### " + state.toString()); + // check permission for each order type hasPermission = false; -if ((view_SALES_ORDER != null) && security.hasEntityPermission("ORDERMGR", "_VIEW", session)) { +if (state.hasType("view_SALES_ORDER") && security.hasEntityPermission("ORDERMGR", "_VIEW", session)) { hasPermission = true; salesOrdersCondition = new EntityExpr("orderTypeId", EntityOperator.EQUALS, "SALES_ORDER"); } -if ((view_PURCHASE_ORDER != null) && security.hasEntityPermission("ORDERMGR", "_PURCHASE_VIEW", session)) { +if (state.hasType("view_PURCHASE_ORDER") && security.hasEntityPermission("ORDERMGR", "_PURCHASE_VIEW", session)) { hasPermission = true; purchaseOrdersCondition = new EntityExpr("orderTypeId", EntityOperator.EQUALS, "PURCHASE_ORDER"); } context.put("hasPermission", hasPermission); - -// this is for convenience -allStatus = false; -if ((viewall != null) && (viewall.equals("Y"))) { - allStatus = true; -} - -if (allStatus || (viewcompleted != null)) { - statusConditions.add(completedOrdersCondition); -} -if (allStatus || (viewcancelled != null)) { - statusConditions.add(cancelledOrdersCondition); -} -if (allStatus || (viewrejected != null)) { - statusConditions.add(rejectedOrdersCondition); -} -if (allStatus || (viewapproved != null)) { - statusConditions.add(approvedOrdersCondition); -} -if (allStatus || (viewcreated != null)) { - statusConditions.add(createdOrdersCondition); -} -if (allStatus || (viewprocessing != null)) { - statusConditions.add(processingOrdersCondition); -} -if (allStatus || (viewsent != null)) { - statusConditions.add(sentOrdersCondition); -} -if (salesOrdersCondition != null) { - typeConditions.add(salesOrdersCondition); -} -if (purchaseOrdersCondition != null) { - typeConditions.add(purchaseOrdersCondition); -} -if (workOrdersCondition != null) { - typeConditions.add(workOrdersCondition); -} - -// construct conditions and find orderheaders: select ORH where (status1 OR status2 OR ...) AND (type1 OR type2 OR ...) -statusConditionsList = new EntityConditionList(statusConditions, EntityOperator.OR); -typeConditionsList = new EntityConditionList(typeConditions, EntityOperator.OR); -if ((typeConditions.size() > 0) && (statusConditions.size() > 0)) { - allConditions.add(statusConditionsList); - allConditions.add(typeConditionsList); -} -queryConditionsList = new EntityConditionList(allConditions, EntityOperator.AND); -orderHeaderList = delegator.findByCondition("OrderHeader", queryConditionsList, null, UtilMisc.toList("orderDate DESC")); +orderHeaderList = state.getOrders(facilityId, delegator); context.put("orderHeaderList", orderHeaderList); locale = UtilHttp.getLocale(request); Modified: ofbiz/trunk/applications/order/webapp/ordermgr/order/orderlist.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/order/orderlist.ftl?view=diff&rev=503391&r1=503390&r2=503391 ============================================================================== --- ofbiz/trunk/applications/order/webapp/ordermgr/order/orderlist.ftl (original) +++ ofbiz/trunk/applications/order/webapp/ordermgr/order/orderlist.ftl Sun Feb 4 03:40:32 2007 @@ -35,24 +35,49 @@ </script> +<#macro pagination> + <tr> + <td> + <table border="0" width="100%"> + <tr> + <td> + <#if state.hasPrevious()> + <a href="<@ofbizUrl>orderlist?viewIndex=${state.getViewIndex() - 1}&viewSize=${state.getViewSize()}</@ofbizUrl>" class="buttontext">Previous</a> + </#if> + </td> + <td align="right"> + <#if state.hasNext()> + <a href="<@ofbizUrl>orderlist?viewIndex=${state.getViewIndex() + 1}&viewSize=${state.getViewSize()}</@ofbizUrl>" class="buttontext">Next</a> + </#if> + </td> + </tr> + </table> + </td> + </tr> +</#macro> + + +<#-- order list --> + <table border="0" width="100%" cellspacing="0" cellpadding="0" class="boxoutside"> <tr> <td width="100%"> <form method="post" name="findorder" action="<@ofbizUrl>orderlist</@ofbizUrl>"> + <input type="hidden" name="changeStatusAndTypeState" value="Y"> <table border="0" cellspacing="0" cellpadding="0" class="boxbottom"> <tr> <td><div class="tableheadtext">${uiLabelMap.CommonStatus}:</div></td> <td> </td> <td nowrap> <div class="tabletext"> - <input type="checkbox" name="viewall" value="Y" onclick="javascript:setCheckboxes()" <#if viewall?exists>checked="checked"</#if> />${uiLabelMap.CommonAll} - <input type="checkbox" name="viewcreated" value="Y" <#if viewcreated?exists>checked="checked"</#if> />${uiLabelMap.CommonCreated} - <input type="checkbox" name="viewprocessing" value="Y" <#if viewprocessing?exists>checked="checked"</#if> />${uiLabelMap.CommonProcessing} - <input type="checkbox" name="viewapproved" value="Y" <#if viewapproved?exists>checked="checked"</#if> />${uiLabelMap.CommonApproved} - <input type="checkbox" name="viewcompleted" value="Y" <#if viewcompleted?exists>checked="checked"</#if> />${uiLabelMap.CommonCompleted} - <input type="checkbox" name="viewsent" value="Y" <#if viewsent?exists>checked="checked"</#if> />${uiLabelMap.CommonSent} - <input type="checkbox" name="viewrejected" value="Y" <#if viewrejected?exists>checked="checked"</#if> />${uiLabelMap.CommonRejected} - <input type="checkbox" name="viewcancelled" value="Y" <#if viewcancelled?exists>checked="checked"</#if> />${uiLabelMap.CommonCancelled} + <input type="checkbox" name="viewall" value="Y" onclick="javascript:setCheckboxes()" <#if state.hasAllStatus()>checked="checked"</#if> />${uiLabelMap.CommonAll} + <input type="checkbox" name="viewcreated" value="Y" <#if state.hasStatus('viewcreated')>checked="checked"</#if> />${uiLabelMap.CommonCreated} + <input type="checkbox" name="viewprocessing" value="Y" <#if state.hasStatus('viewprocessing')>checked="checked"</#if> />${uiLabelMap.CommonProcessing} + <input type="checkbox" name="viewapproved" value="Y" <#if state.hasStatus('viewapproved')>checked="checked"</#if> />${uiLabelMap.CommonApproved} + <input type="checkbox" name="viewcompleted" value="Y" <#if state.hasStatus('viewcompleted')>checked="checked"</#if> />${uiLabelMap.CommonCompleted} + <input type="checkbox" name="viewsent" value="Y" <#if state.hasStatus('viewsent')>checked="checked"</#if> />${uiLabelMap.CommonSent} + <input type="checkbox" name="viewrejected" value="Y" <#if state.hasStatus('viewrejected')>checked="checked"</#if> />${uiLabelMap.CommonRejected} + <input type="checkbox" name="viewcancelled" value="Y" <#if state.hasStatus('viewcancelled')>checked="checked"</#if> />${uiLabelMap.CommonCancelled} </div> </td> <td rowspan="2"> </td> @@ -65,9 +90,9 @@ <td> </td> <td nowrap> <div class="tabletext"> - <input type="checkbox" name="view_SALES_ORDER" value="Y" <#if view_SALES_ORDER?exists>checked="checked"</#if>/> + <input type="checkbox" name="view_SALES_ORDER" value="Y" <#if state.hasType('view_SALES_ORDER')>checked="checked"</#if>/> ${descr_SALES_ORDER} - <input type="checkbox" name="view_PURCHASE_ORDER" value="Y" <#if view_PURCHASE_ORDER?exists>checked="checked"</#if>/> + <input type="checkbox" name="view_PURCHASE_ORDER" value="Y" <#if state.hasType('view_PURCHASE_ORDER')>checked="checked"</#if>/> ${descr_PURCHASE_ORDER} </div> </td> @@ -78,10 +103,10 @@ <td nowrap> <div class="tabletext"> <input type="checkbox" name="filterInventoryProblems" value="Y" - <#if requestParameters.filterInventoryProblems?default("N") == "Y">checked="checked"</#if>/> + <#if state.hasFilter('filterInventoryProblems')>checked="checked"</#if>/> ${uiLabelMap.OrderFilterInventoryProblems} <input type="checkbox" name="filterAuthProblems" value="Y" - <#if requestParameters.filterAuthProblems?default("N") == "Y">checked="checked"</#if>/> + <#if state.hasFilter('filterAuthProblems')>checked="checked"</#if>/> ${uiLabelMap.OrderFilterAuthProblems} </div> </td> @@ -92,13 +117,13 @@ <td nowrap> <div class="tabletext"> <input type="checkbox" name="filterPartiallyReceivedPOs" value="Y" - <#if requestParameters.filterPartiallyReceivedPOs?default("N") == "Y">checked="checked"</#if>/> + <#if state.hasFilter('filterPartiallyReceivedPOs')>checked="checked"</#if>/> ${uiLabelMap.OrderFilterPartiallyReceivedPOs} <input type="checkbox" name="filterPOsOpenPastTheirETA" value="Y" - <#if requestParameters.filterPOsOpenPastTheirETA?default("N") == "Y">checked="checked"</#if>/> + <#if state.hasFilter('filterPOsOpenPastTheirETA')>checked="checked"</#if>/> ${uiLabelMap.OrderFilterPOsOpenPastTheirETA} <input type="checkbox" name="filterPOsWithRejectedItems" value="Y" - <#if requestParameters.filterPOsWithRejectedItems?default("N") == "Y">checked="checked"</#if>/> + <#if state.hasFilter('filterPOsWithRejectedItems')>checked="checked"</#if>/> ${uiLabelMap.OrderFilterPOsWithRejectedItems} </div> </td> @@ -238,6 +263,9 @@ </table> </td> </tr> + + <@pagination/> + <#else> <tr><td><div class="tableheadtext">${uiLabelMap.OrderViewPermissionError}</div></td></tr> </#if> |
Free forum by Nabble | Edit this page |