From df2d7de9022df1bea07b2247c6b0e3ed9306c6eb Mon Sep 17 00:00:00 2001
From: "S.Listl" <S.Listl@SLISTL.aditosoftware.local>
Date: Mon, 27 May 2019 11:52:08 +0200
Subject: [PATCH] JditoFilterUtils made ready for filter tree

---
 entity/Employee_entity/Employee_entity.aod |  1 +
 process/JditoFilter_lib/process.js         | 98 +++++++++++-----------
 2 files changed, 52 insertions(+), 47 deletions(-)

diff --git a/entity/Employee_entity/Employee_entity.aod b/entity/Employee_entity/Employee_entity.aod
index 9dcc179921..bb246379f5 100644
--- a/entity/Employee_entity/Employee_entity.aod
+++ b/entity/Employee_entity/Employee_entity.aod
@@ -158,6 +158,7 @@
     </entityField>
     <entityField>
       <name>ROLES</name>
+      <searchable v="false" />
     </entityField>
     <entityConsumer>
       <name>EmployeeRoles</name>
diff --git a/process/JditoFilter_lib/process.js b/process/JditoFilter_lib/process.js
index 0213e4a5e6..9d1a84dfd3 100644
--- a/process/JditoFilter_lib/process.js
+++ b/process/JditoFilter_lib/process.js
@@ -4,7 +4,7 @@ import("Sql_lib");
  * object for filtering records
  * 
  * @param {Array} pColumns the column names
- * @param {String|Object} pFilter the filter object
+ * @param {Object} pFilter the filter object
  */
 function JditoFilterHelper (pColumns, pFilter) 
 {
@@ -15,12 +15,7 @@ function JditoFilterHelper (pColumns, pFilter)
             columnMap[row] = i;
     });
     this._columnMap = columnMap;
-    
-    if (pFilter.length) //check if pFilter is a string
-        pFilter = JSON.parse(pFilter);
-    
-    this._operator = pFilter.operator;
-    this._filters = pFilter.childs;
+    this._filter = pFilter;
 }
 
 /**
@@ -32,55 +27,64 @@ function JditoFilterHelper (pColumns, pFilter)
  */
 JditoFilterHelper.prototype.checkRecord = function (pRow)
 {
-    if (this._filters.length == 0)
+    if (this._filter.length == 0)
         return true;
     
-    if (this._operator == "AND")
-        return this._filters.every(_testFn, this);
+    return _testRecord.call(this, this._filter);
     
-    return this._filters.some(_testFn, this);
-    
-    function _testFn (pFilter)
+    function _testRecord (pCondition)
     {
-        let value = pRow[this._columnMap[pFilter.name]];
-        return this._testValue(value, (pFilter.key || pFilter.value), pFilter.operator);
+        if (pCondition.type == "row")
+        {
+            let value = pRow[this._columnMap[pCondition.name]];
+            return _testValue(value, (pCondition.key || pCondition.value), pCondition.operator);
+        }
+        else if (pCondition.type == "group")
+        {
+            if (pCondition.operator == "AND")
+                return pCondition.childs.every(_testRecord, this);
+            return pCondition.childs.some(_testRecord, this);
+        }
+        return true;
     }
-}
-
-/**
- * compares two values with the given operator
- */
-JditoFilterHelper.prototype._testValue = function (pRowValue, pFilterValue, pOperator)
-{
-    switch (pOperator)
+    
+    /**
+     * compares two values with the given operator
+     */
+    function _testValue (pRowValue, pFilterValue, pOperator)
     {
-        case "CONTAINS":
-            return (new RegExp(pFilterValue)).test(pRowValue);
-        case "CONTAINSNOT":
-            return !(new RegExp(pFilterValue)).test(pRowValue);
-        case "STARTSWITH":
-            return (new RegExp("^" + pFilterValue)).test(pRowValue);
-        case "ENDSWITH":
-            return (new RegExp(pFilterValue + "$")).test(pRowValue);
-        case "EQUAL":
-            return (new RegExp("^" + pFilterValue + "$")).test(pRowValue);
-        case "NOT_EQUAL":
-            return !(new RegExp("^" + pFilterValue + "$")).test(pRowValue);
-        case "LESS":
-            return pRowValue < pFilterValue;
-        case "LESS_OR_EQUAL":
-            return pRowValue <= pFilterValue;
-        case "GREATER":
-            return pRowValue > pFilterValue;
-        case "GREATER_OR_EQUAL":
-            return pRowValue >= pFilterValue;
-        case "ISNULL":
-            return pRowValue == "";
-        case "ISNOTNULL":
-            return pRowValue != "";
+        switch (pOperator)
+        {
+            case "CONTAINS":
+                return (new RegExp(pFilterValue)).test(pRowValue);
+            case "CONTAINSNOT":
+                return !(new RegExp(pFilterValue)).test(pRowValue);
+            case "STARTSWITH":
+                return (new RegExp("^" + pFilterValue)).test(pRowValue);
+            case "ENDSWITH":
+                return (new RegExp(pFilterValue + "$")).test(pRowValue);
+            case "EQUAL":
+                return (new RegExp("^" + pFilterValue + "$")).test(pRowValue);
+            case "NOT_EQUAL":
+                return !(new RegExp("^" + pFilterValue + "$")).test(pRowValue);
+            case "LESS":
+                return pRowValue < pFilterValue;
+            case "LESS_OR_EQUAL":
+                return pRowValue <= pFilterValue;
+            case "GREATER":
+                return pRowValue > pFilterValue;
+            case "GREATER_OR_EQUAL":
+                return pRowValue >= pFilterValue;
+            case "ISNULL":
+                return pRowValue == "";
+            case "ISNOTNULL":
+                return pRowValue != "";
+        }
     }
 }
 
+
+
 /**
  * Provides functions for using the filter with jdito recordcontainers
  * 
-- 
GitLab