From 3974a3cb1193e5720024fa566c8209430254096a Mon Sep 17 00:00:00 2001 From: Johannes Hoermann <j.hoermann@adito.de> Date: Mon, 14 Jan 2019 11:47:56 +0100 Subject: [PATCH] [Projekt: Entwicklung - Neon][TicketNr.: 1030762][Privatadresse bei Firma entfernen (Zweites Keyword anlegen)] --- entity/Address_entity/Address_entity.aod | 7 +++++ .../entityfields/addr_type/documentation.adoc | 5 ++++ .../addr_type/possibleItemsProcess.js | 26 +++++++++++++++--- .../entityfields/relation_id/valueProcess.js | 2 +- .../entityfields/relationtype/valueProcess.js | 5 ++++ .../db_changes/data/example_org/ORG_gfk.xml | 2 +- process/Keyword_lib/process.js | 27 ++++++++++++++----- process/Relation_lib/process.js | 4 +-- 8 files changed, 64 insertions(+), 14 deletions(-) create mode 100644 entity/Address_entity/entityfields/addr_type/documentation.adoc create mode 100644 entity/Address_entity/entityfields/relationtype/valueProcess.js diff --git a/entity/Address_entity/Address_entity.aod b/entity/Address_entity/Address_entity.aod index 6feb8d1d17..429a2c68fc 100644 --- a/entity/Address_entity/Address_entity.aod +++ b/entity/Address_entity/Address_entity.aod @@ -23,6 +23,7 @@ </entityField> <entityField> <name>ADDR_TYPE</name> + <documentation>%aditoprj%/entity/Address_entity/entityfields/addr_type/documentation.adoc</documentation> <title>Addresstype</title> <possibleItemsProcess>%aditoprj%/entity/Address_entity/entityfields/addr_type/possibleItemsProcess.js</possibleItemsProcess> </entityField> @@ -59,6 +60,7 @@ </entityField> <entityField> <name>RELATION_ID</name> + <mandatory v="true" /> <valueProcess>%aditoprj%/entity/Address_entity/entityfields/relation_id/valueProcess.js</valueProcess> </entityField> <entityField> @@ -147,6 +149,11 @@ <triggerRecalculation v="false" /> <description>PARAMETER</description> </entityParameter> + <entityField> + <name>RelationType</name> + <contentType>NUMBER</contentType> + <valueProcess>%aditoprj%/entity/Address_entity/entityfields/relationtype/valueProcess.js</valueProcess> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Address_entity/entityfields/addr_type/documentation.adoc b/entity/Address_entity/entityfields/addr_type/documentation.adoc new file mode 100644 index 0000000000..71a684ab1f --- /dev/null +++ b/entity/Address_entity/entityfields/addr_type/documentation.adoc @@ -0,0 +1,5 @@ +ADDR_TYPE +========= + +The Keyword ADDRESS.TYPE contains the following custom properties: {org: true, pers: false} +The types are filtered by the current relation type in the possibleItemsProcess. \ No newline at end of file diff --git a/entity/Address_entity/entityfields/addr_type/possibleItemsProcess.js b/entity/Address_entity/entityfields/addr_type/possibleItemsProcess.js index 5403dab1fe..9b37906c7b 100644 --- a/entity/Address_entity/entityfields/addr_type/possibleItemsProcess.js +++ b/entity/Address_entity/entityfields/addr_type/possibleItemsProcess.js @@ -1,7 +1,27 @@ +import("system.vars"); import("system.result"); import("Keyword_lib"); +import("Relation_lib"); -var items; +var type = parseInt(vars.get("$field.RelationType")); +var fields = []; -items = KeywordUtils.getStandardArray("ADDRESS.TYPE"); -result.object(items); \ No newline at end of file +switch (type) { + case 1: + fields = ["org"]; + break; + case 2: + case 3: + fields = ["pers"]; + break; +} + +result.object(KeywordUtils.getStandardArrayProps("ADDRESS.TYPE").filter(function (pKeyword) { + for (let i = 0; i < fields.length; i++) { + if (pKeyword[2][fields[i]]) { + return true; + } + } + + return false; +})); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/relation_id/valueProcess.js b/entity/Address_entity/entityfields/relation_id/valueProcess.js index 2d085e3aff..61a5ce97dd 100644 --- a/entity/Address_entity/entityfields/relation_id/valueProcess.js +++ b/entity/Address_entity/entityfields/relation_id/valueProcess.js @@ -4,6 +4,6 @@ import("system.vars"); if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) { - if(vars.exists("$param.RelId_param") && vars.get("$param.RelId_param") != null) + if(vars.exists("$param.RelId_param") && vars.getString("$param.RelId_param")) result.string(vars.getString("$param.RelId_param")); } \ No newline at end of file diff --git a/entity/Address_entity/entityfields/relationtype/valueProcess.js b/entity/Address_entity/entityfields/relationtype/valueProcess.js new file mode 100644 index 0000000000..73d8117e07 --- /dev/null +++ b/entity/Address_entity/entityfields/relationtype/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("system.vars"); +import("Relation_lib") + +result.object(RelationUtils.getRelationTypeByRelation(vars.get("$field.RELATION_ID"))); \ No newline at end of file diff --git a/others/db_changes/data/example_org/ORG_gfk.xml b/others/db_changes/data/example_org/ORG_gfk.xml index b1d396a2c7..1b4ab630fb 100644 --- a/others/db_changes/data/example_org/ORG_gfk.xml +++ b/others/db_changes/data/example_org/ORG_gfk.xml @@ -50,7 +50,7 @@ </insert> <insert tableName="ADDRESS"> <column name="STATE" value="Bayern"/> - <column name="ADDR_TYPE" valueNumeric="2"/> + <column name="ADDR_TYPE" valueNumeric="1"/> <column name="DATE_NEW" valueDate="2018-07-02T00:00:00"/> <column name="CITY" value="München"/> <column name="COUNTRY" value="DE"/> diff --git a/process/Keyword_lib/process.js b/process/Keyword_lib/process.js index 059b246bec..d75223a4bb 100644 --- a/process/Keyword_lib/process.js +++ b/process/Keyword_lib/process.js @@ -23,6 +23,20 @@ function KeywordUtils(){ KeywordUtils.getStandardArray = function(keywordType){ return KeywordUtils.createKeyword(keywordType).toArray(["id", "name"]); } + + /** + * same as getStandardArray but also returns the custom properties + * @param {String} keywordType specifies the type of the keyword and therefore the list elements; e.g. "COUNTRY" + * @return {Array} a 2D array in form of [["id1", "name1", {"prop1":"prop"}], ["idN", "nameN", {"prop1":"prop"}]] + * @example + * var items; + * + * items = KeywordUtils.getStandardArray("ADDRESS.TYPE"); + * result.object(items); + */ + KeywordUtils.getStandardArrayProps = function(keywordType){ + return KeywordUtils.createKeyword(keywordType).toArray(["id", "name", "customProperties"]); + } /** * get a Keyword by type and key @@ -119,10 +133,10 @@ function KeywordUtils(){ break; case "ADDRESS.TYPE": valueContainer = _createKeywordEntriesContainer([ - _createKeywordEntry("1", translate.text("Office address")) - ,_createKeywordEntry("2", translate.text("Home address")) - ,_createKeywordEntry("3", translate.text("Delivery address")) - ,_createKeywordEntry("4", translate.text("Post office box")) + _createKeywordEntry("1", translate.text("Office address"), null, {org: true, pers: false}) + ,_createKeywordEntry("2", translate.text("Home address"), null, {org: false, pers: true}) + ,_createKeywordEntry("3", translate.text("Delivery address"), null, {org: true, pers: true}) + ,_createKeywordEntry("4", translate.text("Post office box"), null, {org: true, pers: true}) ]); break; case "ORG.TYPE": @@ -405,14 +419,13 @@ function KeywordUtils(){ }; _getPropsForKeyFn = function(key, fields) { - var keyObject, i, l, currentRow, currentField; + var keyObject, i, currentRow, currentField; keyObject = valueContainer[key]; if (keyObject == undefined) return [];//TODO: throw error instead? - l = fields.length; currentRow = []; - for (i = 0; i < l; i++){ + for (i = 0; i < fields.length; i++){ currentField = fields[i]; //check if the passed fieldnames match the existing fieldnames (<=> properties in the object) //to prevent errors and unexpected behaviour diff --git a/process/Relation_lib/process.js b/process/Relation_lib/process.js index b28903b7db..fdcced185a 100644 --- a/process/Relation_lib/process.js +++ b/process/Relation_lib/process.js @@ -16,7 +16,7 @@ function RelationUtils() {} * If you already have persId and orgId from the RELATION table, use getRelationTypeByPersOrg() <br> * @param {String} pRelationId * <br> - * @return {String} 0 if relationId not found <br> + * @return {Integer} 0 if relationId not found <br> * 1 if organisation <br> * 2 if privat person <br> * 3 if person of an organisation <br> @@ -55,7 +55,7 @@ RelationUtils.getRelationTypeByRelation = function(pRelationId) * @param {String} pPersId selected from the RELATION table * @param {String} pOrgId selected from the RELATION table * <br> - * @return {String} <br>1 if organisation <br> + * @return {Integer} <br>1 if organisation <br> * 2 if privat person <br> * 3 if person of an organisation <br> */ -- GitLab