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);