diff --git a/.liquibase/Data_alias/basic/2021.2.0/TopicTree/changelog.xml b/.liquibase/Data_alias/basic/2021.2.0/TopicTree/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..c8d4f9cd12c9922c8ab4f9b3b53df528d7611bc3 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.2.0/TopicTree/changelog.xml @@ -0,0 +1,7 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="create_TopicTree.xml"/> + <include relativeToChangelogFile="true" file="create_TopicTreeRelation.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.2.0/TopicTree/create_TopicTree.xml b/.liquibase/Data_alias/basic/2021.2.0/TopicTree/create_TopicTree.xml new file mode 100644 index 0000000000000000000000000000000000000000..11c370a75095ab1c252831df89825fef3030fccf --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.2.0/TopicTree/create_TopicTree.xml @@ -0,0 +1,35 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="b.ulrich" id="9aa9ce72-670d-4122-a50f-0b1e1ca64ca3"> + <createTable tableName="TOPICTREE"> + <column name="TOPICTREEID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_TOPICTREEID"/> + </column> + <column name="ASSIGNEDTO" type="CHAR(36)"> + </column> + <column name="TOPIC" type="VARCHAR(36)"/> + <column name="DESCRIPTION" type="NVARCHAR(500)"/> + <!-- Boolean (1 = true, 0 = false)--> + <column name="ACTIVE" type="TINYINT" defaultValueNumeric="1"> + <constraints nullable="false"/> + </column> + <column name="SORTING_LAYER_1" type="INTEGER"/> + <column name="SORTING_LAYER_2" type="INTEGER"/> + <column name="SORTING_LAYER_3" type="INTEGER"/> + <column name="SORTING_LAYER_4" type="INTEGER"/> + <column name="SORTING_LAYER_5" type="INTEGER"/> + <column name="SORTING_LAYER_6" type="INTEGER"/> + + <column name="USER_NEW" type="NVARCHAR(50)" /> + <column name="DATE_NEW" type="DATETIME" /> + <column name="USER_EDIT" type="NVARCHAR(50)" /> + <column name="DATE_EDIT" type="DATETIME" /> + </createTable> + <createIndex tableName="TOPICTREE" indexName="IDX_TOPICTREE_ASSIGNEDTO"> + <column name="ASSIGNEDTO"/> + </createIndex> + </changeSet> +</databaseChangeLog> + diff --git a/.liquibase/Data_alias/basic/2021.2.0/TopicTree/create_TopicTreeRelation.xml b/.liquibase/Data_alias/basic/2021.2.0/TopicTree/create_TopicTreeRelation.xml new file mode 100644 index 0000000000000000000000000000000000000000..8b3bf2b37c40c4cbd4b2a64957cffe6079c09438 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.2.0/TopicTree/create_TopicTreeRelation.xml @@ -0,0 +1,32 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="b.ulrich" id="ced229de-1e0b-4e7f-9dbc-233fe6f2c7ba"> + <createTable tableName="TOPICTREERELATION"> + <column name="TOPICTREERELATIONID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_TOPICTREERELATIONID"/> + </column> + <column name="TOPICTREE_ID" type="CHAR(36)"/> + <column name="OBJECT_ROWID" type="CHAR(36)"/> + <column name="OBJECT_TYPE" type="VARCHAR(63)"/> + <column name="DESCRIPTION" type="NCLOB"/> + <column name="SORT" type="INTEGER"/> + + <column name="USER_NEW" type="NVARCHAR(50)" /> + <column name="DATE_NEW" type="DATETIME" /> + <column name="USER_EDIT" type="NVARCHAR(50)" /> + <column name="DATE_EDIT" type="DATETIME" /> + </createTable> + <createIndex tableName="TOPICTREERELATION" indexName="IDX_TOPICTREERLTN_TREE_ID"> + <column name="TOPICTREE_ID"/> + </createIndex> + <createIndex tableName="TOPICTREERELATION" indexName="IDX_TOPICTREERLTN_OBJROW_ID"> + <column name="OBJECT_ROWID"/> + </createIndex> + <createIndex tableName="TOPICTREERELATION" indexName="IDX_TOPICTREERLTN_OBJTYPE_ID"> + <column name="OBJECT_TYPE"/> + </createIndex> + </changeSet> +</databaseChangeLog> + diff --git a/.liquibase/Data_alias/basic/2021.2.0/changelog.xml b/.liquibase/Data_alias/basic/2021.2.0/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..009d504db47c9bd92ced84f14fe82eb20565f99d --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.2.0/changelog.xml @@ -0,0 +1,5 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="TopicTree/changelog.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/changelog.xml b/.liquibase/Data_alias/basic/_demoData/changelog.xml index b10c5049de1483e34e78797241e60a8a5e62cbab..0f8fd6f15e6939e296eec6fc54d80128f2b42d97 100644 --- a/.liquibase/Data_alias/basic/_demoData/changelog.xml +++ b/.liquibase/Data_alias/basic/_demoData/changelog.xml @@ -103,6 +103,7 @@ <include file="generatedData/tasklink.xml" relativeToChangelogFile="true"/> <include file="generatedData/ticket.xml" relativeToChangelogFile="true"/> <include file="generatedData/timetracking.xml" relativeToChangelogFile="true"/> + <include file="generatedData/topictree.xml" relativeToChangelogFile="true"/> <include file="generatedData/unrelatedduplicates.xml" relativeToChangelogFile="true"/> <include file="generatedData/visitplanemployeeweek.xml" relativeToChangelogFile="true"/> <include file="generatedData/visitplanentry.xml" relativeToChangelogFile="true"/> diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/topictree.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/topictree.xml new file mode 100644 index 0000000000000000000000000000000000000000..b88a5ce2b99916ffe5c1a10b39cd71795436e5b5 --- /dev/null +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/topictree.xml @@ -0,0 +1,1074 @@ +<?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="b.ulrich" id="6692d6ef-3488-4fb2-84bc-87d58cbfe644"> + <delete tableName="TOPICTREE"/> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="3d7eae24-39ba-49c7-878b-01fccd0d3304"/> + <column name="ASSIGNEDTO" value="fbd107dc-48b9-4fba-9c21-86d08f48162a"/> + <column name="TOPIC" value="Test"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2021-07-16T01:48:42"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="11f5b210-b5ae-4f92-81ed-051e4679134f"/> + <column name="ASSIGNEDTO" value="32918206-e78a-4e63-9370-07e925be0fbe"/> + <column name="TOPIC" value="Rückruf"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-16T12:50:30"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="60850b03-ff45-446f-9773-6ea9092ca651"/> + <column name="ASSIGNEDTO" value="32918206-e78a-4e63-9370-07e925be0fbe"/> + <column name="TOPIC" value="Unterlagen senden"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-16T12:50:35"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="115233b1-db10-43bf-9cd0-4d1362dafdeb"/> + <column name="ASSIGNEDTO" value="32918206-e78a-4e63-9370-07e925be0fbe"/> + <column name="TOPIC" value="Angebot erstellen"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-16T12:50:39"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="5fda2d19-75c1-48ea-9d15-1a756e82347f"/> + <column name="ASSIGNEDTO" value="32918206-e78a-4e63-9370-07e925be0fbe"/> + <column name="TOPIC" value="Broschüre zukommen lassen"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="4"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-16T12:50:44"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="4e4a2ca0-b1c5-4b21-8c1b-6fb0057f0749"/> + <column name="ASSIGNEDTO" value="94113af6-e96e-49c5-9c8b-4a12d4b07936"/> + <column name="TOPIC" value="Warengruppe A"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="-1"/> + <column name="SORTING_LAYER_5" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-06T10:21:24"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="961c18a8-f38d-4e18-8eb6-65422f3df987"/> + <column name="ASSIGNEDTO" value="94113af6-e96e-49c5-9c8b-4a12d4b07936"/> + <column name="TOPIC" value="Warengruppe B"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="-1"/> + <column name="SORTING_LAYER_5" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-06T10:21:30"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="63804-13-22e0-4dd2-a227-c7f3071d768f"/> + <column name="ASSIGNEDTO" value="fde3500f-f2b9-4272-accd-c4449d8e095f"/> + <column name="TOPIC" value="Produkt B1"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="-1"/> + <column name="SORTING_LAYER_5" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-06T10:15:52"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="5b010102-859f-4b74-abd5-0b2b9e4ab535"/> + <column name="ASSIGNEDTO" value="fde3500f-f2b9-4272-accd-c4449d8e095f"/> + <column name="TOPIC" value="Produkt B2"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="-1"/> + <column name="SORTING_LAYER_5" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-06T10:16:00"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="f62a44c4-5f9d-42f6-9df9-35f8aa38d0e7"/> + <column name="ASSIGNEDTO" value="dce5d785-4617-47bf-86a4-aab540bdc713"/> + <column name="TOPIC" value="Produkt A1"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="-1"/> + <column name="SORTING_LAYER_5" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-06T10:15:23"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="6c037cef-8851-465c-978a-4fdb5d825196"/> + <column name="ASSIGNEDTO" value="dce5d785-4617-47bf-86a4-aab540bdc713"/> + <column name="TOPIC" value="Produkt A2"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="-1"/> + <column name="SORTING_LAYER_5" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-06T10:15:36"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="dce5d785-4617-47bf-86a4-aab540bdc713"/> + <column name="ASSIGNEDTO" value="fb271223-f888-4796-8d5d-117113682924"/> + <column name="TOPIC" value="Warengruppe A"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-06T10:15:01"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="fde3500f-f2b9-4272-accd-c4449d8e095f"/> + <column name="ASSIGNEDTO" value="fb271223-f888-4796-8d5d-117113682924"/> + <column name="TOPIC" value="Warengruppe B"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-06T10:15:11"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="34425ab2-b4c5-42aa-a217-cfff9ecead9c"/> + <column name="ASSIGNEDTO" value="a8b509cc-1e94-4560-a25a-c0bf82a07030"/> + <column name="TOPIC" value="Printmedien"/> + <column name="DESCRIPTION" value="Printmedien"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T10:05:19"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2021-07-16T01:39:29"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="ee83c6f4-bf94-4ba1-8949-19d6dbcd5b91"/> + <column name="ASSIGNEDTO" value="a8b509cc-1e94-4560-a25a-c0bf82a07030"/> + <column name="TOPIC" value="Messe"/> + <column name="DESCRIPTION" value="Messe"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T10:05:02"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2021-07-16T01:38:06"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="fdab83c5-adb2-4574--118-f389407fb39f"/> + <column name="ASSIGNEDTO" value="a8b509cc-1e94-4560-a25a-c0bf82a07030"/> + <column name="TOPIC" value="Bestehender Kontakt"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T10:04:21"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="fd1da70d-4fb1-498d-a62f-5310f9d1c49e"/> + <column name="ASSIGNEDTO" value="a8b509cc-1e94-4560-a25a-c0bf82a07030"/> + <column name="TOPIC" value="Empfehlung"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="4"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T10:04:37"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="04621076-1b74-4f7e-8320-06275f2dedda"/> + <column name="ASSIGNEDTO" value="5e4c565b-fabc-4ae9-b162-272db6b9e166"/> + <column name="TOPIC" value="eigene Firma"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:50:55"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="91e5027c-b326-4cfb-b9f1-5a74ed56e57c"/> + <column name="ASSIGNEDTO" value="5e4c565b-fabc-4ae9-b162-272db6b9e166"/> + <column name="TOPIC" value="Interessent"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:51:22"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="c9736efd-3b46-4a9f-aab8-da670415349b"/> + <column name="ASSIGNEDTO" value="5e4c565b-fabc-4ae9-b162-272db6b9e166"/> + <column name="TOPIC" value="Kunde"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:51:34"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="989a92ae-9222-48b7-92c9-760bd50a4ca0"/> + <column name="ASSIGNEDTO" value="5e4c565b-fabc-4ae9-b162-272db6b9e166"/> + <column name="TOPIC" value="Berater"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="4"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:51:46"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="7b2fd3f8-9ff5-4220-ab35-dda92deeac74"/> + <column name="ASSIGNEDTO" value="5e4c565b-fabc-4ae9-b162-272db6b9e166"/> + <column name="TOPIC" value="Partner"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="5"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:51:56"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="f5b6fb12-ee3f-4d07-afe0-abea05fbef1d"/> + <column name="ASSIGNEDTO" value="b28dbf9c-56f6-4ce1-b294-d21bf201e388"/> + <column name="TOPIC" value="30"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="-1"/> + <column name="SORTING_LAYER_5" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:50:01"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="fda6d366-64f1-4bc3-88cd-af2d0efad58c"/> + <column name="ASSIGNEDTO" value="b28dbf9c-56f6-4ce1-b294-d21bf201e388"/> + <column name="TOPIC" value="60"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="-1"/> + <column name="SORTING_LAYER_5" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:50:10"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="7bdf2d30-05ba-4106-8cc5-1c5642edddfc"/> + <column name="ASSIGNEDTO" value="b28dbf9c-56f6-4ce1-b294-d21bf201e388"/> + <column name="TOPIC" value="90"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="-1"/> + <column name="SORTING_LAYER_5" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:50:19"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="b28dbf9c-56f6-4ce1-b294-d21bf201e388"/> + <column name="ASSIGNEDTO" value="de752846-46a4-46b3-8e5d-52ee910ff905"/> + <column name="TOPIC" value="Wertung"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:49:09"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="14e71e11-7c97-4065-8fd5-224ca775bacb"/> + <column name="ASSIGNEDTO" value="de752846-46a4-46b3-8e5d-52ee910ff905"/> + <column name="TOPIC" value="Begründung"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:49:22"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="ea853979-920e-4864-b0c2-98b4543caf51"/> + <column name="ASSIGNEDTO" value="6026b29d-0afd-492c-9861-5d4a0200f4e4"/> + <column name="TOPIC" value="Nachfassen"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-01-29T06:00:25"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="de31059a-8b1f-46f7-be14-140a7b16e989"/> + <column name="ASSIGNEDTO" value="6026b29d-0afd-492c-9861-5d4a0200f4e4"/> + <column name="TOPIC" value="Sonstiges"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-23T12:28:50"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="8dd0b595-04fc-4601-b8f1-e5dfe7c9afb2"/> + <column name="ASSIGNEDTO" value="490a9132-d4e6-4a37-9cca-3f9fc3c1f4c8"/> + <column name="TOPIC" value="Nächster Kontakt?"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T05:04:15"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="554eab0f-4e93-4b1e-bd69-e2244284c610"/> + <column name="ASSIGNEDTO" value="490a9132-d4e6-4a37-9cca-3f9fc3c1f4c8"/> + <column name="TOPIC" value="Projekt geplant?"/> + <column name="DESCRIPTION" value="Projekt geplant?"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T05:02:53"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="64f94e7d-704b-4064-b390-80ef98ed083e"/> + <column name="ASSIGNEDTO" value="490a9132-d4e6-4a37-9cca-3f9fc3c1f4c8"/> + <column name="TOPIC" value="Kein Projekt geplant"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T05:03:12"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="cb9554c3-27c3-4815-87c3-92ac638b01fb"/> + <column name="ASSIGNEDTO" value="490a9132-d4e6-4a37-9cca-3f9fc3c1f4c8"/> + <column name="TOPIC" value="Planung Projekt offen"/> + <column name="DESCRIPTION" value="Planung Projekt offen"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="4"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T05:03:50"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="cc7fbe5f-7963-422b-8bd5-428da461bb36"/> + <column name="ASSIGNEDTO" value="afd8607d-b3e2-4bc2-8b5c-08cc543a4af5"/> + <column name="TOPIC" value="flexibel"/> + <column name="DESCRIPTION" value="flexibel"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T04:12:58"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="22de6b4a-40f3-4458-9aa8-75ea486453fe"/> + <column name="ASSIGNEDTO" value="afd8607d-b3e2-4bc2-8b5c-08cc543a4af5"/> + <column name="TOPIC" value="Referenz"/> + <column name="DESCRIPTION" value="Referenz"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T04:13:17"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="c5557e3f-f574-4d28-8897-6109eae0bd56"/> + <column name="ASSIGNEDTO" value="afd8607d-b3e2-4bc2-8b5c-08cc543a4af5"/> + <column name="TOPIC" value="Technologie"/> + <column name="DESCRIPTION" value="Technologie"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T04:13:38"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="07e4-1fa-95b8-41bc-beab-05cf8d814a0e"/> + <column name="ASSIGNEDTO" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/> + <column name="TOPIC" value="Fachanforderung"/> + <column name="DESCRIPTION" value="Fachanforderung"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-01-26T06:52:43"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="afd8607d-b3e2-4bc2-8b5c-08cc543a4af5"/> + <column name="ASSIGNEDTO" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/> + <column name="TOPIC" value="Vorteile"/> + <column name="DESCRIPTION" value="Vorteile"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T04:12:32"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="08b8e5e9-a9bc-40e5-b1a3-2626bf0e842b"/> + <column name="ASSIGNEDTO" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/> + <column name="TOPIC" value="Defizite"/> + <column name="DESCRIPTION" value="Defizite"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:44:17"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="ed801ac3-00fd-4a35-9430-4b3c8533fe72"/> + <column name="ASSIGNEDTO" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/> + <column name="TOPIC" value="Nächste Schritte"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="4"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:44:35"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="6026b29d-0afd-492c-9861-5d4a0200f4e4"/> + <column name="ASSIGNEDTO" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/> + <column name="TOPIC" value="ToDos"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="5"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:44:56"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="de752846-46a4-46b3-8e5d-52ee910ff905"/> + <column name="ASSIGNEDTO" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/> + <column name="TOPIC" value="Pers. Einschätzung"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="6"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:45:35"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="5e4c565b-fabc-4ae9-b162-272db6b9e166"/> + <column name="ASSIGNEDTO" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/> + <column name="TOPIC" value="Teilnehmer"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="7"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:45:50"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/> + <column name="ASSIGNEDTO" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/> + <column name="TOPIC" value="Präsentation"/> + <column name="DESCRIPTION" value="Präsentation"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-04T09:38:14"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2017-06-29T02:34:20"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="490a9132-d4e6-4a37-9cca-3f9fc3c1f4c8"/> + <column name="ASSIGNEDTO" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/> + <column name="TOPIC" value="Akquise"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-06-23T01:45:08"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2017-06-29T02:34:33"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="2de03c35-f66a-4a4c-8a81-32401dc2ef6e"/> + <column name="ASSIGNEDTO" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/> + <column name="TOPIC" value="Erstkontakt"/> + <column name="DESCRIPTION" value="Erstkontakt"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-10-30T03:35:39"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2017-06-29T02:34:42"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="3052d584-83af-4f1a-b00d-c338b1681e07"/> + <column name="ASSIGNEDTO" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/> + <column name="TOPIC" value="Herkunft"/> + <column name="DESCRIPTION" value="Herkunft"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="4"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T10:03:05"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2017-06-29T02:34:48"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="8c488fc2-dbf1-4cdb-acd1-222b8fcca449"/> + <column name="ASSIGNEDTO" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/> + <column name="TOPIC" value="Vertrag"/> + <column name="DESCRIPTION" value="Vertrag"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="5"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-06T10:12:54"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2021-07-16T01:50:58"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="a8b509cc-1e94-4560-a25a-c0bf82a07030"/> + <column name="ASSIGNEDTO" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/> + <column name="TOPIC" value="Bekannt durch"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="6"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T05:02:04"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2017-06-29T02:35:19"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="32918206-e78a-4e63-9370-07e925be0fbe"/> + <column name="ASSIGNEDTO" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/> + <column name="TOPIC" value="ToDo"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="7"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-16T12:48:33"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="9e4dcd68--10a-4d94-9cd8-d4702d606748"/> + <column name="ASSIGNEDTO" value="8c488fc2-dbf1-4cdb-acd1-222b8fcca449"/> + <column name="TOPIC" value="Verwahrungsvereinbarung"/> + <column name="DESCRIPTION" value="Verwahrungsvereinbarung"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T04:11:09"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="0e75a981-29a0-4e0b-9b3d-e76659c80877"/> + <column name="ASSIGNEDTO" value="8c488fc2-dbf1-4cdb-acd1-222b8fcca449"/> + <column name="TOPIC" value="Datenschutzvereinbarung"/> + <column name="DESCRIPTION" value="Datenschutzvereinbarung"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T04:10:39"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="5d4d5d55-806d-43f6-89d9-ee58bbe4f85a"/> + <column name="ASSIGNEDTO" value="8c488fc2-dbf1-4cdb-acd1-222b8fcca449"/> + <column name="TOPIC" value="Abnahmeerklärung"/> + <column name="DESCRIPTION" value="Abnahmeerklärung"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T04:10:00"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="d0d2ad28-a3bf-45f6-bd74-d-1edf425043"/> + <column name="ASSIGNEDTO" value="8c488fc2-dbf1-4cdb-acd1-222b8fcca449"/> + <column name="TOPIC" value="Dienstleistungsvertrag"/> + <column name="DESCRIPTION" value="Dienstleistungsvertrag"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="4"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2014-09-04T05:33:10"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2014-09-16T07:21:55"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="0f16085c-7925-4128-b0ed-e4b44fecce33"/> + <column name="ASSIGNEDTO" value="8c488fc2-dbf1-4cdb-acd1-222b8fcca449"/> + <column name="TOPIC" value="Wartungsvertrag"/> + <column name="DESCRIPTION" value="Wartungsvertrag"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="5"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2014-09-04T05:28:57"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2014-09-16T07:22:07"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="ef877ce6-02ea-43eb-801c-23b77904d58d"/> + <column name="ASSIGNEDTO" value="8c488fc2-dbf1-4cdb-acd1-222b8fcca449"/> + <column name="TOPIC" value="Rahmenvertrag"/> + <column name="DESCRIPTION" value="Rahmenvertrag"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="6"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T10:15:18"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2014-09-16T07:22:01"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="94113af6-e96e-49c5-9c8b-4a12d4b07936"/> + <column name="ASSIGNEDTO" value="9429bc0d-0fc3-4887-93f0-2706131517cf"/> + <column name="TOPIC" value="Informationen senden"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-06T10:16:26"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2016-10-27T08:39:11"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="aed0bb17-80aa-4edd-8b11-7eb09e0eaef1"/> + <column name="ASSIGNEDTO" value="9429bc0d-0fc3-4887-93f0-2706131517cf"/> + <column name="TOPIC" value="Nachfassen"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-06T10:20:48"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2016-10-27T08:40:19"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="fb271223-f888-4796-8d5d-117113682924"/> + <column name="ASSIGNEDTO" value="2de03c35-f66a-4a4c-8a81-32401dc2ef6e"/> + <column name="TOPIC" value="Produktinteresse"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-10-27T08:35:23"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2016-10-27T08:36:22"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="eb798b53-78cf-46d4-abaa-5a17f426a7d2"/> + <column name="ASSIGNEDTO" value="2de03c35-f66a-4a4c-8a81-32401dc2ef6e"/> + <column name="TOPIC" value="Allgemein"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-10-06T10:20:32"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="9429bc0d-0fc3-4887-93f0-2706131517cf"/> + <column name="ASSIGNEDTO" value="2de03c35-f66a-4a4c-8a81-32401dc2ef6e"/> + <column name="TOPIC" value="ToDo"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-10-27T08:35:37"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2016-10-27T08:36:07"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="aa503a9b-8484-4b86-b7ca--11ab5cc939a"/> + <column name="TOPIC" value="Datenschutz-Arten"/> + <column name="DESCRIPTION" value="Datenschutz-Arten"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-15T06:11:19"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2021-07-16T01:51:36"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="83558d74-f0fa-45f0-8147-2d754307aec8"/> + <column name="TOPIC" value="Abteilungen"/> + <column name="DESCRIPTION" value="Abteilungen"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-04-21T01:42:35"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2021-07-16T01:51:28"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/> + <column name="TOPIC" value="Vertrieb"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-06-29T02:33:58"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2021-07-16T01:51:19"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="0d3258d8-e18d-482a-b20a-31b39396af6a"/> + <column name="TOPIC" value="Ressource"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="4"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-06-14T11:33:19"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2021-07-16T01:51:10"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="2a27f5bd-4e69-4b6b-8be5-e870618d1aa4"/> + <column name="ASSIGNEDTO" value="3052d584-83af-4f1a-b00d-c338b1681e07"/> + <column name="TOPIC" value="persönlich"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-23T12:19:18"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="a04c0748-700c-409d-91dd-9fcb83953c8b"/> + <column name="ASSIGNEDTO" value="3052d584-83af-4f1a-b00d-c338b1681e07"/> + <column name="TOPIC" value="Referenz-Kunde"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-23T12:19:04"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="daa19a4b-d2a4-4c75-a9ec-c6fc35a4bd-1"/> + <column name="ASSIGNEDTO" value="3052d584-83af-4f1a-b00d-c338b1681e07"/> + <column name="TOPIC" value="Website"/> + <column name="DESCRIPTION" value="Website"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T10:03:57"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="354b8b2b-b740-4642-ac50-44b9ad0e6fbd"/> + <column name="ASSIGNEDTO" value="3052d584-83af-4f1a-b00d-c338b1681e07"/> + <column name="TOPIC" value="Messe"/> + <column name="DESCRIPTION" value="Messe"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="4"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T10:03:40"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="baf639e8-6fd8-42d1-b370-1ab4d12d83a9"/> + <column name="ASSIGNEDTO" value="3052d584-83af-4f1a-b00d-c338b1681e07"/> + <column name="TOPIC" value="Anruf"/> + <column name="DESCRIPTION" value="Anruf"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="5"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T10:03:26"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="bff86fa3-3351-45f1-b4e9-46adeaacc8d8"/> + <column name="ASSIGNEDTO" value="08b8e5e9-a9bc-40e5-b1a3-2626bf0e842b"/> + <column name="TOPIC" value="Technologie"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:46:32"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="3d27692c-0f83-49d5-bdfa-eab94082e468"/> + <column name="ASSIGNEDTO" value="08b8e5e9-a9bc-40e5-b1a3-2626bf0e842b"/> + <column name="TOPIC" value="Referenz"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="-1"/> + <column name="SORTING_LAYER_4" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T09:46:22"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="ec37df26-3f27-4333-826e-66dc5f54c91d"/> + <column name="ASSIGNEDTO" value="83558d74-f0fa-45f0-8147-2d754307aec8"/> + <column name="TOPIC" value="Produktion"/> + <column name="DESCRIPTION" value="Produktion"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T03:44:12"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="757ec28a-cdfb-4db3-8293-2b46eae39fc9"/> + <column name="ASSIGNEDTO" value="83558d74-f0fa-45f0-8147-2d754307aec8"/> + <column name="TOPIC" value="Geschäftsleitung"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-06-14T11:36:54"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="611075b8-b8da-4214-bdb5-ec0f7c2d7908"/> + <column name="ASSIGNEDTO" value="83558d74-f0fa-45f0-8147-2d754307aec8"/> + <column name="TOPIC" value="Vertrieb"/> + <column name="DESCRIPTION" value="Vertrieb"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-04-21T01:42:45"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="02da3e29-9676-4abd-b16e-ccee1a2828b1"/> + <column name="ASSIGNEDTO" value="83558d74-f0fa-45f0-8147-2d754307aec8"/> + <column name="TOPIC" value="Marketing"/> + <column name="DESCRIPTION" value="Marketing"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="4"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-04-21T01:42:53"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="6d3fb243-1c8f-424e-a5d6-85bb373912e4"/> + <column name="ASSIGNEDTO" value="83558d74-f0fa-45f0-8147-2d754307aec8"/> + <column name="TOPIC" value="IT/Service"/> + <column name="DESCRIPTION" value="IT und Service"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="5"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T03:43:47"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="e27310c1-43a6-4e5a-8a41-da73fef8b626"/> + <column name="ASSIGNEDTO" value="611075b8-b8da-4214-bdb5-ec0f7c2d7908"/> + <column name="TOPIC" value="Aussendienst"/> + <column name="DESCRIPTION" value="Aussendienst"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T04:04:05"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="b5acfc78-2cc2-4c47-80e6-345102383ed1"/> + <column name="ASSIGNEDTO" value="611075b8-b8da-4214-bdb5-ec0f7c2d7908"/> + <column name="TOPIC" value="Innendienst"/> + <column name="DESCRIPTION" value="Innendienst"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-11-22T03:43:11"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="cc73519f-bc46-4ce3-bff5-336eeeaa70fc"/> + <column name="ASSIGNEDTO" value="fbd107dc-48b9-4fba-9c21-86d08f48162a"/> + <column name="TOPIC" value=" Kfz1"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-02-01T04:04:36"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="2857d130-f570-4581-b6f1-4ae51de9559d"/> + <column name="ASSIGNEDTO" value="fbd107dc-48b9-4fba-9c21-86d08f48162a"/> + <column name="TOPIC" value=" Kfz3"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-06-14T08:07:06"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2021-07-16T01:27:50"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="2fae6fb5-d6af-4cdd-b597-c09ea075916c"/> + <column name="ASSIGNEDTO" value="260d1423-629e-44ac-bff2-40ec07944ebf"/> + <column name="TOPIC" value="Raum101"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-06-14T11:33:37"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2021-07-16T01:32:52"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="05ba7abd-ed22-47a6-ac3e-4bff5a9d46cb"/> + <column name="ASSIGNEDTO" value="260d1423-629e-44ac-bff2-40ec07944ebf"/> + <column name="TOPIC" value="Raum102"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="-1"/> + <column name="SORTING_LAYER_3" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-06-14T11:33:45"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2021-07-16T01:28:52"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="260d1423-629e-44ac-bff2-40ec07944ebf"/> + <column name="ASSIGNEDTO" value="0d3258d8-e18d-482a-b20a-31b39396af6a"/> + <column name="TOPIC" value="Raum"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-06-14T11:33:28"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="fbd107dc-48b9-4fba-9c21-86d08f48162a"/> + <column name="ASSIGNEDTO" value="0d3258d8-e18d-482a-b20a-31b39396af6a"/> + <column name="TOPIC" value="Fahrzeug"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2016-06-14T11:33:53"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="0bcb9d7c-e3f7-4d9c-a0eb-f5be765fad88"/> + <column name="ASSIGNEDTO" value="aa503a9b-8484-4b86-b7ca--11ab5cc939a"/> + <column name="TOPIC" value="Addresse"/> + <column name="DESCRIPTION" value="ADDR"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="1"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-15T06:12:48"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2021-07-16T01:50:37"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="af30910f-4654-411e-9dda-869506f2c09c"/> + <column name="ASSIGNEDTO" value="aa503a9b-8484-4b86-b7ca--11ab5cc939a"/> + <column name="TOPIC" value="Kommunikation"/> + <column name="DESCRIPTION" value="COMM"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="2"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-15T06:12:37"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_EDIT" valueDate="2021-07-16T01:44:49"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="4b7f2ef8-ae00-409d-9bac-5da6fe8d3436"/> + <column name="ASSIGNEDTO" value="aa503a9b-8484-4b86-b7ca--11ab5cc939a"/> + <column name="TOPIC" value="Person"/> + <column name="DESCRIPTION" value="PERS"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-15T06:11:50"/> + </insert> + <insert tableName="TOPICTREE"> + <column name="TOPICTREEID" value="f277ccb1-d7be-4068-8901-01c2aa957b71"/> + <column name="ASSIGNEDTO" value="aa503a9b-8484-4b86-b7ca--11ab5cc939a"/> + <column name="TOPIC" value="Firma"/> + <column name="DESCRIPTION" value="ORG"/> + <column name="ACTIVE" valueNumeric="1"/> + <column name="SORTING_LAYER_1" valueNumeric="-1"/> + <column name="SORTING_LAYER_2" valueNumeric="4"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-15T06:12:19"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml index b93e263dd787521dd53d6bf37962eaddb811ff5e..e211a0f400b6d71748232707325c22af7fbf936c 100644 --- a/.liquibase/Data_alias/changelog.xml +++ b/.liquibase/Data_alias/changelog.xml @@ -27,6 +27,7 @@ <include relativeToChangelogFile="true" file="basic/2021.1.1/changelog.xml"/> <include relativeToChangelogFile="true" file="basic/2021.1.2/changelog.xml"/> <include relativeToChangelogFile="true" file="basic/2021.1.3/changelog.xml"/> + <include relativeToChangelogFile="true" file="basic/2021.2.0/changelog.xml"/> <include relativeToChangelogFile="true" file="basic/workflows/changelog.xml" context="workflow"/> <include relativeToChangelogFile="true" file="basic/_demoData/changelog.xml" context="example"/> diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 60140ad99b32cef9e6cc0229e882b4b1d478b296..75df167dc2cd36f23f4a54e085b0832369f21669 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -22238,6 +22238,396 @@ </entityFieldDb> </entityFields> </entityDb> + <entityDb> + <name>TOPICTREE</name> + <dbName></dbName> + <idColumn>TOPICTREEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>TOPICTREEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ACTIVE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORTING_LAYER_5</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORTING_LAYER_6</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TOPIC</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORTING_LAYER_1</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORTING_LAYER_2</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORTING_LAYER_3</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORTING_LAYER_4</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="500" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ASSIGNEDTO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>TOPICTREERELATION</name> + <dbName></dbName> + <idColumn>TOPICTREERELATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TOPICTREE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TOPICTREERELATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> </entities> </entityGroup> </aliasDefDb> diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index 049eeb525e6c6ffbe044dea92d433afade2a879d..18ff4f74b031f7b7e427bf633349d12ab604bf39 100644 --- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod +++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod @@ -377,6 +377,10 @@ <name>Checklist</name> <kind v="10077" /> </entityNode> + <entityNode> + <name>TopicTree</name> + <kind v="10077" /> + </entityNode> </childNodes> </entityNode> <entityNode> diff --git a/entity/Activity_entity/Activity_entity.aod b/entity/Activity_entity/Activity_entity.aod index 9e1c5bd2f5d657f159a50bc72534b1167772a44c..59493fb1a3c0a6573607469d28b34c66ca73877d 100644 --- a/entity/Activity_entity/Activity_entity.aod +++ b/entity/Activity_entity/Activity_entity.aod @@ -698,6 +698,39 @@ <name>AdvActivityId_param</name> <expose v="true" /> </entityParameter> + <entityConsumer> + <name>Topics</name> + <onValidation>%aditoprj%/entity/Activity_entity/entityfields/topics/onValidation.js</onValidation> + <dependency> + <name>dependency</name> + <entityName>TopicTreeRelation_entity</entityName> + <fieldName>TopicRelation</fieldName> + </dependency> + <children> + <entityParameter> + <name>ObjectType_param</name> + <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/topics/children/objecttype_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>ObjectRowId_param</name> + <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/topics/children/objectrowid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>AllTopics</name> + <dependency> + <name>dependency</name> + <entityName>TopicTree_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>Expanded_param</name> + <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/alltopics/children/expanded_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> @@ -847,6 +880,24 @@ <isLookupFilter v="false" /> <filtertype>BASIC</filtertype> </filterExtension> + <filterExtension> + <name>Topic_filter</name> + <title>Topic</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>AllTopics</consumer> + <filterConditionProcess>%aditoprj%/entity/Activity_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>TopicIncludingSubTopics_filter</name> + <title>Topic (incl. Subtopics)</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>AllTopics</consumer> + <filterConditionProcess>%aditoprj%/entity/Activity_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> </filterExtensions> </dbRecordContainer> </recordContainers> diff --git a/entity/Activity_entity/entityfields/alltopics/children/expanded_param/valueProcess.js b/entity/Activity_entity/entityfields/alltopics/children/expanded_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a --- /dev/null +++ b/entity/Activity_entity/entityfields/alltopics/children/expanded_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string(true); \ No newline at end of file diff --git a/entity/Activity_entity/entityfields/topics/children/objectrowid_param/valueProcess.js b/entity/Activity_entity/entityfields/topics/children/objectrowid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a8267b62060b4bd30cedaba4713f4421a6e6f9ff --- /dev/null +++ b/entity/Activity_entity/entityfields/topics/children/objectrowid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.ACTIVITYID")); \ No newline at end of file diff --git a/entity/Activity_entity/entityfields/topics/children/objecttype_param/valueProcess.js b/entity/Activity_entity/entityfields/topics/children/objecttype_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..cc6924394ae950c43386275dda2c8db5d7a9c0ed --- /dev/null +++ b/entity/Activity_entity/entityfields/topics/children/objecttype_param/valueProcess.js @@ -0,0 +1,4 @@ +import("Context_lib"); +import("system.result"); + +result.string(ContextUtils.getCurrentContextId()); \ No newline at end of file diff --git a/entity/Activity_entity/entityfields/topics/onValidation.js b/entity/Activity_entity/entityfields/topics/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..6e919e3fc66765b822eca989f63eef0c5f477628 --- /dev/null +++ b/entity/Activity_entity/entityfields/topics/onValidation.js @@ -0,0 +1,4 @@ +import("TopicTree_lib"); +import("system.result"); + +result.string(TopicTreeUtils.validateTopicCount("Topics")); \ No newline at end of file diff --git a/entity/Activity_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js b/entity/Activity_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..afedc8049596e79077988ea9b16bb335ab8680e5 --- /dev/null +++ b/entity/Activity_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js @@ -0,0 +1,34 @@ +import("Context_lib"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); + +var rawValue = vars.get("$local.rawvalue"); +var operator = vars.get("$local.comparison"); + +var topicSql = newSelect("TOPICTREERELATION.TOPICTREE_ID") + .from("TOPICTREERELATION") + .where("TOPICTREERELATION.OBJECT_TYPE", ContextUtils.getCurrentContextId()) + +if(operator == "ISNOTNULL") +{ + topicSql = topicSql.and("TOPICTREERELATION.OBJECT_ROWID != ACTIVITY.ACTIVITYID") +} +else if(operator != "ISNULL") +{ + topicSql = topicSql.and("TOPICTREERELATION.TOPICTREE_ID", rawValue) + .and("TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID"); +} +else +{ + topicSql = topicSql.and("TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID"); +} + +var condType = SqlBuilder.EXISTS(); + +if (operator != "EQUAL") +{ + condType = SqlBuilder.NOT_EXISTS(); +} + +result.string(newWhere(null, topicSql, condType)); \ No newline at end of file diff --git a/entity/Activity_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js b/entity/Activity_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2435ea65507bee9174463f1dc310ae142c0834aa --- /dev/null +++ b/entity/Activity_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js @@ -0,0 +1,53 @@ +import("TopicTree_lib"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); + +var rawValue = vars.get("$local.rawvalue"); +var operator = vars.get("$local.comparison"); + +var topicSql = newSelect("TOPICTREERELATION.TOPICTREE_ID") + .from("TOPICTREERELATION") + .where("TOPICTREERELATION.OBJECT_TYPE", "Activity") + +if(operator == "ISNOTNULL") +{ + topicSql = topicSql.and("TOPICTREERELATION.OBJECT_ROWID != ACTIVITY.ACTIVITYID") +} +else if(operator != "ISNULL") +{ + var topicTreeIds = [rawValue]; + var topics = [rawValue]; + //update child topics accordingly + while(topicTreeIds && topicTreeIds.length > 0) + { + topicTreeIds = newSelect("TOPICTREEID") + .from("TOPICTREE") + .where("TOPICTREE.ASSIGNEDTO", topicTreeIds, SqlBuilder.IN()) + .arrayColumn(); + + if(topicTreeIds && topicTreeIds.length > 0) + { + for (let i = 0; i < topicTreeIds.length; i++) + { + topics.push(topicTreeIds[i]); + } + + } + } + topicSql = topicSql.and("TOPICTREERELATION.TOPICTREE_ID", topics, SqlBuilder.IN()) + .and("TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID"); +} +else +{ + topicSql = topicSql.and("TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID"); +} + +var condType = SqlBuilder.EXISTS(); + +if (operator != "EQUAL") +{ + condType = SqlBuilder.NOT_EXISTS(); +} + +result.string(newWhere(null, topicSql, condType)); \ No newline at end of file diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index 0dd2601540a2b5f0e411f540ae187f57f8bae247..603cd1abc2cade88d59f650b22be449135a1cdee 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -1411,6 +1411,20 @@ <name>IgnoreOrderBy_param</name> <expose v="true" /> </entityParameter> + <entityConsumer> + <name>AllTopics</name> + <dependency> + <name>dependency</name> + <entityName>TopicTree_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>Expanded_param</name> + <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/alltopics/children/expanded_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> @@ -1774,6 +1788,24 @@ <documentation>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/visitrecommendation_filter/documentation.adoc</documentation> <filtertype>BASIC</filtertype> </filterExtension> + <filterExtension> + <name>Topic_filter</name> + <title>Activity: Topic</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>AllTopics</consumer> + <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>TopicIncludingSubTopics</name> + <title>Activity: Topic (incl. Subtopics)</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>AllTopics</consumer> + <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/topicincludingsubtopics/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> </filterExtensions> </dbRecordContainer> <indexRecordContainer> diff --git a/entity/Organisation_entity/entityfields/alltopics/children/expanded_param/valueProcess.js b/entity/Organisation_entity/entityfields/alltopics/children/expanded_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a --- /dev/null +++ b/entity/Organisation_entity/entityfields/alltopics/children/expanded_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string(true); \ No newline at end of file diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..36791c8b294538e8706862eb760536098cf37265 --- /dev/null +++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js @@ -0,0 +1,35 @@ +import("Context_lib"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); + +var rawValue = vars.get("$local.rawvalue"); +var operator = vars.get("$local.comparison"); + +var topicSql = newSelect("ACTIVITYLINK.ACTIVITYLINKID") + .from("ACTIVITYLINK") + .join("ACTIVITY", "ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID") + .join("TOPICTREERELATION", "TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID") + .where("ACTIVITYLINK.OBJECT_TYPE", ContextUtils.getCurrentContextId()); + +if(operator == "ISNOTNULL") +{ + topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID != CONTACT.CONTACTID"); +} +else if(operator != "ISNULL") +{ + topicSql = topicSql.and("TOPICTREERELATION.TOPICTREE_ID", rawValue) + .and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID"); +} +else +{ + topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID"); +} +var condType = SqlBuilder.EXISTS(); + +if (operator != "EQUAL") +{ + condType = SqlBuilder.NOT_EXISTS(); +} + +result.string(newWhere(null, topicSql, condType)); \ No newline at end of file diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/topicincludingsubtopics/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/topicincludingsubtopics/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..6697b2dd13ebc6d4943ac6971cbf295a3f4db41e --- /dev/null +++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/topicincludingsubtopics/filterConditionProcess.js @@ -0,0 +1,55 @@ +import("Context_lib"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); + +var rawValue = vars.get("$local.rawvalue"); +var operator = vars.get("$local.comparison"); + +var topicSql = newSelect("ACTIVITYLINK.ACTIVITYLINKID") + .from("ACTIVITYLINK") + .join("ACTIVITY", "ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID") + .join("TOPICTREERELATION", "TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID") + .where("ACTIVITYLINK.OBJECT_TYPE", ContextUtils.getCurrentContextId()); + +if(operator == "ISNOTNULL") +{ + topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID != CONTACT.CONTACTID"); +} +else if(operator != "ISNULL") +{ + var topicTreeIds = [rawValue]; + var topics = [rawValue]; + + //update child topics accordingly + while(topicTreeIds && topicTreeIds.length > 0) + { + topicTreeIds = newSelect("TOPICTREEID") + .from("TOPICTREE") + .where("TOPICTREE.ASSIGNEDTO", topicTreeIds, SqlBuilder.IN()) + .arrayColumn(); + + if(topicTreeIds && topicTreeIds.length > 0) + { + for (let i = 0; i < topicTreeIds.length; i++) + { + topics.push(topicTreeIds[i]); + } + + } + } + topicSql = topicSql.and("TOPICTREERELATION.TOPICTREE_ID", topics, SqlBuilder.IN()) + .and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID"); +} +else +{ + topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID"); +} +var condType = SqlBuilder.EXISTS(); + +if (operator != "EQUAL") +{ + condType = SqlBuilder.NOT_EXISTS(); +} + +result.string(newWhere(null, topicSql, condType)); \ No newline at end of file diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index e7436815ba14d9de1ee7b325e7019b2958b96818..e712aba6c63b5bb0e02c5852c3b58bbd82710e0e 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -1336,6 +1336,20 @@ <fieldName>Salesprojects</fieldName> </dependency> </entityConsumer> + <entityConsumer> + <name>AllTopics</name> + <dependency> + <name>dependency</name> + <entityName>TopicTree_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>Expanded_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/alltopics/children/expanded_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> @@ -1822,6 +1836,24 @@ <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/salesprojectresponsible_filter/filterConditionProcess.js</filterConditionProcess> <filtertype>BASIC</filtertype> </filterExtension> + <filterExtension> + <name>Topic_filter</name> + <title>Activity: Topic</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>AllTopics</consumer> + <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>TopicIncludingSubTopics_filter</name> + <title>Activity: Topic (incl. Subtopics)</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>AllTopics</consumer> + <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> </filterExtensions> </dbRecordContainer> <indexRecordContainer> diff --git a/entity/Person_entity/entityfields/alltopics/children/expanded_param/valueProcess.js b/entity/Person_entity/entityfields/alltopics/children/expanded_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a --- /dev/null +++ b/entity/Person_entity/entityfields/alltopics/children/expanded_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string(true); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1deaa052454a181c544c64fd3957feb672717660 --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js @@ -0,0 +1,36 @@ +import("Context_lib"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); + +var rawValue = vars.get("$local.rawvalue"); +var operator = vars.get("$local.comparison"); + +var topicSql = newSelect("ACTIVITYLINK.ACTIVITYLINKID") + .from("ACTIVITYLINK") + .join("ACTIVITY", "ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID") + .join("TOPICTREERELATION", "TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID") + .where("ACTIVITYLINK.OBJECT_TYPE", ContextUtils.getCurrentContextId()); + +if(operator == "ISNOTNULL") +{ + topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID != CONTACT.CONTACTID"); +} +else if(operator != "ISNULL") +{ + topicSql = topicSql.and("TOPICTREERELATION.TOPICTREE_ID", rawValue) + .and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID"); +} +else +{ + topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID"); +} + +var condType = SqlBuilder.EXISTS(); + +if (operator != "EQUAL") +{ + condType = SqlBuilder.NOT_EXISTS(); +} + +result.string(newWhere(null, topicSql, condType)); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..6aa80f001b011babb2a565f66755088ee230f572 --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js @@ -0,0 +1,60 @@ +import("Context_lib"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); + +var rawValue = vars.get("$local.rawvalue"); +var operator = vars.get("$local.comparison"); + +var topicSql = newSelect("ACTIVITYLINK.ACTIVITYLINKID") + .from("ACTIVITYLINK") + .join("ACTIVITY", "ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID") + .join("TOPICTREERELATION", "TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID") + .where("ACTIVITYLINK.OBJECT_TYPE", ContextUtils.getCurrentContextId()); + +if(operator == "ISNOTNULL") +{ + topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID != CONTACT.CONTACTID"); +} +else if(operator != "ISNULL") +{ + var topicTreeIds = [rawValue]; + var topics = [rawValue]; + var stop = false; + //update child topics accordingly + while(stop == false) + { + topicTreeIds = newSelect("TOPICTREEID") + .from("TOPICTREE") + .where("TOPICTREE.ASSIGNEDTO", topicTreeIds, SqlBuilder.IN()) + .arrayColumn(); + + if(topicTreeIds && topicTreeIds.length > 0) + { + for (let i = 0; i < topicTreeIds.length; i++) + { + topics.push(topicTreeIds[i]); + } + + } + else + { + stop = true; + } + } + topicSql = topicSql.and("TOPICTREERELATION.TOPICTREE_ID", topics, SqlBuilder.IN()) + .and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID"); +} +else +{ + topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID"); +} + +var condType = SqlBuilder.EXISTS(); + +if (operator != "EQUAL") +{ + condType = SqlBuilder.NOT_EXISTS(); +} + +result.string(newWhere(null, topicSql, condType)); \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/TopicTreeRelation_entity.aod b/entity/TopicTreeRelation_entity/TopicTreeRelation_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..10a9f4421933b6a52a028ad99833ce39b73f7083 --- /dev/null +++ b/entity/TopicTreeRelation_entity/TopicTreeRelation_entity.aod @@ -0,0 +1,169 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>TopicTreeRelation_entity</name> + <title>Topic</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/TopicTreeRelation_entity/documentation.adoc</documentation> + <titlePlural>Topics</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>TOPICTREERELATIONID</name> + <state>INVISIBLE</state> + </entityField> + <entityField> + <name>TOPICTREE_ID</name> + <title>Topic</title> + <consumer>Topics</consumer> + <mandatory v="true" /> + <stateProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/topictree_id/stateProcess.js</stateProcess> + <displayValueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/topictree_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>OBJECT_ROWID</name> + <state>INVISIBLE</state> + <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/object_rowid/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>OBJECT_TYPE</name> + <state>INVISIBLE</state> + <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/object_type/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DESCRIPTION</name> + <title>Description</title> + <contentType>LONG_TEXT</contentType> + <htmlEditorFeatures>ADVANCED</htmlEditorFeatures> + </entityField> + <entityField> + <name>USER_NEW</name> + <state>INVISIBLE</state> + <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/user_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_NEW</name> + <state>INVISIBLE</state> + <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_EDIT</name> + <state>INVISIBLE</state> + <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/user_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_EDIT</name> + <state>INVISIBLE</state> + <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/date_edit/valueProcess.js</valueProcess> + </entityField> + <entityProvider> + <name>TopicRelation</name> + <sortingField>SORT</sortingField> + <documentation>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/topicrelation/documentation.adoc</documentation> + </entityProvider> + <entityParameter> + <name>ObjectRowId_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>ObjectType_param</name> + <expose v="true" /> + </entityParameter> + <entityConsumer> + <name>Topics</name> + <dependency> + <name>dependency</name> + <entityName>TopicTree_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>OnlyActive_param</name> + <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/topics/children/onlyactive_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>OnlyFiveLayers_param</name> + </entityParameter> + <entityParameter> + <name>Expanded_param</name> + <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/topics/children/expanded_param/valueProcess.js</valueProcess> + <mandatory v="true" /> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>TOPICTREE_IDdisplayValue</name> + <title>Topic</title> + <stateProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>SORT</name> + </entityField> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <conditionProcess>%aditoprj%/entity/TopicTreeRelation_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <orderClauseProcess>%aditoprj%/entity/TopicTreeRelation_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>TOPICTREERELATIONID.value</name> + <recordfield>TOPICTREERELATION.TOPICTREERELATIONID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>TOPICTREE_ID.value</name> + <recordfield>TOPICTREERELATION.TOPICTREE_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OBJECT_TYPE.value</name> + <recordfield>TOPICTREERELATION.OBJECT_TYPE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OBJECT_ROWID.value</name> + <recordfield>TOPICTREERELATION.OBJECT_ROWID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DESCRIPTION.value</name> + <recordfield>TOPICTREERELATION.DESCRIPTION</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW.value</name> + <recordfield>TOPICTREERELATION.USER_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_EDIT.value</name> + <recordfield>TOPICTREERELATION.USER_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>TOPICTREERELATION.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_EDIT.value</name> + <recordfield>TOPICTREERELATION.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>SORT.value</name> + <recordfield>TOPICTREERELATION.SORT</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>162e9cbb-1a39-4577-97fa-d2833a9966e3</name> + <tableName>TOPICTREERELATION</tableName> + <primaryKey>TOPICTREERELATIONID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/TopicTreeRelation_entity/documentation.adoc b/entity/TopicTreeRelation_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..4e961c5a5da4efd0392645ef2be299e62a444f3c --- /dev/null +++ b/entity/TopicTreeRelation_entity/documentation.adoc @@ -0,0 +1,15 @@ += TopicTreeRelation_entity + +Definition: + + Allows n:m relations between objects and topics (one activity can have multiple topics and one topic can be assigned to multiple activities) + +Purpose: + + This Entity allows to assign topics to any object you want, altough we currently only use it for activities. + It works the same way as all the other linking entites: + You create a consumer, link it to the TopicRelation provider, set the objectType and objectRowId params. + This entity has an relation to the TopicTree_entity and OnlyShowActive_param is set to true so you can only select active topics. +´ An relationdataset has the object_rowId and ObjectType aswell as the topic_id and a description textfield. + +See also TopicTree_entity. \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/entityfields/date_edit/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/date_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2af46a8e46789056c6c341a8e4e087f8e1edc0c4 --- /dev/null +++ b/entity/TopicTreeRelation_entity/entityfields/date_edit/valueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + result.string(vars.get("$sys.date")); +} \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/entityfields/date_new/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9e4534537d88c19f96216d442c0b0ae984f65109 --- /dev/null +++ b/entity/TopicTreeRelation_entity/entityfields/date_new/valueProcess.js @@ -0,0 +1,8 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(vars.get("$sys.date")); +} \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/entityfields/object_rowid/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/object_rowid/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4e82c3f0b68ddc75297e7316171953842d02b94f --- /dev/null +++ b/entity/TopicTreeRelation_entity/entityfields/object_rowid/valueProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("system.vars"); + +if(vars.get("$param.ObjectRowId_param")) +{ + result.string(vars.get("$param.ObjectRowId_param")); +} \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/entityfields/object_type/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/object_type/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9633afcefd4868203f1a66e5f99994f57bdf5baf --- /dev/null +++ b/entity/TopicTreeRelation_entity/entityfields/object_type/valueProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("system.vars"); + +if(vars.get("$param.ObjectType_param")) +{ + result.string(vars.get("$param.ObjectType_param")); +} \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/entityfields/topicrelation/documentation.adoc b/entity/TopicTreeRelation_entity/entityfields/topicrelation/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..27d347c5dec08a973ed8f311160c0535d5b28c4a --- /dev/null +++ b/entity/TopicTreeRelation_entity/entityfields/topicrelation/documentation.adoc @@ -0,0 +1,3 @@ += TopicRelation + +Set the objectType and objectRowId params accordingly to only see the datasets of said dataset. \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/entityfields/topics/children/expanded_param/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/topics/children/expanded_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a --- /dev/null +++ b/entity/TopicTreeRelation_entity/entityfields/topics/children/expanded_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string(true); \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/entityfields/topics/children/onlyactive_param/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/topics/children/onlyactive_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a --- /dev/null +++ b/entity/TopicTreeRelation_entity/entityfields/topics/children/onlyactive_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string(true); \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/entityfields/topictree_id/displayValueProcess.js b/entity/TopicTreeRelation_entity/entityfields/topictree_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..6f3388752016c7a574439e987d439eaba0ae2a17 --- /dev/null +++ b/entity/TopicTreeRelation_entity/entityfields/topictree_id/displayValueProcess.js @@ -0,0 +1,11 @@ +import("TopicTree_lib"); +import("system.neon"); +import("system.result"); +import("system.vars"); + +if (vars.get("$this.value") && (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT)) +{ + var title = TopicTreeUtils.getTopicTreeDisplayValue(vars.get("$this.value")); + + result.string(title); +} \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/entityfields/topictree_id/stateProcess.js b/entity/TopicTreeRelation_entity/entityfields/topictree_id/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3713fc5d01c660ae2b034c30f8f334f3543a5db7 --- /dev/null +++ b/entity/TopicTreeRelation_entity/entityfields/topictree_id/stateProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +var state = neon.COMPONENTSTATE_INVISIBLE; +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +{ + state = neon.COMPONENTSTATE_EDITABLE; +} + +result.string(state); \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/stateProcess.js b/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b73d481f148d9fa9eb8e3288292fa95544f202db --- /dev/null +++ b/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/stateProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +var state = neon.COMPONENTSTATE_EDITABLE; +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +{ + state = neon.COMPONENTSTATE_INVISIBLE; +} + +result.string(state); \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..78e2e10fc0e5474ffaa1ce1692029b92b859917b --- /dev/null +++ b/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/valueProcess.js @@ -0,0 +1,8 @@ +import("TopicTree_lib"); +import("system.neon"); +import("system.result"); +import("system.vars"); + +var title = TopicTreeUtils.getTopicTreeDisplayValue(vars.get("$field.TOPICTREE_ID")); + +result.string(title); \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/entityfields/user_edit/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/user_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b874a7ac426b8e99383ac949299b9753e4951f2b --- /dev/null +++ b/entity/TopicTreeRelation_entity/entityfields/user_edit/valueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + result.string(vars.get("$sys.user")); +} \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/entityfields/user_new/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/user_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ee15284e5df386270e83f1b57b189f3fecced930 --- /dev/null +++ b/entity/TopicTreeRelation_entity/entityfields/user_new/valueProcess.js @@ -0,0 +1,8 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(vars.get("$sys.user")); +} \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/recordcontainers/db/conditionProcess.js b/entity/TopicTreeRelation_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2921e338105d0be2d8d2a6392283b97f33db172f --- /dev/null +++ b/entity/TopicTreeRelation_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,9 @@ +import("system.vars"); +import("system.db"); +import("system.result"); +import("Sql_lib"); + +var cond = newWhereIfSet("TOPICTREERELATION.OBJECT_ROWID", "$param.ObjectRowId_param", SqlBuilder.EQUAL()) + .and("TOPICTREERELATION.OBJECT_TYPE", "$param.ObjectType_param", SqlBuilder.EQUAL()); + +result.string(cond.toString()); \ No newline at end of file diff --git a/entity/TopicTreeRelation_entity/recordcontainers/db/orderClauseProcess.js b/entity/TopicTreeRelation_entity/recordcontainers/db/orderClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..df94f9c6f56a7aefa079465bc4f33a55e8ec47b7 --- /dev/null +++ b/entity/TopicTreeRelation_entity/recordcontainers/db/orderClauseProcess.js @@ -0,0 +1,6 @@ +import("system.db"); +import("system.result"); + +result.object({ + "TOPICTREERELATION.SORT": db.DESCENDING +}) \ No newline at end of file diff --git a/entity/TopicTree_entity/TopicTree_entity.aod b/entity/TopicTree_entity/TopicTree_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..870e334f7f617e7e1fe0da236bd42f3a0e150256 --- /dev/null +++ b/entity/TopicTree_entity/TopicTree_entity.aod @@ -0,0 +1,302 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>TopicTree_entity</name> + <title>Topic Tree</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/TopicTree_entity/documentation.adoc</documentation> + <grantDeleteProcess>%aditoprj%/entity/TopicTree_entity/grantDeleteProcess.js</grantDeleteProcess> + <contentTitleProcess>%aditoprj%/entity/TopicTree_entity/contentTitleProcess.js</contentTitleProcess> + <iconId>VAADIN:TREE_TABLE</iconId> + <recordContainer>jdito</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>TOPICTREEID</name> + <state>INVISIBLE</state> + <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/topictreeid/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>ASSIGNEDTO</name> + <title>Superordinate Topic</title> + <consumer>Topics</consumer> + <contentType>TEXT</contentType> + <groupable v="true" /> + <linkedContext>TopicTree</linkedContext> + <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/assignedto/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/assignedto/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/assignedto/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>TOPIC</name> + <title>Topic</title> + <mandatory v="true" /> + </entityField> + <entityField> + <name>DESCRIPTION</name> + <title>Description</title> + </entityField> + <entityField> + <name>ACTIVE</name> + <title>Active</title> + <contentType>BOOLEAN</contentType> + <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/active/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>SORTING_LAYER_1</name> + </entityField> + <entityField> + <name>SORTING_LAYER_2</name> + </entityField> + <entityField> + <name>SORTING_LAYER_3</name> + </entityField> + <entityField> + <name>SORTING_LAYER_4</name> + </entityField> + <entityField> + <name>SORTING_LAYER_5</name> + </entityField> + <entityField> + <name>SORTING_LAYER_6</name> + </entityField> + <entityField> + <name>USER_NEW</name> + <state>INVISIBLE</state> + <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/user_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_EDIT</name> + <state>INVISIBLE</state> + <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/user_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_NEW</name> + <contentType>DATE</contentType> + <state>INVISIBLE</state> + <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_EDIT</name> + <contentType>DATE</contentType> + <state>INVISIBLE</state> + <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/date_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>icon</name> + <colorProcess>%aditoprj%/entity/TopicTree_entity/entityfields/icon/colorProcess.js</colorProcess> + <contentType>IMAGE</contentType> + </entityField> + <entityField> + <name>UID</name> + <state>INVISIBLE</state> + </entityField> + <entityActionGroup> + <name>More</name> + <children> + <entityActionField> + <name>first</name> + <title>First</title> + <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/first/onActionProcess.js</onActionProcess> + <iconId>VAADIN:ANGLE_DOUBLE_UP</iconId> + <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/first/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>moveUp</name> + <title>Move Up</title> + <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/moveup/onActionProcess.js</onActionProcess> + <iconId>VAADIN:ANGLE_UP</iconId> + <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/moveup/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>moveDown</name> + <title>Move Down</title> + <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/movedown/onActionProcess.js</onActionProcess> + <iconId>VAADIN:ANGLE_DOWN</iconId> + <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/movedown/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>last</name> + <title>Last</title> + <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/last/onActionProcess.js</onActionProcess> + <iconId>VAADIN:ANGLE_DOUBLE_DOWN</iconId> + <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/last/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>copy</name> + <title>Copy</title> + <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/copy/onActionProcess.js</onActionProcess> + <iconId>VAADIN:COPY</iconId> + <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/copy/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>paste</name> + <title>Paste</title> + <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/paste/onActionProcess.js</onActionProcess> + <iconId>VAADIN:PASTE</iconId> + <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/paste/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>pasteAsTopTopic</name> + <title>Paste as Top Topic</title> + <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/pasteastoptopic/onActionProcess.js</onActionProcess> + <iconId>VAADIN:PASTE</iconId> + </entityActionField> + <entityActionField> + <name>cut</name> + <title>Cut</title> + <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/cut/onActionProcess.js</onActionProcess> + <iconId>VAADIN:SCISSORS</iconId> + <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/cut/stateProcess.js</stateProcess> + </entityActionField> + </children> + </entityActionGroup> + <entityField> + <name>sortingHelper</name> + <state>INVISIBLE</state> + </entityField> + <entityActionGroup> + <name>CreateExpand</name> + <iconId>NEON:PLUS</iconId> + <children> + <entityActionField> + <name>createChildTopic</name> + <title>Create Child Topic</title> + <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/onActionProcess.js</onActionProcess> + <iconId>VAADIN:FILE_TREE_SMALL</iconId> + <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>expand</name> + <title>Expand</title> + <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/createexpand/children/expand/onActionProcess.js</onActionProcess> + <iconId>VAADIN:EXPAND</iconId> + </entityActionField> + </children> + </entityActionGroup> + <entityConsumer> + <name>Topics</name> + <dependency> + <name>dependency</name> + <entityName>#ENTITY</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>OnlyFiveLayers_param</name> + <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/topics/children/onlyfivelayers_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>Expanded_param</name> + <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/topics/children/expanded_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityParameter> + <name>AssignedToId_param</name> + <expose v="true" /> + <documentation>%aditoprj%/entity/TopicTree_entity/entityfields/assignedtoid_param/documentation.adoc</documentation> + </entityParameter> + <entityParameter> + <name>OnlyActive_param</name> + <expose v="true" /> + <mandatory v="true" /> + <documentation>%aditoprj%/entity/TopicTree_entity/entityfields/onlyactive_param/documentation.adoc</documentation> + </entityParameter> + <entityParameter> + <name>OnlyFiveLayers_param</name> + <expose v="true" /> + <documentation>%aditoprj%/entity/TopicTree_entity/entityfields/onlyfivelayers_param/documentation.adoc</documentation> + </entityParameter> + <entityField> + <name>warningText</name> + <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/warningtext/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/warningtext/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>expanded</name> + <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/expanded/valueProcess.js</valueProcess> + </entityField> + <entityParameter> + <name>Expanded_param</name> + <expose v="true" /> + </entityParameter> + </entityFields> + <recordContainers> + <jDitoRecordContainer> + <name>jdito</name> + <jDitoRecordAlias>Data_alias</jDitoRecordAlias> + <contentProcess>%aditoprj%/entity/TopicTree_entity/recordcontainers/jdito/contentProcess.js</contentProcess> + <rowCountProcess>%aditoprj%/entity/TopicTree_entity/recordcontainers/jdito/rowCountProcess.js</rowCountProcess> + <onInsert>%aditoprj%/entity/TopicTree_entity/recordcontainers/jdito/onInsert.js</onInsert> + <onUpdate>%aditoprj%/entity/TopicTree_entity/recordcontainers/jdito/onUpdate.js</onUpdate> + <onDelete>%aditoprj%/entity/TopicTree_entity/recordcontainers/jdito/onDelete.js</onDelete> + <recordFieldMappings> + <jDitoRecordFieldMapping> + <name>TOPICTREEID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>ASSIGNEDTO.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>ACTIVE.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>TOPIC.value</name> + <isFilterable v="true" /> + <isLookupFilter v="true" /> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>DESCRIPTION.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>SORTING_LAYER_1.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>SORTING_LAYER_2.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>SORTING_LAYER_3.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>SORTING_LAYER_4.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>SORTING_LAYER_5.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>SORTING_LAYER_6.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>DATE_EDIT.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>DATE_NEW.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>USER_EDIT.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>USER_NEW.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>sortingHelper.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>UID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>icon.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>expanded.value</name> + </jDitoRecordFieldMapping> + </recordFieldMappings> + </jDitoRecordContainer> + </recordContainers> +</entity> diff --git a/entity/TopicTree_entity/contentTitleProcess.js b/entity/TopicTree_entity/contentTitleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ec5d92b341436d441a986ab2d969a5170a5b01dd --- /dev/null +++ b/entity/TopicTree_entity/contentTitleProcess.js @@ -0,0 +1,8 @@ +import("TopicTree_lib"); +import("system.neon"); +import("system.result"); +import("system.vars"); + +var title = TopicTreeUtils.getTopicTreeDisplayValue(vars.get("$field.TOPICTREEID")); + +result.string(title); \ No newline at end of file diff --git a/entity/TopicTree_entity/documentation.adoc b/entity/TopicTree_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..8003ec604e2c2c5cb169975a67ce6a2dcc3f1545 --- /dev/null +++ b/entity/TopicTree_entity/documentation.adoc @@ -0,0 +1,37 @@ += TopicTree_entity + +Definition: + + The administrative representation of the topicTree which is used in activity using TopicTreeRelation_entity + The topics can be dynamically configured at runtime. + +Purpose: + + This Entity gives the administrators an easy way to change the topicTree. + Topics get stored in the TopicTree table with their own uid, the assignedTo Id of the Superordinate Topic, a tinyInt field for the active boolean, + topic title, topic description, sorting_layer_1-6 and the standard date/user new/edit columns. + + This entity displays the Topic Tree and you can easily change the topic title, description and status using the editview. + Aswell as change the order of subTopics using the actions (first, last, move down, move up) and even copy, cut and paste topics and their subtopics. + When creating a topic you have the option to assign it to another topic -> there also exists a action that presets the selected topic. + +Particularities: + + The sorting is done using six sorting columns: SORTING_VALUE_1, SORTING_VALUE_2, SORTING_VALUE_3, SORTING_VALUE_4, SORTING_VALUE_5, SORTING_VALUE_6 + The the last one that's filled has to be relevant one. + + Little example to make the whole thing more understandable: + TopicA: SORTING_LAYER_1: 1; ASSIGNEDTO: null + TopicAA: SORTING_LAYER_2: 1; ASSIGNEDTO: topicTreeIdOfTopicA + TopicAB: SORTING_LAYER_2: 2; ASSIGNEDTO: topicTreeIdOfTopicA + TopicAC: SORTING_LAYER_2: 3; ASSIGNEDTO: topicTreeIdOfTopicA + TopicACA: SORTING_LAYER_3: 1; ASSIGNEDTO: topicTreeIdOfTopicAC + TopicAD: SORTING_LAYER_2: 4; ASSIGNEDTO: topicTreeIdOfTopicA + TopicB: SORTING_LAYER_1: 2; ASSIGNEDTO: null + TopicC: SORTING_LAYER_1: 3; ASSIGNEDTO: null + TopicCA: SORTING_LAYER_2: 1; ASSIGNEDTO: topicTreeIdOfTopicC + + We easily know what layer we are on thank's to these layer columns (if SORTING_LAYER_6 is filled we are in the 6th layer for example) + the actions make sure to fill those accordingly and the stateprocceses also act acordingly (to make it impossible to create a seventh layer using the Create Child Topic action or pasting). + The AssignedTo lookup doesn't show the complete tree, but instead only shows 5 layers for the same reason (use OnlyFiveLayers_param if you want the same behaviour in your lookup) + There also exists another parameter called OnlyActive_param. If set to true you only get to see the active ones. -> make sure that every subtopic has the same status as the above one and vice versa. \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/active/valueProcess.js b/entity/TopicTree_entity/entityfields/active/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c7507ac063f466664ca9a21208126033d122b504 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/active/valueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(!vars.get("$this.value") && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(1); +} \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/assignedto/displayValueProcess.js b/entity/TopicTree_entity/entityfields/assignedto/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2191a242f75054acea766be123262b326baf334c --- /dev/null +++ b/entity/TopicTree_entity/entityfields/assignedto/displayValueProcess.js @@ -0,0 +1,11 @@ +import("TopicTree_lib"); +import("system.neon"); +import("system.result"); +import("system.vars"); + +if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && vars.get("$this.value")) +{ + var title = TopicTreeUtils.getTopicTreeDisplayValue(vars.get("$this.value")); + + result.string(title); +} \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/assignedto/stateProcess.js b/entity/TopicTree_entity/entityfields/assignedto/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..64f512b6e7d440ccb3655f07bbe643561f35a858 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/assignedto/stateProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("system.vars"); +import("system.neon"); + +var state = neon.COMPONENTSTATE_READONLY; +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + state = neon.COMPONENTSTATE_EDITABLE; +} + +result.string(state); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/assignedto/valueProcess.js b/entity/TopicTree_entity/entityfields/assignedto/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c43ab54e74a7a3579924892c03220adaf600fa2f --- /dev/null +++ b/entity/TopicTree_entity/entityfields/assignedto/valueProcess.js @@ -0,0 +1,8 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); + +if(!vars.get("$this.value") && vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.AssignedToId_param") && vars.get("$param.AssignedToId_param")) +{ + result.string(vars.get("$param.AssignedToId_param")); +} \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/assignedtoid_param/documentation.adoc b/entity/TopicTree_entity/entityfields/assignedtoid_param/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..8650b619e2c466fc9cec35ec5f116332cb6bb753 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/assignedtoid_param/documentation.adoc @@ -0,0 +1,3 @@ += AssignedTo_param + +Get's used by Create Child Topic to preset ASSIGNEDTO. \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/onActionProcess.js b/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..5eae62bae3e11f29a89e179b0731d78146fb1cec --- /dev/null +++ b/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/onActionProcess.js @@ -0,0 +1,12 @@ +import("system.vars"); +import("system.neon"); +import("Attribute_lib"); + +var params = {}; +if (vars.exists("$local.rows")) +{ + var row = vars.get("$local.rows"); + var topicTreeId = row[0].UID; + params["AssignedToId_param"] = topicTreeId; +} +neon.openContext("TopicTree", null, null, neon.OPERATINGSTATE_NEW, params); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/stateProcess.js b/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0e259b3b846e565b0793a70b3fb37cd1a53515d4 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/stateProcess.js @@ -0,0 +1,22 @@ +import("system.result"); +import("system.eMath"); +import("system.neon"); +import("system.vars"); + +var operatingState = vars.get("$sys.operatingstate"); +var state = neon.COMPONENTSTATE_DISABLED; + +if(operatingState != neon.OPERATINGSTATE_NEW && operatingState != neon.OPERATINGSTATE_EDIT) +{ + var selection = vars.get("$sys.selectionRows")[0]; + if(selection && selection.sortingHelper != "") + { + var sortingObj = JSON.parse(selection.sortingHelper); + var layer = sortingObj.sortingLayer; + if(layer != "SORTING_LAYER_6") + { + state = neon.COMPONENTSTATE_EDITABLE; + } + } +} +result.string(state); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/createexpand/children/expand/onActionProcess.js b/entity/TopicTree_entity/entityfields/createexpand/children/expand/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..84238ef231b7eed25ccebd91f83296ef9e62abba --- /dev/null +++ b/entity/TopicTree_entity/entityfields/createexpand/children/expand/onActionProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.neon"); + +vars.set("$context.expanded", true); +neon.refreshAll(); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/date_edit/valueProcess.js b/entity/TopicTree_entity/entityfields/date_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2af46a8e46789056c6c341a8e4e087f8e1edc0c4 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/date_edit/valueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + result.string(vars.get("$sys.date")); +} \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/date_new/valueProcess.js b/entity/TopicTree_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9e4534537d88c19f96216d442c0b0ae984f65109 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/date_new/valueProcess.js @@ -0,0 +1,8 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(vars.get("$sys.date")); +} \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/expanded/valueProcess.js b/entity/TopicTree_entity/entityfields/expanded/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a --- /dev/null +++ b/entity/TopicTree_entity/entityfields/expanded/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string(true); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/icon/colorProcess.js b/entity/TopicTree_entity/entityfields/icon/colorProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f846dd62a1725053c2a277b67787026adb18bdf3 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/icon/colorProcess.js @@ -0,0 +1,10 @@ +import("system.vars"); +import("system.result"); +import("system.neon"); + +var color = neon.PRIORITY_LOW_COLOR; +if (vars.getString("$field.ACTIVE") != "1") +{ + color = neon.PRIORITY_HIGH_COLOR; +} +result.string(color); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/copy/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/copy/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..57a556f9aa25ce88f956118455d9abf8d44be7c6 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/copy/onActionProcess.js @@ -0,0 +1,8 @@ +import("TopicTree_lib"); +import("system.vars"); + +var topicDatSet = vars.get("$sys.selectionRows")[0]; + +vars.set("$context.Cut", null); +vars.set("$context.Copied", JSON.stringify({dataset: topicDatSet + , amountOfLayers: TopicTreeUtils.getAmountOfLayers(topicDatSet)})); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/copy/stateProcess.js b/entity/TopicTree_entity/entityfields/more/children/copy/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3f81b4f375b84c14050bdfc7577055d5b20216e8 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/copy/stateProcess.js @@ -0,0 +1,12 @@ +import("system.db"); +import("system.neon"); +import("system.result"); +import("system.vars"); + +var selection = vars.get("$sys.selectionRows")[0]; +var state = neon.COMPONENTSTATE_DISABLED; +if(selection) +{ + state = neon.COMPONENTSTATE_EDITABLE; +} +result.string(state); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/cut/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/cut/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ea2dc5ba77ff322b0a436169ef710d980e15e930 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/cut/onActionProcess.js @@ -0,0 +1,8 @@ +import("TopicTree_lib"); +import("system.vars"); + +var topicDatSet = vars.get("$sys.selectionRows")[0]; + +vars.set("$context.Copied", JSON.stringify({dataset: topicDatSet + , amountOfLayers: TopicTreeUtils.getAmountOfLayers(topicDatSet)})); +vars.set("$context.Cut", true); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/cut/stateProcess.js b/entity/TopicTree_entity/entityfields/more/children/cut/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..da1b7324b98030e890d11a91b7cfc7a470ae77de --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/cut/stateProcess.js @@ -0,0 +1,28 @@ +import("system.neon"); +import("system.result"); +import("Sql_lib"); +import("TopicTree_lib"); +import("system.vars"); + +var selection = vars.get("$sys.selectionRows"); +var state = neon.COMPONENTSTATE_DISABLED; +if(selection && selection.length > 0) +{ + var topicDatSet = selection[0]; + var topicIds = TopicTreeUtils.getSubTopicIds(topicDatSet); + + var count = 0; + if(topicIds.length > 0) + { + count = newSelect("count(*)") + .from("TOPICTREERELATION") + .whereIfSet("TOPICTREERELATION.TOPICTREE_ID", topicIds, SqlBuilder.IN()) + .cell(); + } + if(count >= 0) + { + state = neon.COMPONENTSTATE_EDITABLE; + } +} + +result.string(state); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/first/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/first/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..328ca8c9be6d35e44604c2cecfc8c137d4f331a0 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/first/onActionProcess.js @@ -0,0 +1,12 @@ +import("system.neon"); +import("TopicTree_lib"); +import("system.vars"); + +var selection = vars.get("$sys.selectionRows")[0]; +var topicTreeid = selection["#UID"]; +var sortingHelper = JSON.parse(selection.sortingHelper); +var currentLayer = TopicTreeUtils.getLayer(selection.SORTING_LAYER_1, selection.SORTING_LAYER_2, selection.SORTING_LAYER_3, selection.SORTING_LAYER_4, selection.SORTING_LAYER_5, selection.SORTING_LAYER_6); +var assignedTo = selection.ASSIGNEDTO == "" ? $TopicTreeConstants.TOPTOPIC() : selection.ASSIGNEDTO; + +TopicTreeUtils.movePosition(topicTreeid, $TopicTreeMoveDirections.TOP(), sortingHelper.maxSortingValue, assignedTo, sortingHelper.ownSortingValue, currentLayer); +neon.refreshAll(); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/first/stateProcess.js b/entity/TopicTree_entity/entityfields/more/children/first/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1a90e3c289a1d561f6959c35adef58380815ab50 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/first/stateProcess.js @@ -0,0 +1,21 @@ +import("system.result"); +import("system.eMath"); +import("system.neon"); +import("system.vars"); + +var operatingState = vars.get("$sys.operatingstate"); +var state = neon.COMPONENTSTATE_DISABLED; +if(operatingState != neon.OPERATINGSTATE_NEW && operatingState != neon.OPERATINGSTATE_EDIT) +{ + var selection = vars.get("$sys.selectionRows")[0]; + if(selection && selection.sortingHelper != "") + { + var sortingObj = JSON.parse(selection.sortingHelper); + var ownSortingValue = sortingObj.ownSortingValue; + if(ownSortingValue != 1) + { + state = neon.COMPONENTSTATE_EDITABLE; + } + } +} +result.string(state); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/last/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/last/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..bb26a0d1dc66b815e53da2d5b26d61755918f8c7 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/last/onActionProcess.js @@ -0,0 +1,12 @@ +import("system.neon"); +import("TopicTree_lib"); +import("system.vars"); + +var selection = vars.get("$sys.selectionRows")[0]; +var topicTreeid = selection["#UID"]; +var sortingHelper = JSON.parse(selection.sortingHelper); +var currentLayer = TopicTreeUtils.getLayer(selection.SORTING_LAYER_1, selection.SORTING_LAYER_2, selection.SORTING_LAYER_3, selection.SORTING_LAYER_4, selection.SORTING_LAYER_5, selection.SORTING_LAYER_6); +var assignedTo = selection.ASSIGNEDTO == "" ? $TopicTreeConstants.TOPTOPIC() : selection.ASSIGNEDTO; + +TopicTreeUtils.movePosition(topicTreeid, $TopicTreeMoveDirections.BOTTOM(), sortingHelper.maxSortingValue, assignedTo, sortingHelper.ownSortingValue, currentLayer); +neon.refreshAll(); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/last/stateProcess.js b/entity/TopicTree_entity/entityfields/more/children/last/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b0e5ad3ee6202c8d7ff8d87f57046373570a60c6 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/last/stateProcess.js @@ -0,0 +1,23 @@ +import("system.result"); +import("system.eMath"); +import("system.neon"); +import("system.vars"); + +var operatingState = vars.get("$sys.operatingstate"); +var state = neon.COMPONENTSTATE_DISABLED; + +if(operatingState != neon.OPERATINGSTATE_NEW && operatingState != neon.OPERATINGSTATE_EDIT) +{ + var selection = vars.get("$sys.selectionRows")[0]; + if(selection && selection.sortingHelper != "") + { + var sortingObj = JSON.parse(selection.sortingHelper); + var maxSorting = sortingObj.maxSortingValue; + var ownSortingValue = sortingObj.ownSortingValue; + if(eMath.addInt(ownSortingValue, 1) <= maxSorting) + { + state = neon.COMPONENTSTATE_EDITABLE; + } + } +} +result.string(state); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/movedown/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/movedown/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..cf3eac3f952dd7fd3aeeb3f9602680e61789caad --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/movedown/onActionProcess.js @@ -0,0 +1,12 @@ +import("system.neon"); +import("TopicTree_lib"); +import("system.vars"); + +var selection = vars.get("$sys.selectionRows")[0]; +var topicTreeid = selection["#UID"]; +var sortingHelper = JSON.parse(selection.sortingHelper); +var currentLayer = TopicTreeUtils.getLayer(selection.SORTING_LAYER_1, selection.SORTING_LAYER_2, selection.SORTING_LAYER_3, selection.SORTING_LAYER_4, selection.SORTING_LAYER_5, selection.SORTING_LAYER_6); +var assignedTo = selection.ASSIGNEDTO == "" ? $TopicTreeConstants.TOPTOPIC() : selection.ASSIGNEDTO; + +TopicTreeUtils.movePosition(topicTreeid, $TopicTreeMoveDirections.DOWN(), sortingHelper.maxSortingValue, assignedTo, sortingHelper.ownSortingValue, currentLayer); +neon.refreshAll(); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/movedown/stateProcess.js b/entity/TopicTree_entity/entityfields/more/children/movedown/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b0e5ad3ee6202c8d7ff8d87f57046373570a60c6 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/movedown/stateProcess.js @@ -0,0 +1,23 @@ +import("system.result"); +import("system.eMath"); +import("system.neon"); +import("system.vars"); + +var operatingState = vars.get("$sys.operatingstate"); +var state = neon.COMPONENTSTATE_DISABLED; + +if(operatingState != neon.OPERATINGSTATE_NEW && operatingState != neon.OPERATINGSTATE_EDIT) +{ + var selection = vars.get("$sys.selectionRows")[0]; + if(selection && selection.sortingHelper != "") + { + var sortingObj = JSON.parse(selection.sortingHelper); + var maxSorting = sortingObj.maxSortingValue; + var ownSortingValue = sortingObj.ownSortingValue; + if(eMath.addInt(ownSortingValue, 1) <= maxSorting) + { + state = neon.COMPONENTSTATE_EDITABLE; + } + } +} +result.string(state); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/moveup/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/moveup/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..681a3bf3fc485a4acc07910702c796b4243736e7 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/moveup/onActionProcess.js @@ -0,0 +1,12 @@ +import("system.neon"); +import("TopicTree_lib"); +import("system.vars"); + +var selection = vars.get("$sys.selectionRows")[0]; +var topicTreeid = selection["#UID"]; +var sortingHelper = JSON.parse(selection.sortingHelper); +var currentLayer = TopicTreeUtils.getLayer(selection.SORTING_LAYER_1, selection.SORTING_LAYER_2, selection.SORTING_LAYER_3, selection.SORTING_LAYER_4, selection.SORTING_LAYER_5, selection.SORTING_LAYER_6); +var assignedTo = selection.ASSIGNEDTO == "" ? $TopicTreeConstants.TOPTOPIC() : selection.ASSIGNEDTO; + +TopicTreeUtils.movePosition(topicTreeid, $TopicTreeMoveDirections.UP(), sortingHelper.maxSortingValue, assignedTo, sortingHelper.ownSortingValue, currentLayer); +neon.refreshAll(); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/moveup/stateProcess.js b/entity/TopicTree_entity/entityfields/more/children/moveup/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c9a5b7f7c30ab18ec91fcb66f666b578229cbeba --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/moveup/stateProcess.js @@ -0,0 +1,22 @@ +import("system.result"); +import("system.eMath"); +import("system.neon"); +import("system.vars"); + +var operatingState = vars.get("$sys.operatingstate"); +var state = neon.COMPONENTSTATE_DISABLED; + +if(operatingState != neon.OPERATINGSTATE_NEW && operatingState != neon.OPERATINGSTATE_EDIT) +{ + var selection = vars.get("$sys.selectionRows")[0]; + if(selection && selection.sortingHelper != "") + { + var sortingObj = JSON.parse(selection.sortingHelper); + var ownSortingValue = sortingObj.ownSortingValue; + if(ownSortingValue != 1) + { + state = neon.COMPONENTSTATE_EDITABLE; + } + } +} +result.string(state); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/paste/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/paste/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..6c046ec2a7806ebc5f10722fe5f8f740907660db --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/paste/onActionProcess.js @@ -0,0 +1,3 @@ +import("TopicTree_lib"); + +TopicTreeUtils.paste(); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/paste/stateProcess.js b/entity/TopicTree_entity/entityfields/more/children/paste/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d9a90bf3d4f2e10faa0444dd98e311c5340d95d2 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/paste/stateProcess.js @@ -0,0 +1,34 @@ +import("system.eMath"); +import("TopicTree_lib"); +import("system.db"); +import("system.neon"); +import("system.result"); +import("system.vars"); + +var selection = vars.get("$sys.selectionRows")[0]; +var state = neon.COMPONENTSTATE_DISABLED; +if(selection && vars.exists("$context.Copied")) +{ + var layer = TopicTreeUtils.returnNumberOfLayerName(JSON.parse(selection["sortingHelper"])["sortingLayer"]); + var amountOfLayers = JSON.parse(vars.get("$context.Copied"))["amountOfLayers"]; + + if(eMath.addInt(amountOfLayers, layer) <= TopicTreeUtils.getArrayLayers().length)//this tree doesn't work endlessly, so we can*t allow the user to create more layers than we allow + { + if(vars.get("$context.Cut")) + { + var copiedTopicTreeId = JSON.parse(vars.get("$context.Copied"))["dataset"]; + var topicTreeIds = TopicTreeUtils.getSubTopicIds(copiedTopicTreeId); + topicTreeIds.push(copiedTopicTreeId); + var pasteTopicTreeId = selection["#UID"]; + if(!topicTreeIds.includes(pasteTopicTreeId)) + { + state = neon.COMPONENTSTATE_EDITABLE; + } + } + else + { + state = neon.COMPONENTSTATE_EDITABLE; + } + } +} +result.string(state); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/more/children/pasteastoptopic/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/pasteastoptopic/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4f45e76e1c4c007528b531e52a69657e67f89741 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/more/children/pasteastoptopic/onActionProcess.js @@ -0,0 +1,3 @@ +import("TopicTree_lib"); + +TopicTreeUtils.paste(true); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/onlyactive_param/documentation.adoc b/entity/TopicTree_entity/entityfields/onlyactive_param/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..dd43f33ccf557da11f8cee4609f7cbff1ac8a186 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/onlyactive_param/documentation.adoc @@ -0,0 +1,5 @@ += OnlyActive_param + +If set to true you only get to see the active ones. + -> make sure that every subtopic has the same status as the above one and vice versa. +Get's used by Topic Tree Relation. \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/onlyfivelayers_param/documentation.adoc b/entity/TopicTree_entity/entityfields/onlyfivelayers_param/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..a7e01ad8577be404de8adcb538d71eaeac7c6236 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/onlyfivelayers_param/documentation.adoc @@ -0,0 +1,4 @@ += OnlyFiveLayers_param + +Used to limit how many layers of the tree you get to see. (if set to true you only see the first 5 layers) +In the assignedTo lookup we don't want to return the whole tree but instead only show 5 layers (to make it impossible to create a seventh layer using the assignee). diff --git a/entity/TopicTree_entity/entityfields/topics/children/expanded_param/valueProcess.js b/entity/TopicTree_entity/entityfields/topics/children/expanded_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a --- /dev/null +++ b/entity/TopicTree_entity/entityfields/topics/children/expanded_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string(true); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/topics/children/onlyfivelayers_param/valueProcess.js b/entity/TopicTree_entity/entityfields/topics/children/onlyfivelayers_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a --- /dev/null +++ b/entity/TopicTree_entity/entityfields/topics/children/onlyfivelayers_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string(true); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/topictreeid/valueProcess.js b/entity/TopicTree_entity/entityfields/topictreeid/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a03a8c03e7b03b61e50c133937eb615361528654 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/topictreeid/valueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(!vars.get("$this.value") && vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(vars.get("$field.UID")); +} \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/user_edit/valueProcess.js b/entity/TopicTree_entity/entityfields/user_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b874a7ac426b8e99383ac949299b9753e4951f2b --- /dev/null +++ b/entity/TopicTree_entity/entityfields/user_edit/valueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + result.string(vars.get("$sys.user")); +} \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/user_new/valueProcess.js b/entity/TopicTree_entity/entityfields/user_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ee15284e5df386270e83f1b57b189f3fecced930 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/user_new/valueProcess.js @@ -0,0 +1,8 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(vars.get("$sys.user")); +} \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/warningtext/stateProcess.js b/entity/TopicTree_entity/entityfields/warningtext/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7e15b5cc97399f0a5d92edb88b7e9dd49c322058 --- /dev/null +++ b/entity/TopicTree_entity/entityfields/warningtext/stateProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("system.vars"); +import("system.neon"); + +var state = neon.COMPONENTSTATE_INVISIBLE; +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + state = neon.COMPONENTSTATE_EDITABLE; +} + +result.string(state); \ No newline at end of file diff --git a/entity/TopicTree_entity/entityfields/warningtext/valueProcess.js b/entity/TopicTree_entity/entityfields/warningtext/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..74dde97a196efa6f8cf63ebac5f1115e432e0baa --- /dev/null +++ b/entity/TopicTree_entity/entityfields/warningtext/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string("Änderung wirken sich auf die bestehenden Themeneinträge der Aktivität aus, in der dieses Thema bereits verwendet wird."); \ No newline at end of file diff --git a/entity/TopicTree_entity/grantDeleteProcess.js b/entity/TopicTree_entity/grantDeleteProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e973103da62353b188dcd148ee3cf17dfd6c5dc4 --- /dev/null +++ b/entity/TopicTree_entity/grantDeleteProcess.js @@ -0,0 +1,27 @@ +import("system.result"); +import("Sql_lib"); +import("TopicTree_lib"); +import("system.vars"); + +var selection = vars.get("$sys.selectionRows"); +var canDelete = true; +if(selection && selection.length > 0) +{ + var topicDatSet = selection[0]; + var topicIds = TopicTreeUtils.getSubTopicIds(topicDatSet); + + var count = 0; + if(topicIds.length > 0) + { + count = newSelect("count(*)") + .from("TOPICTREERELATION") + .whereIfSet("TOPICTREERELATION.TOPICTREE_ID", topicIds, SqlBuilder.IN()) + .cell(); + } + if(count > 0) + { + canDelete = false; + } +} + +result.string(canDelete); \ No newline at end of file diff --git a/entity/TopicTree_entity/recordcontainers/jdito/contentProcess.js b/entity/TopicTree_entity/recordcontainers/jdito/contentProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..483cfca649f038887f18d827b464b7ac14af51e8 --- /dev/null +++ b/entity/TopicTree_entity/recordcontainers/jdito/contentProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("TopicTree_lib"); + +result.object(JSON.parse(TopicTreeUtils.returnTopicTree(false))); \ No newline at end of file diff --git a/entity/TopicTree_entity/recordcontainers/jdito/onDelete.js b/entity/TopicTree_entity/recordcontainers/jdito/onDelete.js new file mode 100644 index 0000000000000000000000000000000000000000..25d7cc786a4dea1e0f74a10a46b8ae5249c3cffd --- /dev/null +++ b/entity/TopicTree_entity/recordcontainers/jdito/onDelete.js @@ -0,0 +1,60 @@ +import("TopicTree_lib"); +import("system.db"); +import("system.neon"); +import("Sql_lib"); +import("system.vars"); + +function _updateSortingValuesOfOtherTopics(pLayer, pOwnSortingValue, pAssignedTo) +{ + var assignedToCond = newWhere("TOPICTREE.ASSIGNEDTO", pAssignedTo); + + if(pAssignedTo == $TopicTreeConstants.TOPTOPIC()) + { + assignedToCond = newWhere("TOPICTREE.ASSIGNEDTO is null"); + } + + var topicsThatNeedMoving = newSelect("TOPICTREE.TOPICTREEID, TOPICTREE." + pLayer + "") + .from("TOPICTREE") + .where(assignedToCond) + .and("TOPICTREE." + pLayer + "", pOwnSortingValue, SqlBuilder.GREATER()) + .table(); + + var updateStatements = []; + for (i = 0; i < topicsThatNeedMoving.length; i++) + { + updateStatements.push(["TOPICTREE", [pLayer], null, [topicsThatNeedMoving[i][1]], newWhere("TOPICTREE.TOPICTREEID", topicsThatNeedMoving[i][0]).build()]); + } + db.execute(updateStatements); +} + +var topicTreeId = vars.get("$local.uid"); +var topicTreeIdsToDelete = [topicTreeId]; +var topicTreeIds = [topicTreeId]; +var rowData = vars.get("$local.rowdata"); +var stop = false; + +while(stop == false) +{ + topicTreeIds = newSelect("TOPICTREEID") + .from("TOPICTREE") + .where("TOPICTREE.ASSIGNEDTO", topicTreeIds, SqlBuilder.IN()) + .arrayColumn(); + + if(topicTreeIds && topicTreeIds.length > 0) + { + for (let i = 0; i < topicTreeIds.length; i++) + { + topicTreeIdsToDelete.push(topicTreeIds[i]); + } + } + else + { + stop = true; + } +} +var sortingHelper = JSON.parse(rowData["sortingHelper.value"]); +_updateSortingValuesOfOtherTopics(sortingHelper["sortingLayer"], sortingHelper["ownSortingValue"], rowData["ASSIGNEDTO.value"]); + +newWhereIfSet("TOPICTREE.TOPICTREEID", topicTreeIdsToDelete, SqlBuilder.IN()) + .deleteData(true, "TOPICTREE"); + \ No newline at end of file diff --git a/entity/TopicTree_entity/recordcontainers/jdito/onInsert.js b/entity/TopicTree_entity/recordcontainers/jdito/onInsert.js new file mode 100644 index 0000000000000000000000000000000000000000..d55de4fc96fb5f1e8c87f93ea50c3ca09651c24d --- /dev/null +++ b/entity/TopicTree_entity/recordcontainers/jdito/onInsert.js @@ -0,0 +1,122 @@ +import("system.logging"); +import("system.eMath"); +import("TopicTree_lib"); +import("system.vars"); +import("Sql_lib"); + +var rowdata = vars.get("$local.rowdata"); +var columns = ["TOPICTREEID" + , "TOPIC" + , "ACTIVE" + , "USER_NEW" + , "DATE_NEW"]; + +var values = [rowdata["UID.value"] + , rowdata["TOPIC.value"] + , rowdata["ACTIVE.value"] + , rowdata["USER_NEW.value"] + , rowdata["DATE_NEW.value"]]; + +if(rowdata["DESCRIPTION.value"]) +{ + columns.push("DESCRIPTION"); + values.push(rowdata["DESCRIPTION.value"]); +} + +var assignedTo = rowdata["ASSIGNEDTO.value"]; + +if(assignedTo && assignedTo != "") +{ + columns.push("ASSIGNEDTO"); + values.push(assignedTo); + + var sortingSelect = newSelect("case when SORTING_LAYER_6 is not null then 'SORTING_LAYER_6' \n\ + else case when SORTING_LAYER_5 is not null then 'SORTING_LAYER_5' \n\ + else case when SORTING_LAYER_4 is not null then 'SORTING_LAYER_4' \n\ + else case when SORTING_LAYER_3 is not null then 'SORTING_LAYER_3' \n\ + else case when SORTING_LAYER_2 is not null then 'SORTING_LAYER_2' \n\ + else 'SORTING_LAYER_1' \n\ + end end end end end as layerNumber\n\ + , SORTING_LAYER_1, SORTING_LAYER_2, SORTING_LAYER_3, SORTING_LAYER_4, SORTING_LAYER_5, SORTING_LAYER_6, TOPICTREE.TOPICTREEID") + .from("TOPICTREE") + .where("TOPICTREE.ASSIGNEDTO", assignedTo) + .or("TOPICTREE.TOPICTREEID", assignedTo) + .orderBy("layerNumber desc, SORTING_LAYER_1 desc, SORTING_LAYER_2 desc , SORTING_LAYER_3 desc, SORTING_LAYER_4 desc, SORTING_LAYER_5 desc, SORTING_LAYER_6 desc") + .arrayRow(); + + var layerSorting; + var deepestLayer; + if(sortingSelect[7] == assignedTo) + { + deepestLayer = TopicTreeUtils.getDeeperLayerFromLayerName(sortingSelect[0]); + columns.push(deepestLayer); + values.push(1);//first item of this layer: sorting value should be '1' + } + else + { + deepestLayer = sortingSelect[0]; + columns.push(deepestLayer); + values.push(eMath.addInt(sortingSelect[TopicTreeUtils.returnNumberOfLayerName(deepestLayer)], 1));//not the first item of this layer: sorting value should be the greatest one + 1 + } + + var previousLayer = deepestLayer; + var stop = false; + while(stop == false)//fill in previous layersorting values, otherwise the move Actions won't work properly + { + previousLayer = TopicTreeUtils.getPreviousLayerName(previousLayer); + if(previousLayer != "SORTING_LAYER_0") + { + columns.push(previousLayer); + values.push(-1); + } + else + { + stop = true; + } + } +} +else +{ + columns.push("SORTING_LAYER_1"); + var sortingLayer1 = newSelect("max(SORTING_LAYER_1)+1") + .from("TOPICTREE") + .where("TOPICTREE.SORTING_LAYER_1 is not null") + .and("TOPICTREE.SORTING_LAYER_2 is null") + .and("TOPICTREE.SORTING_LAYER_3 is null") + .and("TOPICTREE.SORTING_LAYER_4 is null") + .and("TOPICTREE.SORTING_LAYER_5 is null") + .and("TOPICTREE.SORTING_LAYER_6 is null") + .cell(); + + values.push(sortingLayer1); +} + +if(assignedTo && assignedTo != "") +{ + stop = false; + var parentIdsToUpdate = []; + //update status of parentTopics if needed + while(stop == false) + { + var parentTopic = newSelect("TOPICTREE.ACTIVE, TOPICTREE.ASSIGNEDTO") + .from("TOPICTREE") + .where("TOPICTREE.TOPICTREEID", assignedTo) + .arrayRow(); + parentIdsToUpdate.push(assignedTo); + if(parentTopic[0] != rowdata["ACTIVE.value"] && parentTopic[1] && parentTopic[1] != "") + { + assignedTo = parentTopic[1]; + } + else + { + stop = true; + } + } + if(parentIdsToUpdate && parentIdsToUpdate.length > 0) + { + newWhereIfSet("TOPICTREE.TOPICTREEID", parentIdsToUpdate, SqlBuilder.IN()) + .updateData(true, "TOPICTREE", ["ACTIVE"], null, [rowdata["ACTIVE.value"]]); + } +} + +new SqlBuilder().insertData("TOPICTREE", columns, null, values); \ No newline at end of file diff --git a/entity/TopicTree_entity/recordcontainers/jdito/onUpdate.js b/entity/TopicTree_entity/recordcontainers/jdito/onUpdate.js new file mode 100644 index 0000000000000000000000000000000000000000..a024420d4f06f08e6447d8b629b34965ab1f2b0d --- /dev/null +++ b/entity/TopicTree_entity/recordcontainers/jdito/onUpdate.js @@ -0,0 +1,82 @@ +import("Util_lib"); +import("Sql_lib"); +import("system.vars"); + +var rowData = vars.get("$local.rowdata"); +var topicTreeId = vars.get("$local.uid"); +var columns = ["DATE_EDIT" + , "USER_EDIT" + , "ACTIVE" + , "TOPIC"]; + +var values = [rowData["DATE_EDIT.value"] + , rowData["USER_EDIT.value"] + , rowData["ACTIVE.value"] + , rowData["TOPIC.value"]]; + +var assignedTo = rowData["ASSIGNEDTO.value"]; +if(assignedTo && assignedTo != "") +{ + columns.push("ASSIGNEDTO"); + values.push(assignedTo); +} + +newWhereIfSet("TOPICTREE.TOPICTREEID", topicTreeId).updateData(true, "TOPICTREE", columns, null, values); +let stop = false; + +var topicTreeIdsToUpdate = []; +var topicTreeIds = [topicTreeId]; +//update child topics accordingly +while(stop == false) +{ + topicTreeIds = newSelect("TOPICTREEID") + .from("TOPICTREE") + .where("TOPICTREE.ASSIGNEDTO", topicTreeIds, SqlBuilder.IN()) + .arrayColumn(); + + if(topicTreeIds && topicTreeIds.length > 0) + { + for (let i = 0; i < topicTreeIds.length; i++) + { + topicTreeIdsToUpdate.push(topicTreeIds[i]); + } + + } + else + { + stop = true; + } +} +if(topicTreeIdsToUpdate && topicTreeIdsToUpdate.length > 0) +{ + newWhereIfSet("TOPICTREE.TOPICTREEID", topicTreeIdsToUpdate, SqlBuilder.IN()) + .updateData(true, "TOPICTREE", ["ACTIVE"], null, [rowData["ACTIVE.value"]]); +} + +if(assignedTo && assignedTo != "" && Utils.toBoolean(rowData["ACTIVE.value"])) +{ + let stop = false; + var parentIdsToUpdate = []; + //update status of parentTopics if needed + while(stop == false) + { + var parentTopic = newSelect("TOPICTREE.ACTIVE, TOPICTREE.ASSIGNEDTO") + .from("TOPICTREE") + .where("TOPICTREE.TOPICTREEID", assignedTo) + .arrayRow(); + parentIdsToUpdate.push(assignedTo); + if(parentTopic[0] != rowData["ACTIVE.value"] && parentTopic[1] && parentTopic[1] != "") + { + assignedTo = parentTopic[1]; + } + else + { + stop = true; + } + } + if(parentIdsToUpdate && parentIdsToUpdate.length > 0) + { + newWhereIfSet("TOPICTREE.TOPICTREEID", parentIdsToUpdate, SqlBuilder.IN()) + .updateData(true, "TOPICTREE", ["ACTIVE"], null, [rowData["ACTIVE.value"]]); + } +} \ No newline at end of file diff --git a/entity/TopicTree_entity/recordcontainers/jdito/rowCountProcess.js b/entity/TopicTree_entity/recordcontainers/jdito/rowCountProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a1b4af86fbdadb02232f3912219999d78f53d457 --- /dev/null +++ b/entity/TopicTree_entity/recordcontainers/jdito/rowCountProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("TopicTree_lib"); + +result.object(TopicTreeUtils.returnTopicTree(true)); \ No newline at end of file diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 3dd4f20d00985579c0008fef8a46a6c39394c5b8..961cafefc6b45b839a923d43efd857fc9b698b1a 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -9697,6 +9697,69 @@ <entry> <key>Open Visitrecommendation</key> </entry> + <entry> + <key>Copy</key> + </entry> + <entry> + <key>Activity: Topic (incl. Subtopics)</key> + </entry> + <entry> + <key>Calling the abbyy webservice failed</key> + </entry> + <entry> + <key>Last</key> + </entry> + <entry> + <key>First</key> + </entry> + <entry> + <key>Cut</key> + </entry> + <entry> + <key>Paste</key> + </entry> + <entry> + <key>Superordinate Topic</key> + </entry> + <entry> + <key>within one Month</key> + </entry> + <entry> + <key>Move Up</key> + </entry> + <entry> + <key>Valuation</key> + </entry> + <entry> + <key>Topic Tree</key> + </entry> + <entry> + <key>Topic (incl. Subtopics)</key> + </entry> + <entry> + <key>Topics</key> + </entry> + <entry> + <key>Move Down</key> + </entry> + <entry> + <key>Expand</key> + </entry> + <entry> + <key>Create Child Topic</key> + </entry> + <entry> + <key>The following Topics have been set more than once:</key> + </entry> + <entry> + <key>Topic</key> + </entry> + <entry> + <key>Activity: Topic</key> + </entry> + <entry> + <key>Paste as Top Topic</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> <sqlModels> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index b04132493d614719765370d8fb7f5c70983add22..aae267e85c1a5bfb199e9bc1739db96752baba79 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -263,6 +263,10 @@ <key>Planning</key> <value>Planung</value> </entry> + <entry> + <key>Expand</key> + <value>Aufklappen</value> + </entry> <entry> <key>Add planning to organisations</key> <value>Planung der Firma hinzufügen</value> @@ -686,6 +690,70 @@ <key>License</key> <value>Lizenz</value> </entry> + <entry> + <key>First</key> + <value>Erster</value> + </entry> + <entry> + <key>Last</key> + <value>Letzter</value> + </entry> + <entry> + <key>Move Up</key> + <value>Nach oben Bewegen</value> + </entry> + <entry> + <key>Move Down</key> + <value>Nach unten Bewegen</value> + </entry> + <entry> + <key>Copy</key> + <value>Kopieren</value> + </entry> + <entry> + <key>Paste</key> + <value>Einfügen</value> + </entry> + <entry> + <key>Cut</key> + <value>Ausschneiden</value> + </entry> + <entry> + <key>Topic</key> + <value>Thema</value> + </entry> + <entry> + <key>Topic (incl. Subtopics)</key> + <value>Thema (inkl. Unterthemen)</value> + </entry> + <entry> + <key>Activity: Topic (incl. Subtopics)</key> + <value>Aktivität: Thema (inkl. Unterthemen)</value> + </entry> + <entry> + <key>Activity: Topic</key> + <value>Aktivität: Thema</value> + </entry> + <entry> + <key>Topics</key> + <value>Themen</value> + </entry> + <entry> + <key>Paste as Top Topic</key> + <value>Als Oberthema einfügen</value> + </entry> + <entry> + <key>Create Child Topic</key> + <value>Unterthema erstellen</value> + </entry> + <entry> + <key>Superordinate Topic</key> + <value>Ãœbergeordnetes Thema</value> + </entry> + <entry> + <key>Topic Tree</key> + <value>Themenbaum</value> + </entry> <entry> <key>Failed</key> <value>Fehlgeschlagen</value> @@ -2553,6 +2621,10 @@ <key>Field staff</key> <value>Aussendienst</value> </entry> + <entry> + <key>The following Topics have been set more than once:</key> + <value>Die folgenden Themen wurden mehrmals vergeben:</value> + </entry> <entry> <key>0.00</key> </entry> @@ -12338,9 +12410,6 @@ Bitte Datumseingabe prüfen</value> <entry> <key>within the next Month</key> </entry> - <entry> - <key>DSGVO-Anonymisierung</key> - </entry> <entry> <key>During processing the e-mail an error has occurred.\n Please contact an administrator</key> </entry> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 22c9e61ed915116f0d4882cb5f1637b02db302e9..4c0d9611e57a7fa5719ca0583a50d655a7d02a5a 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -9792,6 +9792,63 @@ <entry> <key>Open Visitrecommendation</key> </entry> + <entry> + <key>Copy</key> + </entry> + <entry> + <key>Activity: Topic (incl. Subtopics)</key> + </entry> + <entry> + <key>Calling the abbyy webservice failed</key> + </entry> + <entry> + <key>Last</key> + </entry> + <entry> + <key>First</key> + </entry> + <entry> + <key>Cut</key> + </entry> + <entry> + <key>Paste</key> + </entry> + <entry> + <key>Superordinate Topic</key> + </entry> + <entry> + <key>Move Up</key> + </entry> + <entry> + <key>Topic Tree</key> + </entry> + <entry> + <key>Topic (incl. Subtopics)</key> + </entry> + <entry> + <key>Topics</key> + </entry> + <entry> + <key>Move Down</key> + </entry> + <entry> + <key>Expand</key> + </entry> + <entry> + <key>Create Child Topic</key> + </entry> + <entry> + <key>The following Topics have been set more than once:</key> + </entry> + <entry> + <key>Topic</key> + </entry> + <entry> + <key>Activity: Topic</key> + </entry> + <entry> + <key>Paste as Top Topic</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonContext/TopicTree/TopicTree.aod b/neonContext/TopicTree/TopicTree.aod new file mode 100644 index 0000000000000000000000000000000000000000..b76eb8916fc504ee19bcaac5cead1ebed98665df --- /dev/null +++ b/neonContext/TopicTree/TopicTree.aod @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext 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/neonContext/1.1.1"> + <name>TopicTree</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>TopicTreeFilter_view</filterView> + <editView>TopicTreeEdit_view</editView> + <previewView>TopicTreePreview_view</previewView> + <lookupView>TopicTreeLookup_view</lookupView> + <entity>TopicTree_entity</entity> + <references> + <neonViewReference> + <name>a361f8a5-5d42-4058-9452-0f591f7e722f</name> + </neonViewReference> + <neonViewReference> + <name>93167d21-d793-4977-92b2-f7996de35cf4</name> + <view>TopicTreePreview_view</view> + </neonViewReference> + <neonViewReference> + <name>4b82a15f-6522-4523-8ddc-e4e7e9d6efcf</name> + <view>TopicTreeEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>c648fbf3-5cfb-4ec1-87a3-5b35c74df0b1</name> + </neonViewReference> + <neonViewReference> + <name>e74e51db-da4a-4e1a-96fc-7800a9a22536</name> + </neonViewReference> + <neonViewReference> + <name>fdf244ab-804f-49ad-bb9e-2a0def6d1fc6</name> + <view>TopicTreeFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>d48fbdce-1d08-4636-bd46-c8eda947d777</name> + <view>TopicTreeLookup_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/TopicTreeRelation/TopicTreeRelation.aod b/neonContext/TopicTreeRelation/TopicTreeRelation.aod new file mode 100644 index 0000000000000000000000000000000000000000..b29d0bdd0b00f70cdd04406537b66bd6792b7513 --- /dev/null +++ b/neonContext/TopicTreeRelation/TopicTreeRelation.aod @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext 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/neonContext/1.1.1"> + <name>TopicTreeRelation</name> + <title>Topic</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <entity>TopicTreeRelation_entity</entity> + <references> + <neonViewReference> + <name>c9db7f4c-81c5-4b89-af20-0bd5dfa0ec31</name> + <view>TopicTreeRelationMultiEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>0a1e76a7-68dc-4f7e-a5e3-053540b61f2a</name> + </neonViewReference> + <neonViewReference> + <name>9180455d-d7b5-4c01-9496-bdf9d4b2c310</name> + <view>TopicTreeTitledList_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonView/ActivityDetail_view/ActivityDetail_view.aod b/neonView/ActivityDetail_view/ActivityDetail_view.aod index 95192a1406ad14b83b8a99cdb152fde8f47eeec8..e2d378f230df07c4450400fa784297940aa5837f 100644 --- a/neonView/ActivityDetail_view/ActivityDetail_view.aod +++ b/neonView/ActivityDetail_view/ActivityDetail_view.aod @@ -4,19 +4,19 @@ <title>Description</title> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> - <boxLayout> + <noneLayout> <name>layout</name> - <direction>HORIZONTAL</direction> - <maxDirectionElements v="2" /> - </boxLayout> + </noneLayout> </layout> <children> <genericViewTemplate> <name>Generic</name> <showDrawer v="true" /> + <drawerCaption>Description</drawerCaption> <fixedDrawer v="true" /> <hideLabels v="true" /> <entityField>#ENTITY</entityField> + <title>Description</title> <fields> <entityFieldLink> <name>041a6ded-06b3-4d84-be29-d89d01df6dec</name> @@ -24,5 +24,10 @@ </entityFieldLink> </fields> </genericViewTemplate> + <neonViewReference> + <name>62634d84-b0a1-472c-aee2-04b392371ecf</name> + <entityField>Topics</entityField> + <view>TopicTreeTitledList_view</view> + </neonViewReference> </children> </neonView> diff --git a/neonView/ActivityEdit_view/ActivityEdit_view.aod b/neonView/ActivityEdit_view/ActivityEdit_view.aod index 2fff9dfbe23cab9ca0ca9361d39ebc0810988dd3..f07e18c7d31ea5e26294f1234641632967e834e8 100644 --- a/neonView/ActivityEdit_view/ActivityEdit_view.aod +++ b/neonView/ActivityEdit_view/ActivityEdit_view.aod @@ -56,6 +56,11 @@ <entityField>Attributes</entityField> <view>AttributeRelationMultiEdit_view</view> </neonViewReference> + <neonViewReference> + <name>f87aeb54-30e3-47d4-aaf2-d418ae92c248</name> + <entityField>Topics</entityField> + <view>TopicTreeRelationMultiEdit_view</view> + </neonViewReference> <neonViewReference> <name>1dfe4fcc-eb36-4a6c-878d-f907d36de9ac</name> <entityField>Documents</entityField> diff --git a/neonView/SalesprojectConversionRate_view/SalesprojectConversionRate_view.aod b/neonView/SalesprojectConversionRate_view/SalesprojectConversionRate_view.aod index e886fb460da1f6a1439fbad4055a213f87f2b0ed..9b9754063c92aea73ff8385c24c0c71b99d6ce29 100644 --- a/neonView/SalesprojectConversionRate_view/SalesprojectConversionRate_view.aod +++ b/neonView/SalesprojectConversionRate_view/SalesprojectConversionRate_view.aod @@ -53,7 +53,6 @@ <name>TreeTable</name> <entityField>#ENTITY</entityField> <defaultGroupFields> - <element>#EXTENSION.Month.Month#NUMBER</element> <element>AB_KEYWORD_ENTRYID_KEYID</element> </defaultGroupFields> <columns> @@ -66,6 +65,10 @@ <entityField>conversionRate</entityField> <aggregateEntityField>conversionRate_aggregate</aggregateEntityField> </neonTreeTableColumn> + <neonTreeTableColumn> + <name>de29fbde-b6b4-422b-a051-b506eaad9cdb</name> + <entityField>UID</entityField> + </neonTreeTableColumn> </columns> </treeTableViewTemplate> </children> diff --git a/neonView/TopicTreeEdit_view/TopicTreeEdit_view.aod b/neonView/TopicTreeEdit_view/TopicTreeEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..442f120ae326feaebdb2bd6e4371cb9877e0a195 --- /dev/null +++ b/neonView/TopicTreeEdit_view/TopicTreeEdit_view.aod @@ -0,0 +1,70 @@ +<?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.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>TopicTreeEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <fields> + <entityFieldLink> + <name>d4a9e23e-6ff6-46ce-8ce9-aa98229dde90</name> + <entityField>UID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>52af19b6-ad44-4072-a078-2f2757b0d493</name> + <entityField>TOPICTREEID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>54a8e7b2-31d2-4c12-8dc2-f80012ef6667</name> + <entityField>ASSIGNEDTO</entityField> + </entityFieldLink> + <entityFieldLink> + <name>a37090dd-3daf-43f5-8527-3c63fa88cb33</name> + <entityField>TOPIC</entityField> + </entityFieldLink> + <entityFieldLink> + <name>e3294d31-8471-4c4f-b5b2-bdf9abced785</name> + <entityField>DESCRIPTION</entityField> + </entityFieldLink> + <entityFieldLink> + <name>ae0ca494-b1bd-4564-95d7-4eaecf9f2200</name> + <entityField>ACTIVE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>48c992a3-9f59-4fbc-8256-fe760b1b3bc6</name> + <entityField>DATE_NEW</entityField> + </entityFieldLink> + <entityFieldLink> + <name>06e46f3d-cdee-4bc3-9df6-8eb534a2026b</name> + <entityField>USER_EDIT</entityField> + </entityFieldLink> + <entityFieldLink> + <name>47cecb17-0121-45cb-967a-7128c573625e</name> + <entityField>USER_NEW</entityField> + </entityFieldLink> + <entityFieldLink> + <name>8edf2a0f-4ef7-423e-8495-8706362866da</name> + <entityField>DATE_EDIT</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + <genericViewTemplate> + <name>genericForWarning</name> + <hideLabels v="true" /> + <isEditable v="false" /> + <fields> + <entityFieldLink> + <name>24d816b2-8aa5-4572-a2e5-f880226aea68</name> + <entityField>warningText</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/TopicTreeFilterTree_view/TopicTreeFilterTree_view.aod b/neonView/TopicTreeFilterTree_view/TopicTreeFilterTree_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..6503516309ce33b0b99bb43a9052483661647ee5 --- /dev/null +++ b/neonView/TopicTreeFilterTree_view/TopicTreeFilterTree_view.aod @@ -0,0 +1,23 @@ +<?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.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>TopicTreeFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <treeViewTemplate> + <name>tree</name> + <parentField>ASSIGNEDTO</parentField> + <titleField>TOPIC</titleField> + <descriptionField>DESCRIPTION</descriptionField> + <iconField>icon</iconField> + <favoriteActionGroup1>CreateExpand</favoriteActionGroup1> + <favoriteActionGroup2>More</favoriteActionGroup2> + <informationField>sortingHelper</informationField> + </treeViewTemplate> + </children> +</neonView> diff --git a/neonView/TopicTreeFilter_view/TopicTreeFilter_view.aod b/neonView/TopicTreeFilter_view/TopicTreeFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..78fad58dfee031e88299cdc913412d6dc2488c84 --- /dev/null +++ b/neonView/TopicTreeFilter_view/TopicTreeFilter_view.aod @@ -0,0 +1,26 @@ +<?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.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>TopicTreeFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <treeViewTemplate> + <name>tree</name> + <parentField>ASSIGNEDTO</parentField> + <nodeExpandedField>expanded</nodeExpandedField> + <titleField>TOPIC</titleField> + <descriptionField>DESCRIPTION</descriptionField> + <iconField>icon</iconField> + <hideContentSearch v="false" /> + <expandRootItems v="false" /> + <favoriteActionGroup1>CreateExpand</favoriteActionGroup1> + <favoriteActionGroup2>More</favoriteActionGroup2> + <maxDBRow v="400" /> + <informationField>sortingHelper</informationField> + </treeViewTemplate> + </children> +</neonView> diff --git a/neonView/TopicTreeLookup_view/TopicTreeLookup_view.aod b/neonView/TopicTreeLookup_view/TopicTreeLookup_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..e77713119cc6dbef30310457f37547a6ff995db0 --- /dev/null +++ b/neonView/TopicTreeLookup_view/TopicTreeLookup_view.aod @@ -0,0 +1,19 @@ +<?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.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>TopicTreeLookup_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <treeViewTemplate> + <name>tree</name> + <parentField>ASSIGNEDTO</parentField> + <nodeExpandedField>expanded</nodeExpandedField> + <titleField>TOPIC</titleField> + <descriptionField>DESCRIPTION</descriptionField> + </treeViewTemplate> + </children> +</neonView> diff --git a/neonView/TopicTreePreview_view/TopicTreePreview_view.aod b/neonView/TopicTreePreview_view/TopicTreePreview_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..c29eefebdcd78848d4db28ed327a7a1d2968cd7a --- /dev/null +++ b/neonView/TopicTreePreview_view/TopicTreePreview_view.aod @@ -0,0 +1,19 @@ +<?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.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>TopicTreePreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <headerFooterLayout> + <name>layout</name> + </headerFooterLayout> + </layout> + <children> + <cardViewTemplate> + <name>Card</name> + <iconField>icon</iconField> + <titleField>TOPIC</titleField> + <descriptionField>ACTIVE</descriptionField> + <informationField>DESCRIPTION</informationField> + </cardViewTemplate> + </children> +</neonView> diff --git a/neonView/TopicTreeRelationMultiEdit_view/TopicTreeRelationMultiEdit_view.aod b/neonView/TopicTreeRelationMultiEdit_view/TopicTreeRelationMultiEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..a51afeb7500e93abbd4c2095a8d2040fd2d0fbbb --- /dev/null +++ b/neonView/TopicTreeRelationMultiEdit_view/TopicTreeRelationMultiEdit_view.aod @@ -0,0 +1,59 @@ +<?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.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>TopicTreeRelationMultiEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <genericMultipleViewTemplate> + <name>genericMultiple</name> + <columns> + <neonGenericMultipleTableColumn> + <name>e26a5ea7-d5da-41b1-ad6d-c76f3e234aee</name> + <entityField>TOPICTREE_ID</entityField> + <fullWidth v="true" /> + </neonGenericMultipleTableColumn> + <neonGenericMultipleTableColumn> + <name>b49fcc0f-d6a1-4bf3-9666-0d47ffd2ca0e</name> + <entityField>DESCRIPTION</entityField> + <fullWidth v="true" /> + </neonGenericMultipleTableColumn> + <neonGenericMultipleTableColumn> + <name>ca267cc4-27f7-45c1-984e-ea09f7e6b810</name> + <entityField>TOPICTREERELATIONID</entityField> + </neonGenericMultipleTableColumn> + <neonGenericMultipleTableColumn> + <name>37499051-ddcf-43e1-bbee-b520111088de</name> + <entityField>OBJECT_ROWID</entityField> + </neonGenericMultipleTableColumn> + <neonGenericMultipleTableColumn> + <name>0667ce95-9606-4f1e-92d0-19f7f3c77a1c</name> + <entityField>OBJECT_TYPE</entityField> + </neonGenericMultipleTableColumn> + <neonGenericMultipleTableColumn> + <name>4e072fd1-9ba7-40f9-ac96-d191f16de449</name> + <entityField>DATE_NEW</entityField> + </neonGenericMultipleTableColumn> + <neonGenericMultipleTableColumn> + <name>23ad696f-9f88-43e2-9a40-9d3341f8af71</name> + <entityField>DATE_EDIT</entityField> + </neonGenericMultipleTableColumn> + <neonGenericMultipleTableColumn> + <name>6986f44a-e4a8-4c12-917a-edc7502b5ce6</name> + <entityField>USER_EDIT</entityField> + </neonGenericMultipleTableColumn> + <neonGenericMultipleTableColumn> + <name>59d29b78-03f5-4c48-9fd6-036ec735fd82</name> + <entityField>USER_NEW</entityField> + </neonGenericMultipleTableColumn> + <neonGenericMultipleTableColumn> + <name>eca89c61-1609-46a9-af11-575199697236</name> + <entityField>TOPICTREE_IDdisplayValue</entityField> + </neonGenericMultipleTableColumn> + </columns> + </genericMultipleViewTemplate> + </children> +</neonView> diff --git a/neonView/TopicTreeTitledList_view/TopicTreeTitledList_view.aod b/neonView/TopicTreeTitledList_view/TopicTreeTitledList_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..32898bde9225c0529eb45326f244bfd2b79c0e0e --- /dev/null +++ b/neonView/TopicTreeTitledList_view/TopicTreeTitledList_view.aod @@ -0,0 +1,29 @@ +<?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.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>TopicTreeTitledList_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <titledListViewTemplate> + <name>titledList</name> + <titleField>TOPICTREE_IDdisplayValue</titleField> + <titleFieldFullWidth v="true" /> + <highlightingField>DESCRIPTION</highlightingField> + <autoNewRow v="true" /> + <columns> + <neonTitledListTableColumn> + <name>f13055f2-b612-4016-8089-f05f03af0e09</name> + <entityField>TOPICTREE_ID</entityField> + </neonTitledListTableColumn> + <neonTitledListTableColumn> + <name>46d0af7b-7215-4c4d-b157-b1625e7f6dcb</name> + <entityField>DESCRIPTION</entityField> + </neonTitledListTableColumn> + </columns> + </titledListViewTemplate> + </children> +</neonView> diff --git a/process/Entity_lib/process.js b/process/Entity_lib/process.js index b85c87aaab9ed86357bb101c3ba2f1056e4920ae..bc3aa7382aeded9e3530cb443f4c9c0921a41dd2 100644 --- a/process/Entity_lib/process.js +++ b/process/Entity_lib/process.js @@ -1,3 +1,4 @@ +import("system.eMath"); import("system.process"); import("system.translate"); import("system.entities"); @@ -479,6 +480,59 @@ EntityConsumerRowsHelper.getCurrentConsumerRows = function (pConsumer, pFields) .getRows(); } +/** + * Static function for validating consumerRows you can use this in the onValidation of an Consumer to validate it's records using pMaxCount (1 if empty).<br> + * This first get's all current rows of a consumer with all changes applied (insertedRows, changedRows, deletedRows).<br> + * + * @param {String} pConsumer the name of the consumer + * @param {String} pField the field of whichs value you want to validate + * @param {String} pDisplayField field that holds the displayValue to be returnded + * @param {String} pMaxCount max count to be valiated ("1" if empty) + * + * @return {Object} Object with all pFields whose count exceeds pMaxCount as key and their pDisplayField as Value. Empty Object if none exist + * + * @example + * var unvalid = EntityConsumerRowsHelper.validateUniqueRows("Topics", "TOPICTREE_ID", "TOPICTREE_IDdisplayValue", 1); + */ +EntityConsumerRowsHelper.validateUniqueRows = function (pConsumer, pField, pDisplayField, pMaxCount) +{ + var rows = EntityConsumerRowsHelper.getCurrentConsumerRows(pConsumer, [pField, pDisplayField]); + var recordCounts = {}; + var maxCount = pMaxCount && pMaxCount != 0 ? pMaxCount : 1; + + for (var i = 0; i < rows.length; i++) + { + if(!recordCounts.hasOwnProperty(rows[i][pField])) + { + recordCounts[rows[i][pField]] = {}; + recordCounts[rows[i][pField]]["count"] = 1; + recordCounts[rows[i][pField]]["display"] = rows[i][pDisplayField]; + } + else + { + recordCounts[rows[i][pField]]["count"] = eMath.addInt(recordCounts[rows[i][pField]]["count"], 1); + } + } + + var res = {}; + + for(var row in recordCounts) + { + if(row && row != "") + { + if(recordCounts[row]["count"] > maxCount) + { + if(!res.hasOwnProperty(row)) + { + res[row] = recordCounts[row]["display"]; + } + } + } + } + + return res; +} + /** * Sets the consumer that is used for loading the rows. * @@ -610,4 +664,4 @@ EntityConsumerRowsHelper.prototype.removeRows = function (pRowsToRemove) EntityConsumerRowsHelper.prototype.getRows = function () { return this._rows; -} +} \ No newline at end of file diff --git a/process/TopicTree_lib/TopicTree_lib.aod b/process/TopicTree_lib/TopicTree_lib.aod new file mode 100644 index 0000000000000000000000000000000000000000..7e1d5b99bcd7c9432bc84cb3dd886d780ed4df20 --- /dev/null +++ b/process/TopicTree_lib/TopicTree_lib.aod @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>TopicTree_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/TopicTree_lib/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/TopicTree_lib/process.js b/process/TopicTree_lib/process.js new file mode 100644 index 0000000000000000000000000000000000000000..a02f5566a17dbaa62dbb76838baab6af9d5bb5a8 --- /dev/null +++ b/process/TopicTree_lib/process.js @@ -0,0 +1,982 @@ +import("system.util"); +import("Entity_lib"); +import("Util_lib"); +import("system.translate"); +import("system.neon"); +import("Sql_lib"); +import("system.logging"); +import("system.vars"); +import("system.db"); +import("system.eMath"); + + +function TopicTreeUtils () {} + +/* + * Returns the sortingValue of the relevant Layer, by checkign which ones are filled. + * + * @param {String} pLayer1 sorting value of layer 1 + * @param {String} pLayer2 sorting value of layer 2 + * @param {String} pLayer3 sorting value of layer 3 + * @param {String} pLayer4 sorting value of layer 4 + * @param {String} pLayer5 sorting value of layer 5 + * @param {String} pLayer6 sorting value of layer 6 + * + * @return {String} The sorting value of the relevant Layer + */ +TopicTreeUtils.getSortingValue = function(pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, pLayer6) +{ + var res; + if(pLayer6) + { + res = pLayer6; + } + else if(pLayer5) + { + res = pLayer5; + } + else if(pLayer4) + { + res = pLayer4; + } + else if(pLayer3) + { + res = pLayer3; + } + else if(pLayer2) + { + res = pLayer2; + } + else + { + res = pLayer1; + } + + return res; +} + +/* + * moves Sortingposition of items up/down/bottom/top + * + * @param {String} pTopicTreeId topic tree Id of the dataset that get's moved + * @param {String} pDirection direction req to change item (e.g: down, up, bottom, top) + * @param {String} pMaxSorting max sorting of said item (needed so we can update the sortingValeus of the other topics accordingly) + * @param {String} [pAssignedTo] topic tree id of the topic this topic is the subtopic off + * @param {String} pOwnSortingValue sorting value of said value + * @param {String} pCurrentLayer current Layer as String, as specified as in TopicTreeUtils.getArrayLayers() + * + * @return {void} + */ +TopicTreeUtils.movePosition = function(pTopicTreeId, pDirection, pMaxSorting, pAssignedTo, pOwnSortingValue, pCurrentLayer) { + if(!pTopicTreeId || !pDirection) + { + return; + } + var layers = TopicTreeUtils.getArrayLayers(); + var sysDate = vars.get("$sys.date"); + var sysUser = vars.get("$sys.user"); + var maxSorting = pMaxSorting; + + + function buildUpdateArray([pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, pLayer6, pLayerLvl, pPElementId], pNewSorting) { + return ["TOPICTREE", [layers[pLayerLvl], "DATE_EDIT", "USER_EDIT"], null, [pNewSorting, sysDate, sysUser], "TOPICTREEID = '" + pPElementId + "'"]; + } + + var directionObj = { + down: { + directionOperation: " + 1 = ", + myElementFunction: function(rows) { + return buildUpdateArray(rows, (parseInt(rows[rows[6]]) + 1).toString()); + }, + otherElementFunction: function(rows) { + return buildUpdateArray(rows, (parseInt(rows[rows[6]]) - 1).toString()); + } + }, + up: { + directionOperation: " - 1 = ", + myElementFunction: function(rows) { + return buildUpdateArray(rows, (parseInt(rows[rows[6]]) - 1).toString()); + }, + otherElementFunction: function(rows) { + return buildUpdateArray(rows, (parseInt(rows[rows[6]]) + 1).toString()); + } + }, + bottom: { + directionOperation: " < ", + myElementFunction: function(rows) { + return buildUpdateArray(rows, maxSorting); + }, + otherElementFunction: function(rows) { + return buildUpdateArray(rows, (parseInt(rows[rows[6]]) - 1).toString()); + } + }, + top: { + directionOperation: " > ", + myElementFunction: function(rows) { + return buildUpdateArray(rows, "1"); + }, + otherElementFunction: function(rows) { + return buildUpdateArray(rows, (parseInt(rows[rows[6]]) + 1).toString()); + } + } + }[pDirection]; + + var myElements = TopicTreeUtils._movePositionHelper(pTopicTreeId, " = "); + var otherElements = TopicTreeUtils._movePositionHelper(pTopicTreeId, directionObj.directionOperation, pAssignedTo, pOwnSortingValue, pCurrentLayer); + + var statements = myElements.map(directionObj.myElementFunction); + statements = statements.concat(otherElements.map(directionObj.otherElementFunction)); + + db.updates(statements); +} + +/* + * Returns the topicLayers as StringArray <br> + * + * e.g: ["SORTING_LAYER_1", "SORTING_LAYER_2", "SORTING_LAYER_3", "SORTING_LAYER_4", "SORTING_LAYER_5", "SORTING_LAYER_6"]; + * + * @return {Array} Layers + */ +TopicTreeUtils.getArrayLayers = function() { + return ["SORTING_LAYER_1", "SORTING_LAYER_2", "SORTING_LAYER_3", "SORTING_LAYER_4", "SORTING_LAYER_5", "SORTING_LAYER_6"]; +} + +/* + * helper function used in TopicTreeUtils.movePosition() + * + * @param {String} pTopicTreeId topic tree Id of the dataset that get's moved + * @param {String} pOperation direction operation (e.g: down, up, bottom, top) + * @param {String} [pAssignedTo] topic tree id of the topic this topic is the subtopic off (mandatory if you are moving other Elements, leave blank if own Elements) + * @param {String} [pMyElementSortingValue] sorting value of said topic (mandatory if you are moving other Elements, leave blank if own Elements) + * @param {String} [pCurrentLayer] current Layer as String, as specified as in TopicTreeUtils.getArrayLayers() (mandatory if you are moving other Elements, leave blank if own Elements) + * + * @return {boolean} true if succesfull + */ +TopicTreeUtils._movePositionHelper = function(pTopicTreeId, pOperation, pAssignedTo, pMyElementSortingValue, pCurrentLayer) { + + var fixedOperation = pOperation; + if(pAssignedTo) + { + fixedOperation = " = "; //fixed operator for other elements + } + return db.table("select otherElements.SORTING_LAYER_1 \ + , otherElements.SORTING_LAYER_2 \ + , otherElements.SORTING_LAYER_3 \ + , otherElements.SORTING_LAYER_4 \ + , otherElements.SORTING_LAYER_5 \ + , otherElements.SORTING_LAYER_6 \ + , LAYER_LEVEL \ + , otherElements.TOPICTREEID \ + from ( " + TopicTreeUtils._getLayerSQL(pTopicTreeId, pAssignedTo, pOperation, pMyElementSortingValue, pCurrentLayer) + " ) TOPICTREE \ + join TOPICTREE otherElements \ + on TOPICTREE.TOPICTREEID = otherElements.TOPICTREEID \ + and case when LAYER_LEVEL = 0 then TOPICTREE.SORTING_LAYER_1 " + fixedOperation + " otherElements.SORTING_LAYER_1 \ + when LAYER_LEVEL = 1 then TOPICTREE.SORTING_LAYER_1 = otherElements.SORTING_LAYER_1 and TOPICTREE.SORTING_LAYER_2 " + fixedOperation + " otherElements.SORTING_LAYER_2 \ + when LAYER_LEVEL = 2 then TOPICTREE.SORTING_LAYER_1 = otherElements.SORTING_LAYER_1 and TOPICTREE.SORTING_LAYER_2 = otherElements.SORTING_LAYER_2 and TOPICTREE.SORTING_LAYER_3 " + fixedOperation + " otherElements.SORTING_LAYER_3 \ + when LAYER_LEVEL = 3 then TOPICTREE.SORTING_LAYER_1 = otherElements.SORTING_LAYER_1 and TOPICTREE.SORTING_LAYER_2 = otherElements.SORTING_LAYER_2 and TOPICTREE.SORTING_LAYER_3 = otherElements.SORTING_LAYER_3 and TOPICTREE.SORTING_LAYER_4 " + fixedOperation + " otherElements.SORTING_LAYER_4 \ + when LAYER_LEVEL = 4 then TOPICTREE.SORTING_LAYER_1 = otherElements.SORTING_LAYER_1 and TOPICTREE.SORTING_LAYER_2 = otherElements.SORTING_LAYER_2 and TOPICTREE.SORTING_LAYER_3 = otherElements.SORTING_LAYER_3 and TOPICTREE.SORTING_LAYER_4 = otherElements.SORTING_LAYER_4 and TOPICTREE.SORTING_LAYER_5 " + fixedOperation + " otherElements.SORTING_LAYER_5 \ + else TOPICTREE.SORTING_LAYER_1 = otherElements.SORTING_LAYER_1 and TOPICTREE.SORTING_LAYER_2 = otherElements.SORTING_LAYER_2 and TOPICTREE.SORTING_LAYER_3 = otherElements.SORTING_LAYER_3 and TOPICTREE.SORTING_LAYER_4 = otherElements.SORTING_LAYER_4 and TOPICTREE.SORTING_LAYER_5 = otherElements.SORTING_LAYER_5 and TOPICTREE.SORTING_LAYER_6 " + fixedOperation + " otherElements.SORTING_LAYER_6 end"); +} + +/* + * helper function used in TopicTreeUtils._movePositionHelper() <br> + * + * returns the layerSql with the correct where condition + * @param {String} pTopicTreeId topic tree Id of the dataset that get's moved + * @param {String} pOperation direction operation (e.g: down, up, bottom, top) + * @param {String} [pAssignedTo] topic tree id of the topic this topic is the subtopic off (mandatory if you are moving other Elements, leave blank if own Elements) + * @param {String} [pMyElementSortingValue] sorting value of said topic (mandatory if you are moving other Elements, leave blank if own Elements) + * @param {String} [pCurrentLayer] current Layer as String, as specified as in TopicTreeUtils.getArrayLayers() (mandatory if you are moving other Elements, leave blank if own Elements) + * + * @return {boolean} true if succesfull + */ +TopicTreeUtils._getLayerSQL = function(pTopicTreeId, pAssignedTo, pOperation, pMyElementSortingValue, pCurrentLayer) { + var whereCond = "TOPICTREEID = '" + pTopicTreeId + "'"; + + if(pAssignedTo)//other element -> add to condition accordingly + { + if(pAssignedTo == $TopicTreeConstants.TOPTOPIC())//top topics have no asignee + { + whereCond = "ASSIGNEDTO is null"; + } + else + { + whereCond = "ASSIGNEDTO = '" + pAssignedTo + "'"; + } + + whereCond = whereCond + " and TOPICTREEID != '" + pTopicTreeId + "'"; + + switch (pOperation) { + case " + 1 = ": + whereCond = whereCond + " and " + pCurrentLayer + "= (" + pMyElementSortingValue + "+1)"; + break; + case " - 1 = ": + whereCond = whereCond + " and " + pCurrentLayer + "= (" + pMyElementSortingValue + "-1)"; + break; + case " < ": + whereCond = whereCond + " and " + pCurrentLayer + "> " + pMyElementSortingValue +""; + break; + case " > ": + whereCond = whereCond + " and " + pCurrentLayer + "< " + pMyElementSortingValue +""; + break; + default: + break; + } + + } + + return "select case when SORTING_LAYER_6 is not null then 5 \ + when SORTING_LAYER_5 is not null then 4 \ + when SORTING_LAYER_4 is not null then 3 \ + when SORTING_LAYER_3 is not null then 2 \ + when SORTING_LAYER_2 is not null then 1 \ + else 0 end as LAYER_LEVEL, \ + TOPICTREE.* \ + from TOPICTREE \ + where " + whereCond + ""; +} + +/* + * Returns the name of the relevant Layer, by checking which ones are filled. <br> + * works the same way as getSortingValue(); + * + * @param {String} pLayer1 sorting value of layer 1 + * @param {String} pLayer2 sorting value of layer 2 + * @param {String} pLayer3 sorting value of layer 3 + * @param {String} pLayer4 sorting value of layer 4 + * @param {String} pLayer5 sorting value of layer 5 + * @param {String} pLayer6 sorting value of layer 6 + * + * @return {String} The relevant sorting Layer as String + */ +TopicTreeUtils.getLayer = function(pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, pLayer6) +{ + var res; + if(Utils.toBoolean(pLayer6)) + { + res = "SORTING_LAYER_6"; + } + else if(Utils.toBoolean(pLayer5)) + { + res = "SORTING_LAYER_5"; + } + else if(Utils.toBoolean(pLayer4)) + { + res = "SORTING_LAYER_4"; + } + else if(Utils.toBoolean(pLayer3)) + { + res = "SORTING_LAYER_3"; + } + else if(Utils.toBoolean(pLayer2)) + { + res = "SORTING_LAYER_2"; + } + else + { + res = "SORTING_LAYER_1"; + } + + return res; +} + +/* + * Returns the number value of the relevant Layer.<br> + * works the same way as getSortingValue(); + * + * @param {Boolean} pDeeper not the relevant layer, but one layer deeper (child topics) + * @param {String} pLayer1 sorting value of layer 1 + * @param {String} pLayer2 sorting value of layer 2 + * @param {String} pLayer3 sorting value of layer 3 + * @param {String} pLayer4 sorting value of layer 4 + * @param {String} pLayer5 sorting value of layer 5 + * @param {String} pLayer6 sorting value of layer 6 + * + * @return {String} The relevant sorting Layer as Number (e.g: if "SORTING_LAYER_2" was the relevant one the returned value would be "2") + */ +TopicTreeUtils.getLayerAsNumber = function(pDeeper, pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, pLayer6) +{ + var layer; + if(pDeeper) + { + layer = TopicTreeUtils.getDeeperLayer(pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, pLayer6); + } + else + { + layer = TopicTreeUtils.getLayer(pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, pLayer6); + } + var lastThreeChars = layer.substring(layer.length - 3); + + for(var element in lastThreeChars)//currently we have only 6 layers, but this might change in the future, this loop allows us to have up to -19 layers + { + if(!isNaN(lastThreeChars[0])) + { + return lastThreeChars; + } + else + { + lastThreeChars = lastThreeChars.substring(1); + } + } + return 0; +} + +/* + * Returns the name of not the relevant Layer, but the one one layer deeper (child topic) by checking which ones are filled. <br> + * works the same way as getSortingValue() and getLayer(); + * + * @param {String} pLayer1 sorting value of layer 1 + * @param {String} pLayer2 sorting value of layer 2 + * @param {String} pLayer3 sorting value of layer 3 + * @param {String} pLayer4 sorting value of layer 4 + * @param {String} pLayer5 sorting value of layer 5 + * @param {String} pLayer6 sorting value of layer 6 + * + * @return {String} The relevant sorting Layer as String + */ +TopicTreeUtils.getDeeperLayer = function(pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, pLayer6) +{ + var res; + if(pLayer5 && pLayer5 != "null" && pLayer5 != "")// null as string because that's how '$sys.selectionRows'returns null + { + res = "SORTING_LAYER_6"; + } + else if(pLayer4 && pLayer4 != "null" && pLayer4 != "") + { + res = "SORTING_LAYER_5"; + } + else if(pLayer3 && pLayer3 != "null" && pLayer3 != "") + { + res = "SORTING_LAYER_4"; + } + else if(pLayer2 && pLayer2 != "null" && pLayer2 != "") + { + res = "SORTING_LAYER_3"; + } + else + { + res = "SORTING_LAYER_2"; + } + + return res; +} + +/* + * Returns the layer underneath pLayerName 8child topic as string.<br> + + * @param {String} pLayerName layer name you want the sub topic layer from + * + * @return {String} layer name of sub topics as String + */ +TopicTreeUtils.getDeeperLayerFromLayerName = function(pLayerName) +{ + var number = TopicTreeUtils.returnNumberOfLayerName(pLayerName); + var newdeeperNummer = eMath.addInt(parseInt(number), 1); + var newName = pLayerName.substring(0, pLayerName.length - number.length) + newdeeperNummer; + + return newName; +} + +/* + * Returns the layer underneath pLayerName 8child topic as string.<br> + + * @param {String} pLayerName layer name you want the sub topic layer from + * + * @return {String} layer name of sub topics as String + */ +TopicTreeUtils.getPreviousLayerName = function(pLayerName) +{ + var number = TopicTreeUtils.returnNumberOfLayerName(pLayerName); + var newdeeperNummer = eMath.subInt(parseInt(number), 1); + var newName = pLayerName.substring(0, pLayerName.length - number.length) + newdeeperNummer; + + return newName; +} + +/* + * Returns the number of pLayerName<br> + + * @param {String} pLayerName layer name you want the number from + * + * @return {String} Sorting layer as String (e.g: if "SORTING_LAYER_2" was the relevant one the returned value would be "2") + */ +TopicTreeUtils.returnNumberOfLayerName = function(pLayerName) +{ + var lastThreeChars = pLayerName.substring(pLayerName.length - 3); + + for(var element in lastThreeChars)//currently we have only 6 layers, but this might change in the future, this loop allows us to have up to -19 layers + { + if(!isNaN(lastThreeChars[0])) + { + return lastThreeChars; + } + else + { + lastThreeChars = lastThreeChars.substring(1); + } + } + return 0; +} + +/* + * Returns the amount of layers<br> + * So basically how deep this topic is from pTopicTreeDataset to the deepest one + * @param {String} pTopicTreeDataset as returned by vars.get("$sys.selectionRows")[0]; + * + * @return {Number} Number of layers (e.g: when topLayer = SORTING_LAYER_2 and the deepest subtopic is SORTING_LAYER_5 --> "4" (4layers: 2, 3, 4, 5) + */ +TopicTreeUtils.getAmountOfLayers = function(pTopicTreeDataset) +{ + var topLayer = TopicTreeUtils.returnNumberOfLayerName(JSON.parse(pTopicTreeDataset["sortingHelper"])["sortingLayer"]); + var topId = pTopicTreeDataset["#UID"]; + + var deepestLayer = topLayer; + var assignedTo = [topId]; + + while (true) + { + var subTopics = newSelect("TOPICTREE.TOPICTREEID \n\ + , case when SORTING_LAYER_6 is not null then 'SORTING_LAYER_6' \n\ + when SORTING_LAYER_5 is not null then 'SORTING_LAYER_5' \n\ + when SORTING_LAYER_4 is not null then 'SORTING_LAYER_4' \n\ + when SORTING_LAYER_3 is not null then 'SORTING_LAYER_3' \n\ + when SORTING_LAYER_2 is not null then 'SORTING_LAYER_2' \n\ + else 'SORTING_LAYER_1' end") + .from("TOPICTREE") + .where("TOPICTREE.ASSIGNEDTO", assignedTo, SqlBuilder.IN()) + .table(); + assignedTo = []; + if(subTopics.length == 0) + { + break; + } + + for (var ii = 0; ii < subTopics.length; ii++) + { + let layer = TopicTreeUtils.returnNumberOfLayerName(subTopics[ii][1]); + if(parseInt(layer) > parseInt(deepestLayer)) + { + deepestLayer = layer; + } + assignedTo.push(subTopics[ii][0]); + } + } + + var amountOfLayers = eMath.addInt(eMath.subInt(deepestLayer, topLayer), 1); + + return amountOfLayers; +} + +/* + * Returns the amount of layers<br> + * So basically how deep this topic is from pTopicTreeDataset to the deepest one + * @param {String} pTopicTreeDataset as returned by vars.get("$sys.selectionRows")[0]; + * + * @return {Number} Number of layers (e.g: when topLayer = SORTING_LAYER_2 and the deepest subtopic is SORTING_LAYER_5 --> "4" (4layers: 2, 3, 4, 5) + */ +TopicTreeUtils.getSubTopicIds = function(pTopicTreeDataset) +{ + var topId = pTopicTreeDataset["#UID"]; + + var assignedTo = [topId]; + var ids = [topId]; + + while (true) + { + var subTopics = newSelect("TOPICTREE.TOPICTREEID") + .from("TOPICTREE") + .where("TOPICTREE.ASSIGNEDTO", assignedTo, SqlBuilder.IN()) + .arrayColumn(); + assignedTo = []; + if(subTopics.length == 0) + { + break; + } + for (var i = 0; i < subTopics.length; i++) + { + ids.push(subTopics[i]); + assignedTo.push(subTopics[i]); + } + } + + return ids; +} + + +/* + * Returns layer number case when (returns 6 SORTING_LAYER_6 is filled, 5 if SORTING_LAYER_5 is filled, and so on + * + * @return {Number} Number of layer + */ +TopicTreeUtils.layerNumberCaseWhen = function() +{ + return SqlBuilder.caseWhen(newWhere("SORTING_LAYER_6 is not null")) + .then("6") + .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_5 is not null")) + .then("5") + .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_4 is not null")) + .then("4") + .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_3 is not null")) + .then("3") + .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_2 is not null")) + .then("2") + .elseValue("1"))))) + .toString(); +} + +/* + * Returns the case for the actual sortingValue (sortingValue of relevant Layer). + * + * @return {Number} Number of layer + */ +TopicTreeUtils.relevantSortingValueCaseWhen = function() +{ + return SqlBuilder.caseWhen(newWhere("SORTING_LAYER_6 is not null")) + .then("SORTING_LAYER_6") + .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_5 is not null")) + .then("SORTING_LAYER_5") + .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_4 is not null")) + .then("SORTING_LAYER_4") + .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_3 is not null")) + .then("SORTING_LAYER_3") + .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_2 is not null")) + .then("SORTING_LAYER_2") + .elseValue("SORTING_LAYER_1"))))) + .toString(); +} + +/* + * Returns the case for the actual sortingValue (sortingValue of relevant Layer). + * + * @return {Number} Number of layer + */ +TopicTreeUtils.layerNameCaseWhen = function() +{ + return SqlBuilder.caseWhen(newWhere("SORTING_LAYER_6 is not null")) + .thenString("SORTING_LAYER_6") + .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_5 is not null")) + .thenString("SORTING_LAYER_5") + .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_4 is not null")) + .thenString("SORTING_LAYER_4") + .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_3 is not null")) + .thenString("SORTING_LAYER_3") + .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_2 is not null")) + .thenString("SORTING_LAYER_2") + .elseString("SORTING_LAYER_1"))))) + .toString(); +} + +/** + * Checks if any topic is beeing added more than once and returns a message if that's the case.<br> + * + * @param {String} pConsumer <p> + * The name of the topic tree relation consumer.<br> + * @return {String} <p> + * The validation message or an empty<br> + * string if everything is ok.<br> + */ +TopicTreeUtils.validateTopicCount = function (pConsumer) +{ + var unvalid = EntityConsumerRowsHelper.validateUniqueRows(pConsumer, "TOPICTREE_ID", "TOPICTREE_IDdisplayValue", 1); + + var validationString = ""; + for (var topic in unvalid) + { + if(validationString == "") + { + validationString += (translate.text("The following Topics have been set more than once:") + "\n") + } + else + { + validationString += ",\n"; + } + validationString += unvalid[topic]; + + } + return validationString; +} + +/** + * Get's the displayvlaue for topic tree elements<br> + * Basically adds the topic titles of all Superordinate topics in front of it's own title, concated with " > "<br> + * e.g: "Department > Sales > Field staff"<br> + * If it's one of the subtopics only that one is returned<br> + * e.g: "Department"<br> + * + * @param {String} pTopicTreeId <p> + * The row id of the entity.<br> + * @return {String} <p> + * The displayValue as described above + */ +TopicTreeUtils.getTopicTreeDisplayValue = function (pTopicTreeId) +{ + var title; + + var deepestSubTopic = newSelect(["TOPICTREE.TOPIC" + , "TOPICTREE.ASSIGNEDTO" + , TopicTreeUtils.layerNumberCaseWhen()]) + .from("TOPICTREE") + .orderBy("SORTING_LAYER_1, SORTING_LAYER_2, SORTING_LAYER_3, SORTING_LAYER_4, SORTING_LAYER_5, SORTING_LAYER_6") + .where("TOPICTREE.TOPICTREEID", pTopicTreeId) + .arrayRow(); + title = deepestSubTopic[0]; + var assignedTo = deepestSubTopic[1]; + for (i = 0; i < deepestSubTopic[2]; i++) + { + var higherLayer = newSelect("TOPICTREE.ASSIGNEDTO, TOPICTREE.TOPIC") + .from("TOPICTREE") + .where("TOPICTREE.TOPICTREEID", assignedTo) + .arrayRow(); + if(higherLayer[1] != undefined) + { + title = higherLayer[1] + " > " + "" + title; + assignedTo = higherLayer[0]; + } + } + + return title; +} + +/** + * Used by both the contentProcess aswell as the rowCountProcess of the jDito recordContainer of TopicTree_lib<br> + * + * It is currently not possible to page the tree while using a tree/treeTable viewtemplate (The tree paging we do have which pages the nodes does only + * work for groupings and not for our parent-child structure. <br> + * + * So we recommend trying to keep your topic tree small and maybe even split it into multiple smaller ones.<br> + * + * @param {Boolean} pIsRowCount <p> + * If true: returns the length instead of the stringified tree, also doens't do some stuff that's needed for displayvalues<br> + * @return {String} <p> + * stringified Array needed for the contentProcess or rowCount if pIsRowCount is set + */ +TopicTreeUtils.returnTopicTree = function (pIsRowCount) +{ + var expanded = false; + + if(vars.exists("$param.Expanded_param") && vars.get("$param.Expanded_param")) + { + expanded = Utils.toBoolean(vars.get("$param.Expanded_param")); + } + else if(vars.exists("$context.expanded") && vars.get("$context.expanded")) + { + expanded = Utils.toBoolean(vars.get("$context.expanded")); + } + + var condition = newWhere(); + + if (vars.exists("$local.idvalues") && vars.get("$local.idvalues")) + { + condition.andIfSet("TOPICTREE.TOPICTREEID", vars.get("$local.idvalues"), SqlBuilder.IN()); + } + + if(vars.exists("$param.OnlyActive_param") && vars.get("$param.OnlyActive_param")) + { + condition.andIfSet("TOPICTREE.ACTIVE", "1"); + } + + if(vars.exists("$param.OnlyFiveLayers_param") && vars.get("$param.OnlyFiveLayers_param")) + { + condition.and("TOPICTREE.SORTING_LAYER_6 is null"); + } + + var treeElements = newSelect(["TOPICTREE.TOPICTREEID" + , "TOPICTREE.ASSIGNEDTO" + , "TOPICTREE.ACTIVE" + , "TOPICTREE.TOPIC" + , "TOPICTREE.DESCRIPTION" + , "TOPICTREE.SORTING_LAYER_1" + , "TOPICTREE.SORTING_LAYER_2" + , "TOPICTREE.SORTING_LAYER_3" + , "TOPICTREE.SORTING_LAYER_4" + , "TOPICTREE.SORTING_LAYER_5" + , "TOPICTREE.SORTING_LAYER_6" + , "TOPICTREE.DATE_EDIT" + , "TOPICTREE.DATE_NEW" + , "TOPICTREE.USER_EDIT" + , "TOPICTREE.USER_NEW" + , TopicTreeUtils.relevantSortingValueCaseWhen() + , TopicTreeUtils.layerNameCaseWhen()]) + .from("TOPICTREE") + .whereIfSet(condition) + .orderBy("TOPICTREE.SORTING_LAYER_1 \n\ + , TOPICTREE.SORTING_LAYER_2 \n\ + , TOPICTREE.SORTING_LAYER_3 \n\ + , TOPICTREE.SORTING_LAYER_4 \n\ + , TOPICTREE.SORTING_LAYER_5 \n\ + , TOPICTREE.SORTING_LAYER_6") + .table(); + + var maxCountObj = {}; + var positionObj = {}; + var assignedToObj = {} + for (let i = 0; i < treeElements.length; i++)//loop trough selected Topics and builds maxCountObj(max SortingVlaue for said assignee) + { + let topicTreeId = treeElements[i][0]; + let asigneeId = !treeElements[i][1] || treeElements[i][1] == "" ? $TopicTreeConstants.TOPTOPIC() : treeElements[i][1];//assigned to, "topTopic" if topNode (Topic of first Layer) + var sortingValue = treeElements[i][15];//case when returns the relevant sortig value + + if(!maxCountObj.hasOwnProperty(asigneeId)) + { + maxCountObj[asigneeId] = sortingValue; + } + else if(maxCountObj[asigneeId] < sortingValue) + { + maxCountObj[asigneeId] = sortingValue; + } + } + + if(!pIsRowCount) + { + //loop trough selected Topics again and assign the ownSortingValue and maxSortingValue to each element with the help of the sortingHelper field, + //so we only have to load these from here and can use them for the stateprocesses of the actions without having to get this info from scratch everytime (performance) + for (let i = 0; i < treeElements.length; i++) + { + let asigneeId = !treeElements[i][1] || treeElements[i][1] == "" ? $TopicTreeConstants.TOPTOPIC() : treeElements[i][1]; + + //sortingHelper field for the stateProcesses (performanceBoost since we only have to get these here once) + treeElements[i][15] = JSON.stringify({"ownSortingValue": treeElements[i][15] + , "maxSortingValue": maxCountObj[asigneeId] + , "sortingLayer": treeElements[i][16] + , "childTopics": maxCountObj[treeElements[i][0]]}); + treeElements[i][16] = treeElements[i][0]; //uid = TOPICTREEID needed for the tree + treeElements[i][17] = "NEON:DUE"; //icon (different colors depending on the state + treeElements[i][18] = expanded; //expanded + } + } + + if(pIsRowCount) + { + return treeElements.length; + } + return JSON.stringify(treeElements); +} + +/** + * Used by both the contentProcess aswell as the rowCountProcess of the jDito recordContainer of TopicTree_lib<br> + * + * It is currently not possible to page the tree while using a tree/treeTable viewtemplate (The tree paging we do have which pages the nodes does only + * work for groupings and not for our parent-child structure. <br> + * + * So we recommend trying to keep your topic tree small and maybe even split it into multiple smaller ones.<br> + * + * @param {Boolean} pIsTopTopic <p> + * If true: inserts as top topic instead of inserting at selected topic<br> + * @return {void} <p> + * + */ +TopicTreeUtils.paste = function (pIsTopTopic) +{ + function _updateSortingValuesOfOtherTopics(pLayer, pOwnSortingValue, pAssignedTo) + { + var assignedToCond = newWhere("TOPICTREE.ASSIGNEDTO", pAssignedTo); + + if(pAssignedTo == $TopicTreeConstants.TOPTOPIC()) + { + assignedToCond = newWhere("TOPICTREE.ASSIGNEDTO is null"); + } + + var topicsThatNeedMoving = newSelect("TOPICTREE.TOPICTREEID, TOPICTREE." + pLayer + "") + .from("TOPICTREE") + .where(assignedToCond) + .and("TOPICTREE." + pLayer + "", pOwnSortingValue, SqlBuilder.GREATER()) + .table(); + + var updateStatements = []; + for (i = 0; i < topicsThatNeedMoving.length; i++) + { + updateStatements.push(["TOPICTREE", [pLayer], null, [topicsThatNeedMoving[i][1]], newWhere("TOPICTREE.TOPICTREEID", topicsThatNeedMoving[i][0]).build()]); + } + if(updateStatements.length > 0) + { + db.execute(updateStatements); + } + } + + var isCut = vars.exists("$context.Cut") && vars.get("$context.Cut") != null; + var copy = JSON.parse(vars.get("$context.Copied"))["dataset"]; //copied data + var cTopicTreeId = copy["#UID"]; + var topicAndActive = newSelect("TOPICTREE.TOPIC, TOPICTREE.ACTIVE").from("TOPICTREE").where("TOPICTREE.TOPICTREEID", cTopicTreeId).arrayRow(); + var cTopic = topicAndActive[0]; + var cActive = topicAndActive[1]; + var cDescription = copy.DESCRIPTION; + var cAssignedTo = copy.ASSIGNEDTO == "" ? $TopicTreeConstants.TOPTOPIC() : copy.ASSIGNEDTO; + var cSorting_Layer_1 = copy.SORTING_LAYER_1; + var cSorting_Layer_2 = copy.SORTING_LAYER_2; + var cSorting_Layer_3 = copy.SORTING_LAYER_3; + var cSorting_Layer_4 = copy.SORTING_LAYER_4; + var cSorting_Layer_5 = copy.SORTING_LAYER_5; + var cSorting_Layer_6 = copy.SORTING_LAYER_6; + var cLayer = TopicTreeUtils.getLayer(cSorting_Layer_1, cSorting_Layer_2, cSorting_Layer_3, cSorting_Layer_4, cSorting_Layer_5, cSorting_Layer_6); + + var cSortingHelper = JSON.parse(copy.sortingHelper); + var cOwnSortingValue = cSortingHelper.ownSortingValue; + + var pLayer = "SORTING_LAYER_1"; + var pLayerDeeper = "SORTING_LAYER_2"; + var cond = newWhere("TOPICTREE.ASSIGNEDTO is null"); + if(!pIsTopTopic) + { + var paste = vars.get("$sys.selectionRows")[0]; //paste data + var pTopicTreeId = paste["#UID"]; + var pSorting_Layer_1 = paste.SORTING_LAYER_1; + var pSorting_Layer_2 = paste.SORTING_LAYER_2; + var pSorting_Layer_3 = paste.SORTING_LAYER_3; + var pSorting_Layer_4 = paste.SORTING_LAYER_4; + var pSorting_Layer_5 = paste.SORTING_LAYER_5; + var pSorting_Layer_6 = paste.SORTING_LAYER_6; + pLayer = TopicTreeUtils.getLayer(pSorting_Layer_1, pSorting_Layer_2, pSorting_Layer_3, pSorting_Layer_4, pSorting_Layer_5, pSorting_Layer_6); + pLayerDeeper = TopicTreeUtils.getDeeperLayer(pSorting_Layer_1, pSorting_Layer_2, pSorting_Layer_3, pSorting_Layer_4, pSorting_Layer_5, pSorting_Layer_6); + cond = newWhere("TOPICTREE.ASSIGNEDTO", pTopicTreeId); + } + + + var maxSortingOneLayerDeeper = newSelect("max(" + pLayerDeeper + ")") + .from("TOPICTREE") + .where(cond) + .cell(); + + if(!maxSortingOneLayerDeeper || maxSortingOneLayerDeeper == "") + { + maxSortingOneLayerDeeper = 0; + } + + var columns = ["TOPICTREEID" + , "TOPIC" + , "DESCRIPTION" + , "ACTIVE" + , pLayer + , "USER_NEW" + , "DATE_NEW" + , "ASSIGNEDTO"]; + + var uid = isCut == true ? cTopicTreeId : util.getNewUUID();//new uuid is old uuid if cut, since we "move" the topic instead of copying + var values = [uid + , cTopic + , cDescription + , cActive + , eMath.addInt(maxSortingOneLayerDeeper, 1) + , vars.get("$sys.user") + , vars.get("$sys.date") + , pTopicTreeId]; + + + if(isCut) + { + _updateSortingValuesOfOtherTopics(cLayer, cOwnSortingValue, cAssignedTo); + + db.deletes([newWhere("TOPICTREE.TOPICTREEID", cTopicTreeId).buildDeleteStatement()]);//delete before insert (duplicate id) + } + + db.insertData("TOPICTREE", columns, null, values); + + var stop = false + var topicTreeIdsToUpdate = []; + var subTopicsToDelete = []; + var topicTreeIds = [cTopicTreeId]; + var oldToNewIdHelperObj = {}; + oldToNewIdHelperObj[cTopicTreeId] = uid; + var subInserts = []; + //update child topics accordingly + while(stop == false) + { + topicTreeDatasets = newSelect(["TOPICTREE.TOPICTREEID" + , TopicTreeUtils.relevantSortingValueCaseWhen() + " as sortingValue" + , TopicTreeUtils.layerNameCaseWhen() + , "TOPICTREE.TOPIC" + , "TOPICTREE.DESCRIPTION" + , "TOPICTREE.ACTIVE" + , "TOPICTREE.ASSIGNEDTO" + , TopicTreeUtils.layerNumberCaseWhen() + " as layerNumber"]) + .from("TOPICTREE") + .where("TOPICTREE.ASSIGNEDTO", topicTreeIds, SqlBuilder.IN()) + .orderBy("layerNumber, sortingValue") + .table(); + + if(topicTreeDatasets && topicTreeDatasets.length > 0) + { + topicTreeIds = [] + var subTopicId, subTopicRelevantSortingValue, subTopicRelevantSortingLayer, subTopic, subDescription, subActive, subAssignedTo; + for (let i = 0; i < topicTreeDatasets.length; i++) + { + [subTopicId, subTopicRelevantSortingValue, subTopicRelevantSortingLayer, subTopic, subDescription, subActive, subAssignedTo] = topicTreeDatasets[i]; + if(subTopicId != values[0])//otherwise we would have a problem wehn copying to itself (duplicate) + { + topicTreeIds.push(subTopicId); + topicTreeIdsToUpdate.push(subTopicId); + + subColumns = ["TOPICTREEID" + , "TOPIC" + , "DESCRIPTION" + , "ACTIVE" + , "USER_NEW" + , "DATE_NEW" + , "ASSIGNEDTO" + , subTopicRelevantSortingLayer];//relevant sorting value + var newSubUid + if(isCut == true) + { + newSubUid = subTopicId; + subTopicsToDelete.push(subTopicId); + } + else + { + newSubUid = util.getNewUUID(); + } + oldToNewIdHelperObj[subTopicId] = newSubUid; + + subValues = [newSubUid + , subTopic + , subDescription + , subActive + , vars.get("$sys.user") + , vars.get("$sys.date") + , oldToNewIdHelperObj[subAssignedTo] + , subTopicRelevantSortingValue]; + + var previousLayer = subTopicRelevantSortingLayer; + var stopper = false; + while(stopper == false)//fill in previous layersorting values, otherwise the move Actions won't work properly + { + previousLayer = TopicTreeUtils.getPreviousLayerName(previousLayer); + if(previousLayer != "SORTING_LAYER_0") + { + subColumns.push(previousLayer); + subValues.push(String(-1)); + } + else + { + stopper = true; + } + } + subInserts.push(["TOPICTREE", subColumns, null, subValues]); + } + } + } + else + { + stop = true; + } + } + + if(isCut && subTopicsToDelete) + { + db.deletes([newWhere("TOPICTREE.TOPICTREEID", subTopicsToDelete, SqlBuilder.IN()).buildDeleteStatement()]);//delete before insert (duplicate id) + } + if(subInserts && subInserts.length > 0) + { + //delete before insert (same uuid if cut) + db.inserts(subInserts); + } + + neon.refreshAll(); +} + +function $TopicTreeMoveDirections(){} +$TopicTreeMoveDirections.UP = function(){return "up"}; +$TopicTreeMoveDirections.DOWN = function(){return "down"}; +$TopicTreeMoveDirections.TOP = function(){return "top"}; +$TopicTreeMoveDirections.BOTTOM = function(){return "bottom"}; + +function $TopicTreeConstants(){} +$TopicTreeConstants.TOPTOPIC = function(){return "topTopic"}; \ No newline at end of file diff --git a/process/migrate_themesAsTopics_serverProcess/documentation.adoc b/process/migrate_themesAsTopics_serverProcess/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..f83de406be323946725eeaf2afaaac6343832b78 --- /dev/null +++ b/process/migrate_themesAsTopics_serverProcess/documentation.adoc @@ -0,0 +1,25 @@ += Theme Migration +This process can be used to transform the existing Theme data of the old ADITO 5.0 implementation of the topic tree to the new datastructure to +make the data work with the current implementation. +The original data keeps unchanged, this process doesn't delete anything! + +This process migrates to things: +1. the HISTORY_THEME datasets to TOPICTREERELATION datasets +2. the THEME datasets to TOPICTREE datasets + +1: The datastructe hasn't changed much, only difference being, that TOPICTREERELATION allows to link topics to more than just activities (object_type get's set accordingly) +2: the topicTree sorting functions a little different before (6 sorting columns, the last one that's filled has to be the relevant one) + topics are still assigned another topic above it using a column called ASSIGNEDTO. + Little example to make the whole thing more understandable: + TopicA: SORTING_LAYER_1: 1; ASSIGNEDTO: null + TopicAA: SORTING_LAYER_2: 1; ASSIGNEDTO: topicTreeIdOfTopicA + TopicAB: SORTING_LAYER_2: 2; ASSIGNEDTO: topicTreeIdOfTopicA + TopicAC: SORTING_LAYER_2: 3; ASSIGNEDTO: topicTreeIdOfTopicA + TopicACA: SORTING_LAYER_3: 1; ASSIGNEDTO: topicTreeIdOfTopicAC + TopicAD: SORTING_LAYER_2: 4; ASSIGNEDTO: topicTreeIdOfTopicA + TopicB: SORTING_LAYER_1: 2; ASSIGNEDTO: null + TopicC: SORTING_LAYER_1: 3; ASSIGNEDTO: null + TopicCA: SORTING_LAYER_2: 1; ASSIGNEDTO: topicTreeIdOfTopicC + + KIND, REMINDER, REMINDER_SUBJECT, REMINDER_GROUP, REMINDER_ROLES, REMINDER_SILENT are all columns for functionality that's not (yet?) implemented, so those don't get migrated + -> altough it shouldn't be a problem to migrate them in the future, since no uuids get changed by this process \ No newline at end of file diff --git a/process/migrate_themesAsTopics_serverProcess/migrate_themesAsTopics_serverProcess.aod b/process/migrate_themesAsTopics_serverProcess/migrate_themesAsTopics_serverProcess.aod new file mode 100644 index 0000000000000000000000000000000000000000..3190e8ba90ec30fbc5ddaa9044046d53dbee13bf --- /dev/null +++ b/process/migrate_themesAsTopics_serverProcess/migrate_themesAsTopics_serverProcess.aod @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>migrate_themesAsTopics_serverProcess</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/process/migrate_themesAsTopics_serverProcess/documentation.adoc</documentation> + <process>%aditoprj%/process/migrate_themesAsTopics_serverProcess/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>EXECUTABLE</element> + </variants> +</process> diff --git a/process/migrate_themesAsTopics_serverProcess/process.js b/process/migrate_themesAsTopics_serverProcess/process.js new file mode 100644 index 0000000000000000000000000000000000000000..52496b2230dc44fd3cc41656f834a8f7b8f1f7fd --- /dev/null +++ b/process/migrate_themesAsTopics_serverProcess/process.js @@ -0,0 +1,221 @@ +import("system.eMath"); +import("TopicTree_lib"); +import("system.logging"); +import("system.db"); +import("Sql_lib"); + +var pageSize = 500;//page because of potentially huge amount of data, you can increase/decrese this depending on you database + +//migrate HISTORY_THEME to TOPICTREERELATION +var topicTreeRelation = newSelect(["HISTORY_THEMEID" + , "HISTORY_ID" + , "THEME" + , "THEME_ID" + , "DATE_EDIT" + , "DATE_NEW" + , "USER_NEW" + , "USER_EDIT"]) + .from("HISTORY_THEME") + .pageSize(pageSize)//page because of potentially huge amount of data + .forEachPage(_migrateTopicTreeRelation); + +var topicTree = newSelect(["THEMEID" + , "THEME" + , "THEME_ID" + , SqlBuilder.caseWhen(newWhere("THEME.ISACTIVE", true)) + .then("1") + .elseValue("0") + , "THEMESORT" + , "USER_NEW" + , "DATE_NEW" + , "DATE_EDIT" + , "USER_EDIT" + , "DESCRIPTION"]) + .from("THEME") + .orderBy("KIND, THEMESORT") + .table();//here paging isn't easily implemented because of the tree structure, but it probably isn't needed anyway + +//migrate THEME to TOPICTREE +_migrateTopicTree(topicTree); + +function _migrateTopicTreeRelation(pBatchData, pBatchNum) +{ + var statements = []; + for (var i = 0; i < pBatchData.length; i++) + { + var historyThemeId, history_id, theme, theme_Id, date_edit, date_new, user_new, user_edit; + [historyThemeId, history_id, theme, theme_Id, date_edit, date_new, user_new, user_edit] = pBatchData[i]; + + var columns = ["TOPICTREERELATIONID" + , "TOPICTREE_ID" + , "OBJECT_ROWID" + , "OBJECT_TYPE" + , "USER_NEW" + , "DATE_NEW"]; + var values = [historyThemeId + , theme_Id + , history_id + , "Activity" + , user_new + , date_new]; + if (theme)//could be empty + { + columns.push("DESCRIPTION"); + values.push(theme); + } + if (date_edit)//could be empty + { + columns.push("DATE_EDIT"); + values.push(date_edit); + } + if (user_edit)//could be empty + { + columns.push("USER_EDIT"); + values.push(user_edit); + } + + statements.push(["TOPICTREERELATION", columns, null, values]); + } + if (statements.length > 0) + { + db.execute(statements); + logging.log(statements.length + " " + "Topic Relation Datasets have succesfully been migrated"); + } +} + +function _migrateTopicTree(pThemes) +{ + var statements = []; + var topicObj = {}; + var assignedToPositions = {}; + var topicsToLoopTrough = []; + for (let i = 0; i < pThemes.length; i++) + { + var themeId, theme, theme_id, isActive, themeSort, user_new, date_new, date_edit, user_edit, description; + [themeId, theme, theme_id, isActive, themeSort, user_new, date_new, date_edit, user_edit, description] = pThemes[i]; + + topicObj[themeId] = {}; + + topicObj[themeId]["sortingValue"] = themeSort; + topicObj[themeId]["insertHelper"] = {}; + topicObj[themeId]["insertHelper"]["columns"] = []; + topicObj[themeId]["insertHelper"]["values"] = []; + topicObj[themeId]["insertHelper"]["columns"].push("TOPICTREEID"); + topicObj[themeId]["insertHelper"]["values"].push(themeId); + topicObj[themeId]["insertHelper"]["columns"].push("TOPIC"); + topicObj[themeId]["insertHelper"]["values"].push(theme); + topicObj[themeId]["insertHelper"]["columns"].push("ACTIVE"); + topicObj[themeId]["insertHelper"]["values"].push(isActive); + topicObj[themeId]["insertHelper"]["columns"].push("USER_NEW"); + topicObj[themeId]["insertHelper"]["values"].push(user_new); + topicObj[themeId]["insertHelper"]["columns"].push("DATE_NEW"); + topicObj[themeId]["insertHelper"]["values"].push(date_new); + + if(theme_id && Utils.isNotNullOrEmpty(theme_id)) + { + topicObj[themeId]["assignedTo"] = theme_id; + topicsToLoopTrough.push(themeId); + topicObj[themeId]["insertHelper"]["columns"].push("ASSIGNEDTO"); + topicObj[themeId]["insertHelper"]["values"].push(theme_id); + } + else + { + topicObj[themeId]["assignedTo"] = $TopicTreeConstants.TOPTOPIC(); + topicObj[themeId]["layer"] = "SORTING_LAYER_1"; + } + if(!assignedToPositions.hasOwnProperty(topicObj[themeId]["assignedTo"])) + { + assignedToPositions[topicObj[themeId]["assignedTo"]] = [] + } + assignedToPositions[topicObj[themeId]["assignedTo"]].push({"topicId": themeId, "themeSort": themeSort}) + + if (description)//could be empty + { + topicObj[themeId]["insertHelper"]["columns"].push("DESCRIPTION"); + topicObj[themeId]["insertHelper"]["values"].push(description); + } + if (date_edit)//could be empty + { + topicObj[themeId]["insertHelper"]["columns"].push("DATE_EDIT"); + topicObj[themeId]["insertHelper"]["values"].push(date_edit); + } + if (user_edit)//could be empty + { + topicObj[themeId]["insertHelper"]["columns"].push("USER_EDIT"); + topicObj[themeId]["insertHelper"]["values"].push(user_edit); + } + + } + var stop = false; + while(!stop) + { + for (let i = 0; i < topicsToLoopTrough.length; i++) + { + var topicId = topicsToLoopTrough[i]; + var topicElement = topicObj[topicId]; + var assignedTo = topicElement["assignedTo"]; + + if(topicObj[assignedTo].hasOwnProperty("layer")) + { + var deepestLayer = TopicTreeUtils.getDeeperLayerFromLayerName(topicObj[assignedTo]["layer"]); + topicObj[topicId]["layer"] = deepestLayer; + topicsToLoopTrough.splice(i, 1); + i = i-1; + + var previousLayer = deepestLayer; + var stopper = false; + while(stopper == false)//fill in previous layerSorting values, otherwise the move Actions won't work properly + { + previousLayer = TopicTreeUtils.getPreviousLayerName(previousLayer); + if(previousLayer != "SORTING_LAYER_0") + { + topicObj[themeId]["insertHelper"]["columns"].push(previousLayer); + topicObj[themeId]["insertHelper"]["values"].push(-1);//value doesn't matter here + } + else + { + stopper = true; + } + + } + } + + if(topicsToLoopTrough.length == 0) + { + stop = true; + } + + } + } + + //sort the topics for every assignee + for (let assignee in assignedToPositions) + { + assignedToPositions[assignee].sort(function (a, b) { + return a.themeSort.localeCompare(b.themeSort); + }); + } + + //push updatestatements for every topic + for (let assignee in assignedToPositions) + { + for (let i = 0; i < assignedToPositions[assignee].length; i++) + { + var ownTopicId = assignedToPositions[assignee][i]["topicId"]; + var topicTreeColumns = topicObj[ownTopicId]["insertHelper"]["columns"]; + var topicTreeValues= topicObj[ownTopicId]["insertHelper"]["values"]; + + //i + 1 instead of the actual sortingValue (topicObj[ownTopicId]["sortingValue"]) since originally those didn't have to be successive (0, 3, 4, 5, 7, 9, ...) + //but now we them in a successive order (1, 2, 3, 4, 5, 6, ...) because of the how our move position actions work in the administration of the tree + //we don't change the original order tho, since we used the stored sortingValue to sort said array that we are now looping trough + var sortingValue = eMath.addInt(i, 1); + + topicTreeColumns.push(topicObj[ownTopicId]["layer"]); + topicTreeValues.push(sortingValue); + statements.push(["TOPICTREE", topicTreeColumns, null, topicTreeValues]); + } + } + db.execute(statements); + logging.log(statements.length + " " + "Topic Tree Datasets have succesfully been migrated"); + +} \ No newline at end of file