Author: nmalin
Date: Thu Jun 30 19:38:13 2016
New Revision: 1750856

URL: http://svn.apache.org/viewvc?rev=1750856&view=rev
Log:
Add new functionnality on auto-complete lookup field do offer the possibility 
for developper to add condition dates for the search on the lookup screen.

To automatically filter on fromDate thruDate attribute with value now, init a 
condition map like 
     <set field="conditionDates.default" value="Y"/>

To use specific attribute date with value now
      <set field="conditionDates.fromDateName" value="startDate"/>
      <set field="conditionDates.thruDateName" value="endDate"/>

To use an other value than now
      <set field="conditionDates.filterByDateValue" 
from-field="invoice.invoiceDate"/>
or
      <set field="conditionDates.filterByDateValue" value="2016-01-01 00:00:00" 
type="Timestamp"/>

You can also set only low border date 
      <set field="conditionDates.fromDateName" value="fromDate"/>
Or you can also set only high border date 
      <set field="conditionDates.thruDateName" value="endDate"/>

Thanks to Kongrath Suankaewmanee for the proposition follow on issue OFBIZ-7266

Modified:
    ofbiz/trunk/framework/common/groovyScripts/FindAutocompleteOptions.groovy

Modified: 
ofbiz/trunk/framework/common/groovyScripts/FindAutocompleteOptions.groovy
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/groovyScripts/FindAutocompleteOptions.groovy?rev=1750856&r1=1750855&r2=1750856&view=diff
==============================================================================
--- ofbiz/trunk/framework/common/groovyScripts/FindAutocompleteOptions.groovy 
(original)
+++ ofbiz/trunk/framework/common/groovyScripts/FindAutocompleteOptions.groovy 
Thu Jun 30 19:38:13 2016
@@ -18,6 +18,7 @@
  */
 
 import org.ofbiz.base.util.StringUtil;
+import org.ofbiz.base.util.UtilDateTime;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.entity.util.EntityFindOptions;
 import org.ofbiz.entity.condition.EntityCondition;
@@ -47,6 +48,23 @@ if (searchValueFieldName) {
 def searchType = context.searchType;
 def displayFieldsSet = null;
 
+def conditionDates = context.conditionDates;
+def fromDateName = null;
+def thruDateName = null;
+def filterByDateValue = null;
+
+//If conditionDates is present on context, resolve values use add condition 
date to the condition search
+if (conditionDates) {
+    filterByDateValue = conditionDates.filterByDateValue ?: 
UtilDateTime.nowTimestamp();
+    fromDateName = conditionDates.fromDateName ?: null;
+    thruDateName = conditionDates.thruDateName ?: null;
+    //if the field filterByDate is present, init default value for fromDate 
and thruDate
+    if (!fromDateName && !thruDateName) {
+        fromDateName = "fromDate";
+        thruDateName = "thruDate";
+    }
+}
+
 if (searchFields && fieldValue) {
     def searchFieldsList = StringUtil.toList(searchFields);
     displayFieldsSet = StringUtil.toSet(displayFields);
@@ -102,6 +120,24 @@ if (orExprs && entityName && displayFiel
     if (context.andCondition && context.andCondition instanceof 
EntityCondition) {
         mainAndConds.add(context.andCondition);
     }
+    if (conditionDates) {
+        def condsDateList = [];
+        if (thruDateName) {
+            def condsByThruDate = [];
+            
condsByThruDate.add(EntityCondition.makeCondition(EntityFieldValue.makeFieldValue(thruDateName),
 EntityOperator.GREATER_THAN, filterByDateValue));
+            
condsByThruDate.add(EntityCondition.makeCondition(EntityFieldValue.makeFieldValue(thruDateName),
 EntityOperator.EQUALS, null));
+            condsDateList.add(EntityCondition.makeCondition(condsByThruDate, 
EntityOperator.OR));
+        }
+
+        if (fromDateName) {
+            def condsByFromDate = [];
+            
condsByFromDate.add(EntityCondition.makeCondition(EntityFieldValue.makeFieldValue(fromDateName),
 EntityOperator.LESS_THAN_EQUAL_TO, filterByDateValue));
+            
condsByFromDate.add(EntityCondition.makeCondition(EntityFieldValue.makeFieldValue(fromDateName),
 EntityOperator.EQUALS, null));
+            condsDateList.add(EntityCondition.makeCondition(condsByFromDate, 
EntityOperator.OR));
+        }
+
+        mainAndConds.add(EntityCondition.makeCondition(condsDateList, 
EntityOperator.AND));
+    }
 
     def entityConditionList = EntityCondition.makeCondition(mainAndConds, 
EntityOperator.AND);
 


Reply via email to