details:   https://code.openbravo.com/erp/devel/pi/rev/6f3c663497e9
changeset: 13812:6f3c663497e9
user:      Martin Taal <martin.taal <at> openbravo.com>
date:      Tue Sep 20 19:08:40 2011 +0200
summary:   Fixes issue 18079: Date filter is not working correctly
When working with a range of dates, set the time to 0 or 24 hours

diffstat:

 
modules/org.openbravo.service.json/src/org/openbravo/service/json/AdvancedQueryBuilder.java
 |  45 +++++++++-
 1 files changed, 41 insertions(+), 4 deletions(-)

diffs (83 lines):

diff -r c6d5f2fb5c71 -r 6f3c663497e9 
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
       Tue Sep 20 17:57:23 2011 +0200
+++ 
b/modules/org.openbravo.service.json/src/org/openbravo/service/json/AdvancedQueryBuilder.java
       Tue Sep 20 19:08:40 2011 +0200
@@ -93,7 +93,7 @@
   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_LESSOREQUALFIElD = "lessOrEqualField";
   private static final String OPERATOR_CONTAINSFIELD = "containsField";
   private static final String OPERATOR_STARTSWITHFIELD = "startsWithField";
   private static final String OPERATOR_ENDSWITHFIELD = "endsWithField";
@@ -351,7 +351,7 @@
     if (operator.equals(OPERATOR_EQUALSFIELD) || 
operator.equals(OPERATOR_NOTEQUALFIELD)
         || operator.equals(OPERATOR_GREATERTHANFIElD) || 
operator.equals(OPERATOR_LESSTHANFIELD)
         || operator.equals(OPERATOR_GREATEROREQUALFIELD)
-        || operator.equals(OPERATOR_LESSOREQUALFIEld) || 
operator.equals(OPERATOR_CONTAINSFIELD)
+        || operator.equals(OPERATOR_LESSOREQUALFIElD) || 
operator.equals(OPERATOR_CONTAINSFIELD)
         || operator.equals(OPERATOR_STARTSWITHFIELD) || 
operator.equals(OPERATOR_ENDSWITHFIELD)) {
       final List<Property> properties = JsonUtils
           .getPropertiesOnPath(getEntity(), value.toString());
@@ -500,7 +500,28 @@
       }
     } else if (Date.class.isAssignableFrom(property.getPrimitiveObjectType())) 
{
       try {
-        return simpleDateFormat.parse(value.toString());
+        final Date date = simpleDateFormat.parse(value.toString());
+        // move the date to the beginning of the day
+        if (isGreaterOperator(operator)) {
+          final Calendar calendar = Calendar.getInstance();
+          calendar.setTime(date);
+          calendar.set(Calendar.HOUR, 0);
+          calendar.set(Calendar.MINUTE, 0);
+          calendar.set(Calendar.SECOND, 0);
+          calendar.set(Calendar.MILLISECOND, 0);
+          return calendar.getTime();
+        } else if (isLesserOperator(operator)) {
+          // move the data to the end of the day
+          final Calendar calendar = Calendar.getInstance();
+          calendar.setTime(date);
+          calendar.set(Calendar.HOUR, 23);
+          calendar.set(Calendar.MINUTE, 59);
+          calendar.set(Calendar.SECOND, 59);
+          calendar.set(Calendar.MILLISECOND, 999);
+          return calendar.getTime();
+        } else {
+          return date;
+        }
       } catch (Exception e) {
         throw new IllegalArgumentException(e);
       }
@@ -508,6 +529,22 @@
     return value;
   }
 
+  private boolean isGreaterOperator(String operator) {
+    return operator != null
+        && (operator.equals(OPERATOR_GREATERTHAN) || 
operator.equals(OPERATOR_GREATEROREQUAL)
+            || operator.equals(OPERATOR_IGREATERTHAN) || 
operator.equals(OPERATOR_IGREATEROREQUAL)
+            || operator.equals(OPERATOR_GREATERTHANFIElD) || operator
+            .equals(OPERATOR_GREATEROREQUALFIELD));
+  }
+
+  private boolean isLesserOperator(String operator) {
+    return operator != null
+        && (operator.equals(OPERATOR_LESSTHAN) || 
operator.equals(OPERATOR_LESSOREQUAL)
+            || operator.equals(OPERATOR_ILESSTHAN) || 
operator.equals(OPERATOR_ILESSOREQUAL)
+            || operator.equals(OPERATOR_LESSTHANFIELD) || operator
+            .equals(OPERATOR_LESSOREQUALFIElD));
+  }
+
   private String computeLeftWhereClauseForIdentifier(Property property, String 
key,
       String leftWherePart) {
 
@@ -700,7 +737,7 @@
       return "<";
     } else if (operator.equals(OPERATOR_GREATEROREQUALFIELD)) {
       return ">=";
-    } else if (operator.equals(OPERATOR_LESSOREQUALFIEld)) {
+    } else if (operator.equals(OPERATOR_LESSOREQUALFIElD)) {
       return "<=";
     } else if (operator.equals(OPERATOR_CONTAINSFIELD)) {
       return "like";

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to