From b385ba44041f1e875f864c3661bba7ff608a9ab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20V=C3=B6gl?= <a.voegl@adito.de> Date: Tue, 24 Mar 2020 13:42:14 +0000 Subject: [PATCH] Salesproject filter --- .../Salesproject_entity.aod | 14 ++++++ .../filterConditionProcess.js | 33 ++++++++++++++ .../filterFieldsProcess.js | 28 ++++++++++++ .../filterValuesProcess.js | 27 ++++++++++++ .../filterConditionProcess.js | 43 +++++++++++++++++++ .../filterFieldsProcess.js | 29 +++++++++++++ .../filterValuesProcess.js | 2 + process/Classification_lib/process.js | 34 +++++++++++++++ 8 files changed, 210 insertions(+) create mode 100644 entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterConditionProcess.js create mode 100644 entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterFieldsProcess.js create mode 100644 entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterValuesProcess.js create mode 100644 entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterConditionProcess.js create mode 100644 entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterFieldsProcess.js create mode 100644 entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterValuesProcess.js diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod index 7c0c796401..8719e38a09 100644 --- a/entity/Salesproject_entity/Salesproject_entity.aod +++ b/entity/Salesproject_entity/Salesproject_entity.aod @@ -876,6 +876,20 @@ <filterConditionProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess> <filtertype>BASIC</filtertype> </filterExtensionSet> + <filterExtensionSet> + <name>ClassificationSummary_filter</name> + <filterFieldsProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterFieldsProcess.js</filterFieldsProcess> + <filterValuesProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterValuesProcess.js</filterValuesProcess> + <filterConditionProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtensionSet> + <filterExtensionSet> + <name>ClassificationScore_filter</name> + <filterFieldsProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterFieldsProcess.js</filterFieldsProcess> + <filterValuesProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterValuesProcess.js</filterValuesProcess> + <filterConditionProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtensionSet> </filterExtensions> </dbRecordContainer> <indexRecordContainer> diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterConditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterConditionProcess.js new file mode 100644 index 0000000000..a9a81e734d --- /dev/null +++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterConditionProcess.js @@ -0,0 +1,33 @@ +import("Sql_lib"); +import("system.logging"); +import("AttributeFilter_lib"); +import("Entity_lib"); +import("Context_lib"); +import("system.vars"); +import("system.result"); + + +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); +var columnPlaceholder = vars.get("$local.columnPlaceholder"); +var filterCond = vars.get("$local.condition"); +var classificationtypeid = AttributeSearchNameCoder.decode(vars.getString("$local.name")).id; +var sqlCond; + + +var subsqlclosed = newSelect("OBJECT_ROWID").from("CLASSIFICATION").where("CLASSIFICATION.OBJECT_TYPE", "Salesproject"); +var subsqlExtra2 = subsqlclosed.andIfSet("CLASSIFICATION.CLASSIFICATIONTYPE_ID", classificationtypeid); +var subsqlExtra = subsqlclosed.andIfSet("CLASSIFICATION.CLASSIFICATIONSCORE_ID", rawvalue); + +if (operator == "1")//equal + sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subsqlExtra, SqlBuilder.IN()).toString(); +else if (operator == "2")//not equal + sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subsqlExtra, SqlBuilder.NOT_IN()).toString(); +else if (operator == "11")//is not empty + sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subsqlExtra2, SqlBuilder.IN()).toString(); +else if (operator == "12")//is empty + sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subsqlExtra2, SqlBuilder.NOT_IN()).toString(); +else sqlCond = "1=1"; + + +result.string(sqlCond); \ No newline at end of file diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterFieldsProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterFieldsProcess.js new file mode 100644 index 0000000000..a273326204 --- /dev/null +++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterFieldsProcess.js @@ -0,0 +1,28 @@ +import("Sql_lib"); +import("system.translate"); +import("system.logging"); +import("system.util"); +import("KeywordRegistry_basic"); +import("system.entities"); +import("Attribute_lib"); +import("AttributeFilter_lib"); +import("system.result"); + +var res = []; + +var data = newSelect("CLASSIFICATIONTYPEID, CLASSIFICATIONGROUP, SCORETYPE") + .from("classificationtype") + .orderBy("CLASSIFICATIONGROUP").table(); + +data.forEach(function(row){ + var name = AttributeSearchNameCoder.encode(row[0], row[2]); + res.push({ + name: name, + title: translate.text(row[1]) + " / " + translate.text(row[2]), + contentType: "TEXT", + hasDropDownValues: true + }); +}) + +res = JSON.stringify(res); +result.string(res); \ No newline at end of file diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterValuesProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterValuesProcess.js new file mode 100644 index 0000000000..6750d045cc --- /dev/null +++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterValuesProcess.js @@ -0,0 +1,27 @@ +import("IndexSearch_lib"); +import("system.logging"); +import("system.vars"); +import("Sql_lib"); +import("AttributeFilter_lib"); +import("Attribute_lib"); +import("system.result"); +import("system.translate"); + +var filter = JSON.parse(vars.get("$local.filter")); +var nameObject = AttributeSearchNameCoder.decode(filter.name); +var classID = nameObject.id; + + +var res = newSelect("CLASSIFICATIONSCOREID , TITLE") + .from("CLASSIFICATIONSCORE") + .where("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", classID) + .table(); + +for(var i = 0; i < res.length; i++) +{ + res[i][1] = translate.text(res[i][1]) +} + +if (res == null) + res = []; +result.object(res); \ No newline at end of file diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterConditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterConditionProcess.js new file mode 100644 index 0000000000..ffad1bd95e --- /dev/null +++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterConditionProcess.js @@ -0,0 +1,43 @@ +import("Sql_lib"); +import("Classification_lib"); +import("system.logging"); +import("AttributeFilter_lib"); +import("Entity_lib"); +import("Context_lib"); +import("system.vars"); +import("system.result"); + + +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); +var columnPlaceholder = vars.get("$local.columnPlaceholder"); +var filterCond = vars.get("$local.condition"); +var classificationTypeID = AttributeSearchNameCoder.decode(vars.getString("$local.name")).id; +var sqlCond; + +//[["A","A"],["B","B"],["C","C"],["D","D"]] +var scoreValue = ClassificationUtils.mapClassLetter(rawvalue); +var havingCase; +if(scoreValue[0] == 0) + havingCase = "sum(SCORE) >= " + scoreValue[0]; +else + havingCase = "sum(SCORE) > " + scoreValue[0]; + +var having = havingCase + " and sum(SCORE) <= " + scoreValue[1]; + + +var subSqlCond = newSelect("OBJECT_ROWID").from("classification").join("classificationscore", "classiFICATIONSCOREID = CLASSIFICATIONSCORE_ID") + .where("classificationscore.CLASSIFICATIONTYPE_ID", newSelect("classificationtypeId").from("classificationtype") + .where("classificationtype.CLASSIFICATIONGROUP", classificationTypeID), SqlBuilder.IN()).groupBy("classification.OBJECT_ROWID"); + +if (operator == "1")//equal + sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subSqlCond.having(having), SqlBuilder.IN()).toString(); +else if (operator == "2")//not equal + sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subSqlCond.having(having), SqlBuilder.NOT_IN()).toString(); +else if (operator == "11")//is not empty + sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subSqlCond, SqlBuilder.IN()).toString(); +else if (operator == "12")//is empty + sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subSqlCond, SqlBuilder.NOT_IN()).or("SALESPROJECT.SALESPROJECTID", newSelect("OBJECT_ROWID").from("classification"), SqlBuilder.NOT_IN()).toString(); +else sqlCond = "1=1"; + +result.string(sqlCond); diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterFieldsProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterFieldsProcess.js new file mode 100644 index 0000000000..9121b18d61 --- /dev/null +++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterFieldsProcess.js @@ -0,0 +1,29 @@ +import("Sql_lib"); +import("system.translate"); +import("system.logging"); +import("system.util"); +import("KeywordRegistry_basic"); +import("system.entities"); +import("Attribute_lib"); +import("AttributeFilter_lib"); +import("system.result"); + +var res = []; + +var data = newSelect("distinct CLASSIFICATIONGROUP, CLASSIFICATIONGROUP") + .from("classificationtype") + .orderBy("CLASSIFICATIONGROUP").table(); + + +data.forEach(function(row){ + var name = AttributeSearchNameCoder.encode(row[0], row[1]); + res.push({ + name: name, + title: translate.text(row[1]), + contentType: "TEXT", + hasDropDownValues: true + }); +}) + +res = JSON.stringify(res); +result.string(res); \ No newline at end of file diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterValuesProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterValuesProcess.js new file mode 100644 index 0000000000..8a572bd109 --- /dev/null +++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterValuesProcess.js @@ -0,0 +1,2 @@ +import("system.result"); +result.object([["A","A"],["B","B"],["C","C"],["D","D"]]); \ No newline at end of file diff --git a/process/Classification_lib/process.js b/process/Classification_lib/process.js index 126a6dde2d..94dd142e6d 100644 --- a/process/Classification_lib/process.js +++ b/process/Classification_lib/process.js @@ -85,6 +85,40 @@ ClassificationUtils.mapToClass = function(pScore) return "_"; } + +/** + * get the lowest Score for a Letter. + * The classes are hardcoded like this: + * >=0 to 25: D + * > 25 to 50: C + * > 50 to 75: B + * > 75 to 100: A + * + * @return {Array} [min, max] Points the Letter is between + */ +ClassificationUtils.mapClassLetter = function(pLetter) +{ + var res; + switch (pLetter) { + case 'A': + res = [75,100] + break; + case 'B': + res = [50, 75]; + break; + case 'C': + res = [25, 50]; + break; + case 'D': + res = [0, 25]; + break; + } + if(!res) + res = false; + return res; +} + + /** * Get all possible groupnames for a classificationtype * Either as [["group", "group"]] (for the possible items process) -- GitLab