diff --git a/.liquibase/Data_alias/basic/2019.1.4/DSGVO/create_DSGVO.xml b/.liquibase/Data_alias/basic/2019.1.4/DSGVO/create_DSGVO.xml index 935d30e757939d4fae6af0ef7a4e918a64827c58..403ebc547c1cc6be0d2369a64cb7d73100921719 100644 --- a/.liquibase/Data_alias/basic/2019.1.4/DSGVO/create_DSGVO.xml +++ b/.liquibase/Data_alias/basic/2019.1.4/DSGVO/create_DSGVO.xml @@ -2,21 +2,11 @@ <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> <changeSet author="m.hofmann" id="e6b32d7d-298c-44a3-901f-88baa77cb6c3"> <createTable tableName="DSGVO"> - <column name="DSGVOID" type="CHAR(36)"> <constraints primaryKey="true" primaryKeyName="PK_DSGVO_DSGVOID"/> </column> - <column name="USER_NEW" type="NVARCHAR(50)"> - <constraints nullable="false"/> - </column> - <column name="DATE_NEW" type="TIMESTAMP"> - <constraints nullable="false"/> - </column> - <column name="USER_EDIT" type="NVARCHAR(50)" /> - <column name="DATE_EDIT" type="TIMESTAMP" /> - <column name="TABLENAME" type="CHAR(36)" /> - <column name="TYPE" type="NVARCHAR(36)"/> + <column name="TYPE" type="CHAR(36)"/> <column name="ROW_ID" type="CHAR(36)" /> <column name="STATUORITYSOURCE" type="CHAR(36)" /> @@ -27,7 +17,15 @@ <column name="CONTACT_ID" type="CHAR(36)"> <constraints nullable="false"/> </column> - + + <column name="USER_NEW" type="NVARCHAR(50)"> + <constraints nullable="false"/> + </column> + <column name="DATE_NEW" type="TIMESTAMP"> + <constraints nullable="false"/> + </column> + <column name="USER_EDIT" type="NVARCHAR(50)" /> + <column name="DATE_EDIT" type="TIMESTAMP" /> </createTable> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2019.1.4/DSGVO/init_dsgvoType_keyword.xml b/.liquibase/Data_alias/basic/2019.1.4/DSGVO/init_dsgvoType_keyword.xml index 64e53e6ded5909fa50f79c8445a94dac43f9b244..cd1052e3d95397b440f8a5fe73f62e542864f51d 100644 --- a/.liquibase/Data_alias/basic/2019.1.4/DSGVO/init_dsgvoType_keyword.xml +++ b/.liquibase/Data_alias/basic/2019.1.4/DSGVO/init_dsgvoType_keyword.xml @@ -3,7 +3,7 @@ <changeSet author="m.hofmann" id="e6b32d7d-298c-44a3-901f-88baa77cb6c3"> <insert tableName="AB_KEYWORD_ENTRY"> <column name="AB_KEYWORD_ENTRYID" value="e72a7d5b-7608-4c87-a977-d4a8994e45b4"/> - <column name="KEYID" value="DSGVONAMES"/> + <column name="KEYID" value="TYPE_NAME"/> <column name="TITLE" value="Names"/> <column name="CONTAINER" value="DSGVOType"/> <column name="SORTING" valueNumeric="0"/> @@ -12,8 +12,8 @@ </insert> <insert tableName="AB_KEYWORD_ENTRY"> <column name="AB_KEYWORD_ENTRYID" value="c38a3169-63f8-41f7-88a7-3358b2519a4a"/> - <column name="KEYID" value="DSGVOPERSONAL"/> - <column name="TITLE" value="other personal data"/> + <column name="KEYID" value="TYPE_BIRTH"/> + <column name="TITLE" value="Birthday"/> <column name="CONTAINER" value="DSGVOType"/> <column name="SORTING" valueNumeric="1"/> <column name="ISACTIVE" valueNumeric="1"/> @@ -21,12 +21,30 @@ </insert> <insert tableName="AB_KEYWORD_ENTRY"> <column name="AB_KEYWORD_ENTRYID" value="ffb1a706-348c-42cd-8b13-6f5e74181ba3"/> - <column name="KEYID" value="DSGVOATTR"/> - <column name="TITLE" value="Attributes"/> + <column name="KEYID" value="TYPE_ADDRESS"/> + <column name="TITLE" value="Address"/> <column name="CONTAINER" value="DSGVOType"/> <column name="SORTING" valueNumeric="2"/> <column name="ISACTIVE" valueNumeric="1"/> <column name="ISESSENTIAL" valueNumeric="1"/> </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="a64796f6-e2b7-4c36-b9da-13df09d9ffed"/> + <column name="KEYID" value="TYPE_COMM"/> + <column name="TITLE" value="Communication"/> + <column name="CONTAINER" value="DSGVOType"/> + <column name="SORTING" valueNumeric="3"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="3d0af900-1ab6-4725-bf39-b80581d3907f"/> + <column name="KEYID" value="TYPE_ATTR"/> + <column name="TITLE" value="Attribute"/> + <column name="CONTAINER" value="DSGVOType"/> + <column name="SORTING" valueNumeric="4"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2019.1.4/DSGVO/init_dsgvotablename_keyword.xml b/.liquibase/Data_alias/basic/2019.1.4/DSGVO/init_dsgvotablename_keyword.xml deleted file mode 100644 index 3ed74f369bb2181e7a3376cc210d284e55c271e2..0000000000000000000000000000000000000000 --- a/.liquibase/Data_alias/basic/2019.1.4/DSGVO/init_dsgvotablename_keyword.xml +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.1" encoding="UTF-8" standalone="no"?> -<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> - <changeSet author="m.hofmann" id="e6b32d7d-298c-44a3-901f-88baa77cb6c3"> - <insert tableName="AB_KEYWORD_ENTRY"> - <column name="AB_KEYWORD_ENTRYID" value="3ae54e09-7ad1-462e-a908-a7ccfbdebd91"/> - <column name="KEYID" value="DSGVOADDRDATA"/> - <column name="TITLE" value="Address data"/> - <column name="CONTAINER" value="DSGVOTablename"/> - <column name="SORTING" valueNumeric="0"/> - <column name="ISACTIVE" valueNumeric="1"/> - <column name="ISESSENTIAL" valueNumeric="1"/> - </insert> - <insert tableName="AB_KEYWORD_ENTRY"> - <column name="AB_KEYWORD_ENTRYID" value="d4583f1b-787e-4890-ab65-df53ca3e1153"/> - <column name="KEYID" value="DSGVOCOMM"/> - <column name="TITLE" value="Communication data"/> - <column name="CONTAINER" value="DSGVOTablename"/> - <column name="SORTING" valueNumeric="1"/> - <column name="ISACTIVE" valueNumeric="1"/> - <column name="ISESSENTIAL" valueNumeric="1"/> - </insert> - <insert tableName="AB_KEYWORD_ENTRY"> - <column name="AB_KEYWORD_ENTRYID" value="012270f0-b975-489d-883b-b38317390228"/> - <column name="KEYID" value="DSGVOATTR"/> - <column name="TITLE" value="Attribute"/> - <column name="CONTAINER" value="DSGVOTablename"/> - <column name="SORTING" valueNumeric="2"/> - <column name="ISACTIVE" valueNumeric="1"/> - <column name="ISESSENTIAL" valueNumeric="1"/> - </insert> - <insert tableName="AB_KEYWORD_ENTRY"> - <column name="AB_KEYWORD_ENTRYID" value="16fc2669-8052-4d3b-8ed2-a670a1e9f5b0"/> - <column name="KEYID" value="DSGVOPERSONAL"/> - <column name="TITLE" value="Personal data"/> - <column name="CONTAINER" value="DSGVOTablename"/> - <column name="SORTING" valueNumeric="3"/> - <column name="ISACTIVE" valueNumeric="1"/> - <column name="ISESSENTIAL" valueNumeric="1"/> - </insert> - </changeSet> -</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2019.1.4/changelog.xml b/.liquibase/Data_alias/basic/2019.1.4/changelog.xml index aea96881336c2d7f8725d176a202c50ef9d446d8..c4533ded9096b14e80c1fc7dabdb8a54530db0dc 100644 --- a/.liquibase/Data_alias/basic/2019.1.4/changelog.xml +++ b/.liquibase/Data_alias/basic/2019.1.4/changelog.xml @@ -156,7 +156,6 @@ <include relativeToChangelogFile="true" file="DSGVO/create_DSGVO.xml"/> <include relativeToChangelogFile="true" file="DSGVO/init_statuoritysource_keyword.xml"/> <include relativeToChangelogFile="true" file="DSGVO/init_purpose_keyword.xml"/> - <include relativeToChangelogFile="true" file="DSGVO/init_dsgvotablename_keyword.xml"/> <include relativeToChangelogFile="true" file="DSGVO/init_dsgvoType_keyword.xml"/> <include relativeToChangelogFile="true" file="AditoBasic/init_UnlinkedMail.xml"/> diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 3fdcab6a247ac61a7b15b94cba3b782b5df395a7..7327ad84d59c7b9bf01450541489cda665dacfcf 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -10003,20 +10003,6 @@ <title></title> <description></description> </entityFieldDb> - <entityFieldDb> - <name>TABLENAME</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> <entityFieldDb> <name>DATE_EDIT</name> <dbName></dbName> @@ -10147,7 +10133,7 @@ <name>TYPE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> + <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> diff --git a/entity/DSGVO_entity/DSGVO_entity.aod b/entity/DSGVO_entity/DSGVO_entity.aod index 0b86d527f5fb94a44414e72131835339eb7e538c..a94ab78bbb731fd5a70cb3e29a758c8862c6309c 100644 --- a/entity/DSGVO_entity/DSGVO_entity.aod +++ b/entity/DSGVO_entity/DSGVO_entity.aod @@ -4,6 +4,10 @@ <majorModelMode>DISTRIBUTED</majorModelMode> <icon>VAADIN:LOCK</icon> <title>Data Privacy</title> + <siblings> + <element>Address_entity</element> + <element>Communication_entity</element> + </siblings> <recordContainer>jdito</recordContainer> <entityFields> <entityProvider> @@ -48,7 +52,6 @@ <description>The statutory source of the private data. Keyword Statuoritysource</description> <consumer>KeywordStatuoritysource</consumer> <groupable v="true" /> - <linkedContext>KeywordEntry</linkedContext> <mandatory v="true" /> <displayValueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/statuoritysource/displayValueProcess.js</displayValueProcess> </entityField> @@ -58,20 +61,9 @@ <description>The purpose of the private data. Keyword purpose</description> <consumer>KeywordPurpose</consumer> <groupable v="true" /> - <linkedContext>KeywordEntry</linkedContext> <mandatory v="true" /> <displayValueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/purpose/displayValueProcess.js</displayValueProcess> </entityField> - <entityField> - <name>TABLENAME</name> - <title>Source</title> - <consumer>KeywordTablename</consumer> - <groupable v="true" /> - <linkedContext>KeywordEntry</linkedContext> - <mandatory v="true" /> - <dropDownProcess>%aditoprj%/entity/DSGVO_entity/entityfields/tablename/dropDownProcess.js</dropDownProcess> - <displayValueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/tablename/displayValueProcess.js</displayValueProcess> - </entityField> <entityField> <name>VALID_TO</name> <title>Valid to</title> @@ -140,8 +132,8 @@ <name>TYPE</name> <title>Type</title> <description>What kind of data is being saved, e.g. Mail, Home address</description> - <mandatory v="true" /> - <dropDownProcess>%aditoprj%/entity/DSGVO_entity/entityfields/type/dropDownProcess.js</dropDownProcess> + <consumer>KeywordDSGVOType</consumer> + <state>READONLY</state> <displayValueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/type/displayValueProcess.js</displayValueProcess> </entityField> <entityParameter> @@ -184,6 +176,7 @@ <isObjectAction v="false" /> <isSelectionAction v="true" /> <iconId>VAADIN:ASTERISK</iconId> + <state>INVISIBLE</state> <stateProcess>%aditoprj%/entity/DSGVO_entity/entityfields/dsgvoactions/children/anonymperson/stateProcess.js</stateProcess> </entityActionField> </children> @@ -191,11 +184,12 @@ <entityField> <name>VALUE</name> <title>Value</title> + <contentType>LONG_TEXT</contentType> <dropDownProcess>%aditoprj%/entity/DSGVO_entity/entityfields/value/dropDownProcess.js</dropDownProcess> <displayValueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/value/displayValueProcess.js</displayValueProcess> </entityField> <entityConsumer> - <name>KeywordTablename</name> + <name>KeywordDSGVOType</name> <dependency> <name>dependency</name> <entityName>KeywordEntry_entity</entityName> @@ -204,7 +198,7 @@ <children> <entityParameter> <name>ContainerName_param</name> - <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/keywordtablename/children/containername_param/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/keyworddsgvotype/children/containername_param/valueProcess.js</valueProcess> </entityParameter> </children> </entityConsumer> @@ -224,13 +218,13 @@ <name>UID.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>ROW_ID.value</name> + <name>CONTACT_ID.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>TABLENAME.value</name> + <name>TYPE.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>TYPE.value</name> + <name>ROW_ID.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> <name>VALUE.value</name> @@ -244,9 +238,6 @@ <jDitoRecordFieldMapping> <name>VALID_TO.value</name> </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>CONTACT_ID.value</name> - </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> <name>DATE_NEW.value</name> </jDitoRecordFieldMapping> diff --git a/entity/DSGVO_entity/entityfields/keywordtablename/children/containername_param/valueProcess.js b/entity/DSGVO_entity/entityfields/keyworddsgvotype/children/containername_param/valueProcess.js similarity index 54% rename from entity/DSGVO_entity/entityfields/keywordtablename/children/containername_param/valueProcess.js rename to entity/DSGVO_entity/entityfields/keyworddsgvotype/children/containername_param/valueProcess.js index f34054e29b748492f399d701a371f1be574250d8..55a2d94f1039eff44d908d07fb958802af38838b 100644 --- a/entity/DSGVO_entity/entityfields/keywordtablename/children/containername_param/valueProcess.js +++ b/entity/DSGVO_entity/entityfields/keyworddsgvotype/children/containername_param/valueProcess.js @@ -1,4 +1,4 @@ import("system.result"); import("KeywordRegistry_basic"); -result.string($KeywordRegistry.DSGVOTablename()); \ No newline at end of file +result.string($KeywordRegistry.DSGVOType()); \ No newline at end of file diff --git a/entity/DSGVO_entity/entityfields/row_id/valueProcess.js b/entity/DSGVO_entity/entityfields/row_id/valueProcess.js index 4064de80b9b8d06a2d7fa7e0e1dde44646541f5e..589f1bc5e352c796db82511dbdf5a6d61cb91bb7 100644 --- a/entity/DSGVO_entity/entityfields/row_id/valueProcess.js +++ b/entity/DSGVO_entity/entityfields/row_id/valueProcess.js @@ -2,4 +2,4 @@ import("system.vars"); import("system.result"); import("DataPrivacy_lib"); -result.object(DataPrivacyUtils.getSpecificRowId(vars.get("$param.ContactId_param"), vars.get("$field.TABLENAME"))); \ No newline at end of file +//result.object(DataPrivacyUtils.getSpecificRowId(vars.get("$param.ContactId_param"), vars.get("$field.TABLENAME"))); \ No newline at end of file diff --git a/entity/DSGVO_entity/entityfields/tablename/displayValueProcess.js b/entity/DSGVO_entity/entityfields/tablename/displayValueProcess.js deleted file mode 100644 index 63d3863e5bec976852de864fc1aa68d0ee2086dc..0000000000000000000000000000000000000000 --- a/entity/DSGVO_entity/entityfields/tablename/displayValueProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("system.vars"); -import("KeywordRegistry_basic"); -import("Keyword_lib"); -import("system.result"); - -if(vars.get("$field.TABLENAME")) -result.string(KeywordUtils.getViewValue($KeywordRegistry.DSGVOTablename(), vars.get("$field.TABLENAME"))); diff --git a/entity/DSGVO_entity/entityfields/tablename/dropDownProcess.js b/entity/DSGVO_entity/entityfields/tablename/dropDownProcess.js deleted file mode 100644 index fd68131404ceabed5586d46673c1b4d533ab24d7..0000000000000000000000000000000000000000 --- a/entity/DSGVO_entity/entityfields/tablename/dropDownProcess.js +++ /dev/null @@ -1,5 +0,0 @@ -import("system.result"); -import("Keyword_lib"); -import("KeywordRegistry_basic"); - -result.object(KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.DSGVOTablename())); \ No newline at end of file diff --git a/entity/DSGVO_entity/entityfields/type/displayValueProcess.js b/entity/DSGVO_entity/entityfields/type/displayValueProcess.js index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..952ed787e8168e45e8e294a26865f5ef569b78b7 100644 --- a/entity/DSGVO_entity/entityfields/type/displayValueProcess.js +++ b/entity/DSGVO_entity/entityfields/type/displayValueProcess.js @@ -0,0 +1,6 @@ +import("KeywordRegistry_basic"); +import("system.vars"); +import("system.result"); +import("Keyword_lib"); + +result.string(KeywordUtils.getViewValue($KeywordRegistry.DSGVOType(), vars.get("$this.value"))); \ No newline at end of file diff --git a/entity/DSGVO_entity/entityfields/type/dropDownProcess.js b/entity/DSGVO_entity/entityfields/type/dropDownProcess.js deleted file mode 100644 index d61af3f4c85bed9d2a8887dbbb93c38d69c46697..0000000000000000000000000000000000000000 --- a/entity/DSGVO_entity/entityfields/type/dropDownProcess.js +++ /dev/null @@ -1,5 +0,0 @@ -import("system.result"); -import("system.vars"); -import("DataPrivacy_lib"); - -result.object(DataPrivacyUtils.getTypes(vars.get("$param.ContactId_param"), vars.get("$field.TABLENAME"))); \ No newline at end of file diff --git a/entity/DSGVO_entity/entityfields/value/dropDownProcess.js b/entity/DSGVO_entity/entityfields/value/dropDownProcess.js index 280575568f44739bc06bac2c7c9a3154fa609cc5..af7324e525b8bdf43ae8a788401bf4ca9d26c1b6 100644 --- a/entity/DSGVO_entity/entityfields/value/dropDownProcess.js +++ b/entity/DSGVO_entity/entityfields/value/dropDownProcess.js @@ -2,6 +2,6 @@ import("system.result"); import("system.vars"); import("DataPrivacy_lib"); -var res = DataPrivacyUtils.getValues(vars.get("$param.ContactId_param"), vars.get("$field.TABLENAME"), vars.get("$field.TYPE")); +//var res = DataPrivacyUtils.getValues(vars.get("$param.ContactId_param"), vars.get("$field.TABLENAME"), vars.get("$field.TYPE")); -result.object(res); \ No newline at end of file +//result.object(res); \ No newline at end of file diff --git a/entity/DSGVO_entity/recordcontainers/db/onDBInsert.js b/entity/DSGVO_entity/recordcontainers/db/onDBInsert.js index 09754cf5860927f9a6380fa0a8dad7fa1c185b87..91a2439d76a87078fe11b740c5972d3f8e5c395b 100644 --- a/entity/DSGVO_entity/recordcontainers/db/onDBInsert.js +++ b/entity/DSGVO_entity/recordcontainers/db/onDBInsert.js @@ -5,7 +5,7 @@ import("system.neon"); import("system.vars"); import("system.util"); - +/* if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) { var cols = ["USER_NEW" , "USER_EDIT" , "DSGVOID" , "ROW_ID" , "DATE_NEW" , @@ -18,6 +18,10 @@ if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) // KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.DSGVOUse(), "DSGVO.USE"); db.insertData("DSGVO", cols, null, vals); } + + +/* + // TODO Eintrag in DSGVO Tabelle /* diff --git a/entity/DSGVO_entity/recordcontainers/jdito/contentProcess.js b/entity/DSGVO_entity/recordcontainers/jdito/contentProcess.js index 88b46eabc2ff1992fc9404be5ce4a7423d8eaf1f..40d2bd73c0fa0e3eec4bc1c2fe34a20bcd121229 100644 --- a/entity/DSGVO_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/DSGVO_entity/recordcontainers/jdito/contentProcess.js @@ -11,9 +11,19 @@ import("Attribute_lib"); import("DataPrivacy_lib"); var contactId = vars.get("$param.ContactId_param"); +var filterCond; -DataPrivacyUtils.fillMissing(contactId) +// TODO: maybe load data directly without collect for "$local.idvalues" -> use other function?? (performance) +if (vars.exists("$local.idvalues") && vars.get("$local.idvalues") && vars.get("$local.idvalues").length > 0) +{ + filterCond = SqlCondition.begin().andIn("DSGVO.DSGVOID", vars.get("$local.idvalues")); +} +logging.log(JSON.stringify(filterCond, null, "\t")) +var data = DataPrivacyUtils.collectAll(contactId, filterCond) +logging.log(JSON.stringify(data, null, "\t")) +result.object(data); +/* var recordCond = SqlCondition.begin(); recordCond.andPrepare("DSGVO.CONTACT_ID", contactId); @@ -89,4 +99,4 @@ function _groupData(pData, pContactId) return pRow; }); -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/entity/DSGVO_entity/recordcontainers/jdito/onInsert.js b/entity/DSGVO_entity/recordcontainers/jdito/onInsert.js index fc04b1b040917cb7b263ee06e4b90640904c897f..956568f269147c11b26322e6139a9bb22f2034d5 100644 --- a/entity/DSGVO_entity/recordcontainers/jdito/onInsert.js +++ b/entity/DSGVO_entity/recordcontainers/jdito/onInsert.js @@ -7,7 +7,6 @@ var columns = [ "PURPOSE", "ROW_ID", "STATUORITYSOURCE", - "TABLENAME", "TYPE", "DSGVOID", "USER_NEW", @@ -19,11 +18,10 @@ var values = [ vars.get("$field.PURPOSE"), vars.get("$field.ROW_ID"), vars.get("$field.STATUORITYSOURCE"), - vars.get("$field.TABLENAME"), vars.get("$field.TYPE"), vars.get("$field.UID"), vars.get("$field.USER_NEW"), vars.get("$field.VALID_TO") ]; -db.insertData("DSGVO", columns, null, values); \ No newline at end of file +//db.insertData("DSGVO", columns, null, values); \ No newline at end of file diff --git a/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js b/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js index 87ad3e808da6293f20cad1e66f01ad88c4ce70a1..17d5c99dfbec026e7a487a2624d3df61c8119b72 100644 --- a/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js +++ b/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js @@ -9,7 +9,6 @@ var columns = [ "PURPOSE", "ROW_ID", "STATUORITYSOURCE", - "TABLENAME", "TYPE", "USER_NEW", "USER_EDIT", @@ -22,7 +21,6 @@ var values = [ vars.get("$field.PURPOSE"), vars.get("$field.ROW_ID"), vars.get("$field.STATUORITYSOURCE"), - vars.get("$field.TABLENAME"), vars.get("$field.TYPE"), vars.get("$field.USER_NEW"), vars.get("$field.USER_EDIT"), diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index c37ae448db37e0a576a32c13d46021f175bc425c..235d3961f0c005f1d9466ac52175ad204682e28e 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -417,7 +417,7 @@ <entityDependency> <name>ae2c4712-5513-4c0d-911a-532f50483c76</name> <entityName>DSGVO_entity</entityName> - <fieldName>KeywordTablename</fieldName> + <fieldName>KeywordDSGVOType</fieldName> <isConsumer v="false" /> </entityDependency> <entityDependency> diff --git a/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_progress.displayvalue/expression.js b/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_progress.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..4666f5143991d0e7ade783064a6094470f7f397e --- /dev/null +++ b/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_progress.displayvalue/expression.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.taskProgress(), "TASK.PROGRESS"); +result.string(sql); \ No newline at end of file diff --git a/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_status.displayvalue/expression.js b/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_status.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..2ff962697835ef0243dc987da40063bfc1dee5b6 --- /dev/null +++ b/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_status.displayvalue/expression.js @@ -0,0 +1,2 @@ +// do not use this, because TaskUtils.getTypeStatusKeyword(vars.get("$field.TYPE")) has to be called, which is not possible in a subselect. +// --> only use display value process \ No newline at end of file diff --git a/neonContext/DSGVO/DSGVO.aod b/neonContext/DSGVO/DSGVO.aod index 4e73d37625c7440122420f24b6a5f0f9caea4d4e..3b01fff52f6de6d910e943d3aace9fd3dcf4a139 100644 --- a/neonContext/DSGVO/DSGVO.aod +++ b/neonContext/DSGVO/DSGVO.aod @@ -4,6 +4,7 @@ <majorModelMode>DISTRIBUTED</majorModelMode> <filterview>DSGVOFilter_view</filterview> <editview>DSGVOEdit_view</editview> + <preview>DSGVOPreview_view</preview> <entity>DSGVO_entity</entity> <references> <neonViewReference> @@ -18,5 +19,9 @@ <name>ed1cb100-0801-4280-a1a2-57ad858de187</name> <view>DSGVOPreviewAnonym_view</view> </neonViewReference> + <neonViewReference> + <name>4cf0e8c3-900a-43f1-a2c0-3f8990644b64</name> + <view>DSGVOPreview_view</view> + </neonViewReference> </references> </neonContext> diff --git a/neonView/DSGVOEdit_view/DSGVOEdit_view.aod b/neonView/DSGVOEdit_view/DSGVOEdit_view.aod index d5645e7b9eadcbf3e05ac4b3c26b1865fd2296af..0c4ab8073cd4a1fc31dc75713a8c23ac4f0a7b92 100644 --- a/neonView/DSGVOEdit_view/DSGVOEdit_view.aod +++ b/neonView/DSGVOEdit_view/DSGVOEdit_view.aod @@ -14,10 +14,6 @@ <editMode v="true" /> <entityField>#ENTITY</entityField> <fields> - <entityFieldLink> - <name>05722873-d882-41fa-9030-aa64df9dc98a</name> - <entityField>TABLENAME</entityField> - </entityFieldLink> <entityFieldLink> <name>167afc20-3e2c-452d-9300-f5e105bc85e4</name> <entityField>TYPE</entityField> diff --git a/neonView/DSGVOPreview_view/DSGVOPreview_view.aod b/neonView/DSGVOPreview_view/DSGVOPreview_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..70425ab3bc1ce07b97c36c28dc1aacb843357cb4 --- /dev/null +++ b/neonView/DSGVOPreview_view/DSGVOPreview_view.aod @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1"> + <name>DSGVOPreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <headerFooterLayout> + <name>layout</name> + </headerFooterLayout> + </layout> + <children> + <genericViewTemplate> + <name>Info</name> + <showDrawer v="true" /> + <drawerCaption>Details</drawerCaption> + <entityField>#ENTITY</entityField> + <fields> + <entityFieldLink> + <name>bad933a4-c407-410d-989b-8970e95a035a</name> + <entityField>TYPE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>526df892-47c5-4f43-8df2-9dde86193c50</name> + <entityField>STATUORITYSOURCE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>52e76727-9257-4a43-8b2a-7fa60a7ada8f</name> + <entityField>PURPOSE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>db62ba6a-91e9-42e3-a95c-7259c237c290</name> + <entityField>VALID_TO</entityField> + </entityFieldLink> + <entityFieldLink> + <name>a66196f5-c136-493c-8b82-13cf629f4450</name> + <entityField>VALUE</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js index 36b69c7ea52e0544c18732c86b7b81f20019cdfd..df68da9cf9e454801c6d1efa4d46db7532ad3128 100644 --- a/process/Attribute_lib/process.js +++ b/process/Attribute_lib/process.js @@ -225,10 +225,11 @@ function AttributeRelationUtils () {} * @param {String} pObjectRowId row-id of the dataset * @param {String} [pObjectType=null] object-type * @param {String} [pGetViewValue=false] if true the values are resolved and formatted + * @param {String} [pGetAttrname=false] if true the attributename is also returned * - * @return {String|null} the value of the attribute + * @return {String|String[]|null} the value of the attribute or an array of attrname and value [attrname, value] (if pGetAttrname is true) */ -AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObjectType, pGetViewValue) +AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObjectType, pGetViewValue, pGetAttrname) { var attrCond = SqlCondition.begin() .andPrepare("AB_ATTRIBUTERELATION.OBJECT_ROWID", pObjectRowId) @@ -241,6 +242,10 @@ AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObj "AB_ATTRIBUTE.DROPDOWNDEFINITION", "COMBOVAL.ATTRIBUTE_NAME" ]; + + if (pGetAttrname) + defaultFields.push("AB_ATTRIBUTE.ATTRIBUTE_NAME"); + var valueFields = AttributeTypeUtil.getAllDatabaseFields(); var attributeSql = attrCond.buildSql("select " + defaultFields.join(", ") + ", " + valueFields.join(", ") + " from AB_ATTRIBUTERELATION join AB_ATTRIBUTE on AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID" @@ -256,6 +261,9 @@ AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObj else if (pGetViewValue) value = AttributeTypeUtil.getAttributeViewValue(attributeValues[0].trim(), value, attributeValues[1]); + if (pGetAttrname) + value = [attributeValues[3], value]; + return value; } @@ -264,10 +272,12 @@ AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObj * * @param {String} pObjectRowId object rowid * @param {String} [pObjectType=null] object-type - * @param {String} [pUseAttributeIds=false] if true the ids are used instead of the full attribute names - * @param {String} [pUseIdValues=false] if true the values are not resolved or formatted + * @param {String} [pUseAttributeIds=0] if 0 the full attribute names are returned + * if 1 the ids are used instead of the full attribute names + * if 2 the ids AND the full attribute name is returned + * @param {String} [pUseIdValues=false] if true the values are not resolved or formatted [attributeId, attributeName, value] * - * @return {String[][]} two-dimensional array a row is [attributeId|attributeName, value] + * @return {String[][]} two-dimensional array a row is [attributeId|attributeName, value] (or [attributeId, attributeName, value]) */ AttributeRelationUtils.getAllAttributes = function (pObjectRowId, pObjectType, pUseAttributeIds, pUseIdValues) { @@ -291,11 +301,21 @@ AttributeRelationUtils.getAllAttributes = function (pObjectRowId, pObjectType, p var attributeValues = db.table(attributeSql).map(function (row) { let attribute = row[0]; - if (!pUseAttributeIds) + let attrname; + if (pUseAttributeIds == 0 || pUseAttributeIds == 2) { + var tmpAttrname = ""; if (!(attribute in attributeNameMap)) attributeNameMap[attribute] = AttributeUtil.getFullAttributeName(attribute); - attribute = attributeNameMap[attribute]; + tmpAttrname = attributeNameMap[attribute]; + + // if mode 0, return only the name + if (pUseAttributeIds == 0) + attribute = tmpAttrname + + // if mode 2 return both + if (pUseAttributeIds == 2) + attrname = tmpAttrname } let value = row[AttributeTypeUtil.getTypeColumnIndex(row[1]) + defaultFields.length]; if (!pUseIdValues && row[1].trim() == $AttributeTypes.COMBO) @@ -303,7 +323,16 @@ AttributeRelationUtils.getAllAttributes = function (pObjectRowId, pObjectType, p else if (!pUseIdValues) value = AttributeTypeUtil.getAttributeViewValue(row[1].trim(), value, row[2]); - return [attribute, value]; + // add attrname only if id AND attrname is needed + var data = []; + + data.push(attribute); + + if (attrname) + data.push(attrname); + + data.push(value); + return data; }); return attributeValues; diff --git a/process/DataPrivacy_lib/process.js b/process/DataPrivacy_lib/process.js index f180182469741bc7b000df8f4791bb6e15ce538c..938e4846a10a7fafcabd964e63dff4c3b0a9d7a8 100644 --- a/process/DataPrivacy_lib/process.js +++ b/process/DataPrivacy_lib/process.js @@ -23,10 +23,13 @@ function DataPrivacyType(pKeyId, pGetValuesCallback) } /** - * get all possible validation types or one specific - * @param {String} [pKey=undefined] if provided, this function returns only the validation type with this key + * NOTE: The Key in the cache has to be the same as the first argument (pKeyId) + * NOTE2: These Types have to exist also as Keyord! * - * @return {Object|DataPrivacyType} object containing all WsValidationTypes or one specific WsValidationType + * get all possible DataPrivacyTypes or one specific + * @param {String} [pKey=undefined] if provided, this function returns only the DataPrivacyTypes with this key + * + * @return {Object|DataPrivacyType} object containing all DataPrivacyType or one specific DataPrivacyType */ DataPrivacyType.get = function(pKey) { @@ -37,7 +40,7 @@ DataPrivacyType.get = function(pKey) TYPE_BIRTH: new DataPrivacyType("TYPE_BIRTH", _getBirthday), TYPE_ADDRESS: new DataPrivacyType("TYPE_ADDRESS", _getAddress), TYPE_COMM: new DataPrivacyType("TYPE_COMM", _getCommunication), - TYPE_ATTR: new DataPrivacyType("TYPE_ATTR")//, _getAttribute) + TYPE_ATTR: new DataPrivacyType("TYPE_ATTR", _getAttribute) // Picture also? // Gender also? // Orgs of the person also? @@ -50,9 +53,7 @@ DataPrivacyType.get = function(pKey) function _getName(pContactId, pPersonId) { // Use PersonId as ID, since the data comes from the person - logging.log(JSON.stringify(SqlCondition.begin() - .andPrepareIfSet("CONTACT.CONTACTID", pContactId) - .andPrepareIfSet("PERSON.PERSONID", pPersonId), null, "\t")) + // TODO: with loadEntity var persData = db.array(db.ROW, SqlCondition.begin() .andPrepareIfSet("CONTACT.CONTACTID", pContactId) @@ -100,7 +101,7 @@ DataPrivacyType.get = function(pKey) { // TODO Addresse formatieren var addrVal = ""; - pAddr.forEach(function(entry) + pAddr.slice(1).forEach(function(entry) { addrVal += entry + " "; }); @@ -127,6 +128,28 @@ DataPrivacyType.get = function(pKey) } }); } + + function _getAttribute(pContactId, pAttributeId) { + var attributeData = []; + if (pContactId) + { + attributeData = AttributeRelationUtils.getAllAttributes(pContactId, "Person", 2); + } + else if(pAttributeId) + { + attributeData = AttributeRelationUtils.getAttribute(pAttributeId, pContactId, "Person", true, true); + if (attributeData) + attributeData = [[pAttributeId].concat(attributeData)] + } + + return attributeData.map(function(pAttr) + { + return { + value: pAttr[1] + ": " + pAttr[2], + id: pAttr[0] + } + }); + } } @@ -138,11 +161,12 @@ DataPrivacyType.get = function(pKey) */ function DataPrivacyUtils() {} -DataPrivacyUtils.getDSGVO = function(pContactId, pAlternateSelectString) +DataPrivacyUtils.getDSGVO = function(pContactId, pFilterCond) { var cond = SqlCondition.begin().andPrepare("DSGVO.CONTACT_ID", pContactId); - var select = (pAlternateSelectString ? pAlternateSelectString : - "DSGVOID," + // 0 + cond.andSqlCondition(pFilterCond); + + var select = "DSGVOID," + // 0 "CONTACT_ID," + // 1 "TYPE," + // 2 "ROW_ID," + // 3 @@ -153,21 +177,30 @@ DataPrivacyUtils.getDSGVO = function(pContactId, pAlternateSelectString) "DATE_NEW," + // 8 "DATE_EDIT," + // 9 "USER_NEW," + // 10 - "USER_EDIT ") // 11 + "USER_EDIT " // 11 var data = db.table(cond.buildSql("select " + select + " from DSGVO", "1 = 2")); return data; } - - -DataPrivacyUtils.fillMissing = function(pContactId) +/** + * If filter conditin is provided, NO inserts are done + */ +DataPrivacyUtils.collectAll = function(pContactId, pFilterCond) { - var contactDSGVO = DataPrivacyUtils.getDSGVO(pContactId, "TYPE, ROW_ID"); + var contactDSGVO = DataPrivacyUtils.getDSGVO(pContactId, pFilterCond); + + // copy data (with .slice()) as we iterate through it and we should not add values while doing this + // NOTE that the arrays inside of contactDSGVO still point to the same arrays as in returnDSGVOData + // + // --> contactDSGVO[dat][4] = pRow.value; WILL CHANGE returnDSGVOData[dat][4] ALSO! + // (Yes I could also slice each array in contactDSGVO to returnDSGVOData but this would add overhead which is not needed :-) + var returnDSGVOData = contactDSGVO.slice(); + var inserts = []; var currentUser = vars.getString("$sys.user"); var now = vars.getString("$sys.date"); - + for (type in DataPrivacyType.get()) { // get type object for current type @@ -176,34 +209,55 @@ DataPrivacyUtils.fillMissing = function(pContactId) break; // load all data of the current type - var data = type.getValues(pContactId); + data.forEach(function(pRow) { // search if it is already in DSGVO table var found = false; for (dat in contactDSGVO) { - if (contactDSGVO[dat][0] == type.key && contactDSGVO[dat][1] == pRow.id) + if (contactDSGVO[dat][2].trim() == type.key && contactDSGVO[dat][3] == pRow.id) { found = true; + // add the loaded view value + contactDSGVO[dat][4] = pRow.value; break; } } - // if not insert it - if (!found) + // if not insert it (if not using pFilterCond as in that case wrong inserts would happen) + if (!found && !pFilterCond) { + var newId = util.getNewUUID(); // insert inserts.push(["DSGVO", ["DSGVOID", "USER_NEW", "DATE_NEW", "TYPE", "ROW_ID", "CONTACT_ID"], null, - [util.getNewUUID(), currentUser, now, type.key, pRow.id, pContactId]]); + [newId, currentUser, now, type.key, pRow.id, pContactId]]); + + // and also insert it in the return data to avoid selecting from DSGVO again + returnDSGVOData.push([ + newId, // DSGVOID," + // 0 + pContactId, // "CONTACT_ID," + // 1 + type.key, // "TYPE," + // 2 + pRow.id, // "ROW_ID," + // 3 + pRow.value, // "''," + // 4 - value + "", // "STATUORITYSOURCE," + // 5 + "", // "PURPOSE," + // 6 + "", // "VALID_TO," + // 7 + now, // "DATE_NEW," + // 8 + "", // "DATE_EDIT," + // 9 + currentUser, // "USER_NEW," + // 10 + "", // "USER_EDIT " // 11 + ]) } }); } db.inserts(inserts); + + return returnDSGVOData } DataPrivacyUtils.getTypes = function(pPerson, pTablename) @@ -289,7 +343,6 @@ DataPrivacyUtils.getValues = function(pPerson, pTablename, pType) }else if(pTablename == $KeywordRegistry.DSGVOTablename$attribute()) { var attr = AttributeRelationUtils.getAllAttributes(pPerson, "Person"); - logging.log(attr); /*attr.forEach(function (entry) { // TODO muss erst attr was liefern, --> leer diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index aae2082502e46a9f6020d8c25b7bf2e49c2c99aa..0658003f60d5e89f96b1c37bc0a43b115e0f1cc7 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -131,11 +131,6 @@ $KeywordRegistry.permissionCondType = function(){return "PermissionCondType";}; $KeywordRegistry.permissionAccessType = function(){return "PermissionAccessType";}; $KeywordRegistry.purpose = function(){return "Purpose";}; $KeywordRegistry.statuoritysource = function(){return "Statuoritysource";}; -$KeywordRegistry.DSGVOTablename = function() {return "DSGVOTablename";}; -$KeywordRegistry.DSGVOTablename$address = function() {return "DSGVOADDRDATA ";}; -$KeywordRegistry.DSGVOTablename$communication = function() {return "DSGVOCOMM ";}; -$KeywordRegistry.DSGVOTablename$attribute = function() {return "DSGVOATTR ";}; -$KeywordRegistry.DSGVOTablename$personal = function() {return "DSGVOPERSONAL ";}; $KeywordRegistry.DSGVOType = function() {return "DSGVOType";}; $KeywordRegistry.DSGVOType$names = function() {return "DSGVONAMES ";}; $KeywordRegistry.DSGVOType$personal = function() {return "DSGVOPERSONAL ";}; diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js index cfb5a109638a20414127ffd5e066d2356ccd774e..c77ee066f09443fc807bbd71a5a18ec0fb93b88b 100644 --- a/process/Sql_lib/process.js +++ b/process/Sql_lib/process.js @@ -147,6 +147,9 @@ SqlCondition.prototype.orAttachPrepared = function(preparedObj) { * @return {SqlCondition} current SqlCondition-object */ SqlCondition.prototype.andSqlCondition = function(cond, alternativeCond) { + if (!cond) + return this + var otherCondition = cond.toString(alternativeCond); if (otherCondition.trim() != "") {