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