details:   https://code.openbravo.com/erp/devel/pi/rev/85730acf7b16
changeset: 23405:85730acf7b16
user:      Sandra Huguet <sandra.huguet <at> openbravo.com>
date:      Wed May 28 13:23:22 2014 +0200
summary:   Fixed bug 26719 Stock reservation pick lines does not keep selected 
lines

details:   https://code.openbravo.com/erp/devel/pi/rev/eece3bb3d696
changeset: 23406:eece3bb3d696
user:      Sandra Huguet <sandra.huguet <at> openbravo.com>
date:      Thu May 29 12:35:15 2014 +0200
summary:   Fixed bug 26689 Return from customer pick lines does not keep 
selected lines

details:   https://code.openbravo.com/erp/devel/pi/rev/2b23a4e38022
changeset: 23407:2b23a4e38022
user:      Sandra Huguet <sandra.huguet <at> openbravo.com>
date:      Wed May 28 13:24:31 2014 +0200
summary:   Fixed bug 26688 Return to vendor pick lines does not keep selected 
lines

details:   https://code.openbravo.com/erp/devel/pi/rev/6deeeb7a363e
changeset: 23408:6deeeb7a363e
user:      Sandra Huguet <sandra.huguet <at> openbravo.com>
date:      Thu May 29 15:32:20 2014 +0200
summary:   Related to issue 26689

diffstat:

 
modules/org.openbravo.service.json/src/org/openbravo/service/json/AdvancedQueryBuilder.java
 |    2 +-
 src-db/database/sourcedata/AD_TAB.xml                                          
             |    1 +
 src-db/database/sourcedata/AD_TABLE.xml                                        
             |    3 +-
 src-db/database/sourcedata/OBUIAPP_PARAMETER.xml                               
             |    2 +-
 src/org/openbravo/common/datasource/ResultMapCriteriaUtils.java                
             |  520 ++++++++++
 
src/org/openbravo/common/datasource/ReturnFromCustomerPickEditLineDatasource.java
           |   51 +-
 src/org/openbravo/common/datasource/ReturnFromCustomerPickEditLineRow.java     
             |    4 +
 src/org/openbravo/common/datasource/ReturnToVendorPickAndEditDataSource.java   
             |  164 ++-
 src/org/openbravo/common/datasource/StockReservationPickAndEditDataSource.java 
             |  258 +++-
 9 files changed, 853 insertions(+), 152 deletions(-)

diffs (truncated from 1332 to 300 lines):

diff -r b99f3051275b -r 6deeeb7a363e 
modules/org.openbravo.service.json/src/org/openbravo/service/json/AdvancedQueryBuilder.java
--- 
a/modules/org.openbravo.service.json/src/org/openbravo/service/json/AdvancedQueryBuilder.java
       Thu May 29 21:00:40 2014 +0000
+++ 
b/modules/org.openbravo.service.json/src/org/openbravo/service/json/AdvancedQueryBuilder.java
       Thu May 29 15:32:20 2014 +0200
@@ -1230,7 +1230,7 @@
    * 
    * @return a valid order by clause (or an empty string if no sorting)
    */
-  protected String getOrderByClause() {
+  public String getOrderByClause() {
     if (orderByClause != null) {
       return orderByClause;
     }
diff -r b99f3051275b -r 6deeeb7a363e src-db/database/sourcedata/AD_TAB.xml
--- a/src-db/database/sourcedata/AD_TAB.xml     Thu May 29 21:00:40 2014 +0000
+++ b/src-db/database/sourcedata/AD_TAB.xml     Thu May 29 15:32:20 2014 +0200
@@ -18104,6 +18104,7 @@
 <!--F4204696A73647E2AA9700106C00C7A5-->  
<DISABLE_PARENT_KEY_PROPERTY><![CDATA[N]]></DISABLE_PARENT_KEY_PROPERTY>
 <!--F4204696A73647E2AA9700106C00C7A5-->  
<ISREADONLYTREE><![CDATA[N]]></ISREADONLYTREE>
 <!--F4204696A73647E2AA9700106C00C7A5-->  
<ISSHOWTREENODEICONS><![CDATA[Y]]></ISSHOWTREENODEICONS>
+<!--F4204696A73647E2AA9700106C00C7A5-->  
<EM_OBUIAPP_SELECTION><![CDATA[OB.RM.RMOrderSelectionChange]]></EM_OBUIAPP_SELECTION>
 <!--F4204696A73647E2AA9700106C00C7A5-->  
<EM_OBUIAPP_CAN_ADD><![CDATA[N]]></EM_OBUIAPP_CAN_ADD>
 <!--F4204696A73647E2AA9700106C00C7A5-->  
<EM_OBUIAPP_CAN_DELETE><![CDATA[N]]></EM_OBUIAPP_CAN_DELETE>
 <!--F4204696A73647E2AA9700106C00C7A5-->  
<EM_OBUIAPP_SHOW_SELECT><![CDATA[Y]]></EM_OBUIAPP_SHOW_SELECT>
diff -r b99f3051275b -r 6deeeb7a363e src-db/database/sourcedata/AD_TABLE.xml
--- a/src-db/database/sourcedata/AD_TABLE.xml   Thu May 29 21:00:40 2014 +0000
+++ b/src-db/database/sourcedata/AD_TABLE.xml   Thu May 29 15:32:20 2014 +0200
@@ -11031,7 +11031,8 @@
 <!--A9BC62219E644720867F6402B0C25933-->  
<TABLENAME><![CDATA[C_RM_RFC_PE_LINES]]></TABLENAME>
 <!--A9BC62219E644720867F6402B0C25933-->  
<CLASSNAME><![CDATA[C_RM_RFC_PE_LINES]]></CLASSNAME>
 <!--A9BC62219E644720867F6402B0C25933-->  <ISVIEW><![CDATA[N]]></ISVIEW>
-<!--A9BC62219E644720867F6402B0C25933-->  
<ACCESSLEVEL><![CDATA[3]]></ACCESSLEVEL>
+<!--A9BC62219E644720867F6402B0C25933-->  
<ACCESSLEVEL><![CDATA[1]]></ACCESSLEVEL>
+<!--A9BC62219E644720867F6402B0C25933-->  
<AD_WINDOW_ID><![CDATA[FF808081330213E60133021822E40007]]></AD_WINDOW_ID>
 <!--A9BC62219E644720867F6402B0C25933-->  
<ISSECURITYENABLED><![CDATA[N]]></ISSECURITYENABLED>
 <!--A9BC62219E644720867F6402B0C25933-->  
<ISDELETEABLE><![CDATA[Y]]></ISDELETEABLE>
 <!--A9BC62219E644720867F6402B0C25933-->  
<ISHIGHVOLUME><![CDATA[N]]></ISHIGHVOLUME>
diff -r b99f3051275b -r 6deeeb7a363e 
src-db/database/sourcedata/OBUIAPP_PARAMETER.xml
--- a/src-db/database/sourcedata/OBUIAPP_PARAMETER.xml  Thu May 29 21:00:40 
2014 +0000
+++ b/src-db/database/sourcedata/OBUIAPP_PARAMETER.xml  Thu May 29 15:32:20 
2014 +0200
@@ -318,7 +318,7 @@
 <!--DAC023BDC4D2413D9B5F9ECD5411E39D-->  
<FIELDLENGTH><![CDATA[0]]></FIELDLENGTH>
 <!--DAC023BDC4D2413D9B5F9ECD5411E39D-->  
<ISMANDATORY><![CDATA[N]]></ISMANDATORY>
 <!--DAC023BDC4D2413D9B5F9ECD5411E39D-->  
<AD_ELEMENT_ID><![CDATA[B27C7AF72FEFEC33E040007F0100076A]]></AD_ELEMENT_ID>
-<!--DAC023BDC4D2413D9B5F9ECD5411E39D-->  <ISFIXED><![CDATA[N]]></ISFIXED>
+<!--DAC023BDC4D2413D9B5F9ECD5411E39D-->  <ISFIXED><![CDATA[Y]]></ISFIXED>
 <!--DAC023BDC4D2413D9B5F9ECD5411E39D-->  
<EVALUATEFIXEDVALUE><![CDATA[N]]></EVALUATEFIXEDVALUE>
 <!--DAC023BDC4D2413D9B5F9ECD5411E39D-->  
<OBUIAPP_PROCESS_ID><![CDATA[30A4E65B69B14134A78C7B270D3502F7]]></OBUIAPP_PROCESS_ID>
 <!--DAC023BDC4D2413D9B5F9ECD5411E39D-->  
<STARTINNEWLINE><![CDATA[N]]></STARTINNEWLINE>
diff -r b99f3051275b -r 6deeeb7a363e 
src/org/openbravo/common/datasource/ResultMapCriteriaUtils.java
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/openbravo/common/datasource/ResultMapCriteriaUtils.java   Thu May 
29 15:32:20 2014 +0200
@@ -0,0 +1,520 @@
+package org.openbravo.common.datasource;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Map;
+
+import org.apache.commons.lang.StringUtils;
+import org.codehaus.jettison.json.JSONArray;
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
+import org.openbravo.base.structure.BaseOBObject;
+import org.openbravo.service.json.JsonUtils;
+
+class ResultMapCriteriaUtils {
+  private static final String CRITERIA_KEY = "criteria";
+  private static final String VALUE_KEY = "value";
+  private static final String FIELD_NAME_KEY = "fieldName";
+  private static final String OPERATOR_KEY = "operator";
+
+  private static final String OPERATOR_AND = "and";
+  private static final String OPERATOR_OR = "or";
+
+  private static final String OPERATOR_EQUALS = "equals";
+  private static final String OPERATOR_NOTEQUAL = "notEqual";
+  private static final String OPERATOR_IEQUALS = "iEquals";
+  private static final String OPERATOR_INOTEQUAL = "iNotEqual";
+  private static final String OPERATOR_GREATERTHAN = "greaterThan";
+  private static final String OPERATOR_LESSTHAN = "lessThan";
+  private static final String OPERATOR_GREATEROREQUAL = "greaterOrEqual";
+  private static final String OPERATOR_LESSOREQUAL = "lessOrEqual";
+  private static final String OPERATOR_IGREATERTHAN = "iGreaterThan";
+  private static final String OPERATOR_ILESSTHAN = "iLessThan";
+  private static final String OPERATOR_IGREATEROREQUAL = "iGreaterOrEqual";
+  private static final String OPERATOR_ILESSOREQUAL = "iLessOrEqual";
+  private static final String OPERATOR_CONTAINS = "contains";
+  private static final String OPERATOR_STARTSWITH = "startsWith";
+  private static final String OPERATOR_ENDSWITH = "endsWith";
+  private static final String OPERATOR_ICONTAINS = "iContains";
+  private static final String OPERATOR_ISTARTSWITH = "iStartsWith";
+  private static final String OPERATOR_IENDSWITH = "iEndsWith";
+  private static final String OPERATOR_NOTCONTAINS = "notContains";
+  private static final String OPERATOR_NOTSTARTSWITH = "notStartsWith";
+  private static final String OPERATOR_NOTENDSWITH = "notEndsWith";
+  private static final String OPERATOR_INOTCONTAINS = "iNotContains";
+  private static final String OPERATOR_INOTSTARTSWITH = "iNotStartsWith";
+  private static final String OPERATOR_INOTENDSWITH = "iNotEndsWith";
+  // private static final String OPERATOR_REGEXP = "regexp";
+  // private static final String OPERATOR_IREGEXP = "iregexp";
+  private static final String OPERATOR_ISNULL = "isNull";
+  private static final String OPERATOR_NOTNULL = "notNull";
+  private static final String OPERATOR_INSET = "inSet";
+  private static final String OPERATOR_NOTINSET = "notInSet";
+  private static final String OPERATOR_EQUALSFIELD = "equalsField";
+  private static final String OPERATOR_NOTEQUALFIELD = "notEqualField";
+  private static final String OPERATOR_GREATERTHANFIElD = "greaterThanField";
+  private static final String OPERATOR_LESSTHANFIELD = "lessThanField";
+  private static final String OPERATOR_GREATEROREQUALFIELD = 
"greaterOrEqualField";
+  private static final String OPERATOR_LESSOREQUALFIElD = "lessOrEqualField";
+  private static final String OPERATOR_CONTAINSFIELD = "containsField";
+  private static final String OPERATOR_STARTSWITHFIELD = "startsWithField";
+  private static final String OPERATOR_ENDSWITHFIELD = "endsWithField";
+  private static final String OPERATOR_NOT = "not";
+  private static final String OPERATOR_BETWEEN = "between";
+  private static final String OPERATOR_BETWEENINCLUSIVE = "betweenInclusive";
+  private static final String OPERATOR_IBETWEEN = "iBetween";
+  private static final String OPERATOR_IBETWEENINCLUSIVE = "iBetweenInclusive";
+  private static final String OPERATOR_EXISTS = "exists";
+
+  Map<String, Object> recordMap;
+  JSONArray criteriaArray;
+  boolean mainOperatorIsAnd;
+
+  private int UTCServerMinutesTimeZoneDiff = 0;
+  private int clientUTCMinutesTimeZoneDiff = 0;
+
+  private SimpleDateFormat simpleDateFormat = JsonUtils.createDateFormat();
+  private SimpleDateFormat simpleDateTimeFormat = 
JsonUtils.createJSTimeFormat();
+
+  ResultMapCriteriaUtils(Map<String, Object> orderMap, Map<String, String> 
parameters) {
+    JSONArray _criteriaArray = null;
+    try {
+      _criteriaArray = (JSONArray) 
JsonUtils.buildCriteria(parameters).get("criteria");
+    } catch (JSONException e) {
+      _criteriaArray = null;
+    }
+    String mainOperator = parameters.get("operator");
+
+    this.recordMap = orderMap;
+    this.criteriaArray = _criteriaArray;
+    this.mainOperatorIsAnd = OPERATOR_AND.equals(mainOperator);
+  }
+
+  boolean applyFilter() throws JSONException {
+    if (criteriaArray == null) {
+      return true;
+    }
+    boolean finalResult = mainOperatorIsAnd;
+    for (int i = 0; i < criteriaArray.length(); i++) {
+      // Each element of the criteria array is added assuming an OR statement.
+      JSONObject criteria = criteriaArray.getJSONObject(i);
+      boolean critResult = parseCriteria(criteria);
+      if (mainOperatorIsAnd) {
+        finalResult &= critResult;
+      } else {
+        finalResult |= critResult;
+      }
+    }
+    return finalResult;
+  }
+
+  private boolean parseCriteria(JSONObject jsonCriteria) throws JSONException {
+    // a constructor so the content is an advanced criteria
+    if (jsonCriteria.has("_constructor") || hasOrAndOperator(jsonCriteria)) {
+      return parseAdvancedCriteria(jsonCriteria);
+    }
+    return parseSingleClause(jsonCriteria);
+  }
+
+  private boolean hasOrAndOperator(JSONObject jsonCriteria) throws 
JSONException {
+    if (!jsonCriteria.has(OPERATOR_KEY)) {
+      return mainOperatorIsAnd;
+    }
+    return OPERATOR_OR.equals(jsonCriteria.get(OPERATOR_KEY))
+        || OPERATOR_AND.equals(jsonCriteria.get(OPERATOR_KEY));
+  }
+
+  private boolean parseSingleClause(JSONObject jsonCriteria) throws 
JSONException {
+    String operator = jsonCriteria.getString(OPERATOR_KEY);
+
+    if (operator.equals(OPERATOR_BETWEEN) || 
operator.equals(OPERATOR_BETWEENINCLUSIVE)
+        || operator.equals(OPERATOR_IBETWEEN) || 
operator.equals(OPERATOR_IBETWEENINCLUSIVE)) {
+      return parseBetween(jsonCriteria, operator, true);
+    }
+
+    Object value = jsonCriteria.has(VALUE_KEY) ? jsonCriteria.get(VALUE_KEY) : 
null;
+
+    if (operator.equals(OPERATOR_EXISTS)) {
+      // not supported
+      return mainOperatorIsAnd;
+    }
+
+    String fieldName = jsonCriteria.getString(FIELD_NAME_KEY);
+
+    // translate to a OR for each value
+    if (value instanceof JSONArray) {
+      final JSONArray jsonArray = (JSONArray) value;
+      final JSONObject advancedCriteria = new JSONObject();
+      advancedCriteria.put(OPERATOR_KEY, OPERATOR_OR);
+      final JSONArray subCriteria = new JSONArray();
+      for (int i = 0; i < jsonArray.length(); i++) {
+        final JSONObject subCriterion = new JSONObject();
+        subCriterion.put(OPERATOR_KEY, operator);
+        subCriterion.put(FIELD_NAME_KEY, fieldName);
+        subCriterion.put(VALUE_KEY, jsonArray.get(i));
+        subCriteria.put(i, subCriterion);
+      }
+      advancedCriteria.put(CRITERIA_KEY, subCriteria);
+      return parseAdvancedCriteria(advancedCriteria);
+    }
+
+    // Retrieves the UTC time zone offset of the client
+    if (jsonCriteria.has("minutesTimezoneOffset")) {
+      int clientMinutesTimezoneOffset = 
Integer.parseInt(jsonCriteria.get("minutesTimezoneOffset")
+          .toString());
+      Calendar now = Calendar.getInstance();
+      // Obtains the UTC time zone offset of the server
+      int serverMinutesTimezoneOffset = (now.get(Calendar.ZONE_OFFSET) + now
+          .get(Calendar.DST_OFFSET)) / (1000 * 60);
+      // Obtains the time zone offset between the server and the client
+      clientUTCMinutesTimeZoneDiff = clientMinutesTimezoneOffset;
+      UTCServerMinutesTimeZoneDiff = serverMinutesTimezoneOffset;
+    }
+
+    if (operator.equals(OPERATOR_ISNULL) || operator.equals(OPERATOR_NOTNULL)) 
{
+      value = null;
+    }
+
+    // if a comparison is done on an equal date then replace
+    // with a between start time and end time on that date
+    if (operator.equals(OPERATOR_EQUALS) || 
operator.equals(OPERATOR_EQUALSFIELD)) {
+      Object curValue = recordMap.get(fieldName);
+      if (curValue instanceof Date) {
+        if (operator.equals(OPERATOR_EQUALS)) {
+          return parseSimpleClause(fieldName, OPERATOR_GREATEROREQUAL, value)
+              && parseSimpleClause(fieldName, OPERATOR_LESSOREQUAL, value);
+
+        } else {
+          return parseSimpleClause(fieldName, OPERATOR_GREATEROREQUALFIELD, 
value)
+              && parseSimpleClause(fieldName, OPERATOR_LESSOREQUALFIElD, 
value);
+        }
+      }
+    }
+
+    return parseSimpleClause(fieldName, operator, value);
+  }
+
+  private boolean parseBetween(JSONObject jsonCriteria, String operator, 
boolean inclusive)
+      throws JSONException {
+    final String fieldName = jsonCriteria.getString(FIELD_NAME_KEY);
+    final Object start = jsonCriteria.get("start");
+    final Object end = jsonCriteria.get("end");
+    final boolean leftClause = parseSimpleClause(fieldName, 
getBetweenOperator(operator, false),
+        start);
+    final boolean rightClause = parseSimpleClause(fieldName, 
getBetweenOperator(operator, true),
+        end);
+    return leftClause && rightClause;
+  }
+
+  private boolean parseSimpleClause(String fieldName, String operator, Object 
value)
+      throws JSONException {
+
+    String hqlOperator = getHqlOperator(operator);
+    String strField = fieldName;
+    boolean filterIdentifier = false;
+    // if (strField.endsWith("$_identifier")) {
+    // strField = strField.substring(0, strField.length() - 12);
+    // filterIdentifier = true;
+    // }
+    Object mapValue = recordMap.get(strField);
+    if (operator.equals(OPERATOR_NOTNULL)) {
+      return mapValue != null;
+    } else if (operator.equals(OPERATOR_ISNULL)) {
+      return mapValue == null;
+    }
+
+    Object localValue = value;
+    if (ignoreCase(mapValue, operator)) {
+      localValue = localValue.toString().toUpperCase();
+    }
+
+    boolean returnVal = mainOperatorIsAnd;
+
+    if ("id".equals(strField)) {
+      // ID is always equals
+      returnVal = mapValue != JSONObject.NULL && ((String) 
localValue).equals((String) mapValue);
+    } else if (filterIdentifier) {
+      BaseOBObject currentVal = (BaseOBObject) mapValue;
+      String strCurrValIdentifier = currentVal.getIdentifier();
+      String strCurrentFilter = (String) localValue;
+      returnVal = StringUtils.containsIgnoreCase(strCurrValIdentifier, 
strCurrentFilter);
+    } else if (mapValue instanceof Boolean) {
+      returnVal = (Boolean) mapValue == (Boolean) localValue;
+    } else if (mapValue instanceof BigDecimal) {
+      BigDecimal filterValue = new BigDecimal((Integer) localValue);
+      int compare = filterValue.compareTo((BigDecimal) mapValue);

------------------------------------------------------------------------------
Time is money. Stop wasting it! Get your web API in 5 minutes.
www.restlet.com/download
http://p.sf.net/sfu/restlet
_______________________________________________
Openbravo-commits mailing list
Openbravo-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to