From a1aeee327d8f53c058bc337f51e76d80c33e12f0 Mon Sep 17 00:00:00 2001
From: Johannes Hoermann <j.hoermann@adito.de>
Date: Mon, 24 Jun 2019 13:50:17 +0200
Subject: [PATCH] Tickets as extra context

---
 .../Ticketmanagement/create_Ticket_table.xml  |  16 +
 .../Ticketmanagement/insert_TaskType_Task.xml |   2 +-
 .../Data_alias/basic/2019.1.4/changelog.xml   |   3 +-
 aliasDefinition/Data_alias/Data_alias.aod     |  83 +++--
 .../_____SYSTEM_APPLICATION_NEON.aod          |  24 ++
 .../AttributeRelation_entity.aod              |   6 -
 entity/Attribute_entity/afterUiInit.js        |  53 +--
 .../displayValueProcess.js                    |  25 +-
 .../recordcontainers/jdito/onUpdate.js        |  75 ++--
 .../KeywordEntry_entity.aod                   |   6 -
 .../children/contactid_param/valueProcess.js  |   1 +
 entity/TaskLink_entity/TaskLink_entity.aod    |   6 +
 entity/Task_entity/Task_entity.aod            |  99 +----
 .../entityfields/code/stateProcess.js         |  13 -
 .../whitelistids_param/valueProcess.js        |   5 -
 .../assignmentrowid_param/valueProcess.js     |   2 +-
 .../entityfields/type/valueProcess.js         |   2 +-
 .../entityfields/type_param/valueProcess.js   |   4 -
 .../recordcontainers/db/conditionProcess.js   |  68 ++--
 entity/Ticket_entity/Ticket_entity.aod        | 349 ++++++++++++++++++
 .../displaysimplename_param/valueProcess.js   |   0
 .../valueProcess.js                           |   2 +-
 .../objectrowid_param/valueProcess.js         |   4 +
 .../children/objecttype_param/valueProcess.js |   0
 .../children/showempty_param/valueProcess.js  |   0
 .../entityfields/attributes/onValidation.js   |   0
 .../entityfields/attributes/stateProcess.js   |   2 +-
 .../entityfields/code/displayValueProcess.js  |   0
 .../entityfields/code/valueProcess.js         |   6 +
 .../assignmentrowid_param}/valueProcess.js    |   4 +-
 .../assignmenttable_param/valueProcess.js     |   4 +
 .../filteronlyownticket_param/valueProcess.js |   3 +
 .../containername_param/valueProcess.js       |   2 +-
 .../children/taskid_param/valueProcess.js     |   4 +
 .../children/tablenames_param/valueProcess.js |  10 +
 .../assignmentrowid_param/valueProcess.js     |   4 +
 .../assignmenttable_param/valueProcess.js     |   3 +
 .../maindocuments/stateProcess.js             |  14 +
 .../displayValueProcess.js                    |   8 +
 .../entityfields/task_id/valueProcess.js      |   6 +
 .../task_maturity_date/valueProcess.js        |  12 +
 .../task_priority/displayValueProcess.js      |   6 +
 .../task_priority/valueProcess.js             |   8 +
 .../task_priority_icon/colorProcess.js        |  21 ++
 .../task_priority_icon/valueProcess.js        |   6 +
 .../task_progress/displayValueProcess.js      |   6 +
 .../task_progress/valueProcess.js             |   8 +
 .../displayValueProcess.js                    |   8 +
 .../task_requestor_contact_id/valueProcess.js |   7 +
 .../task_start_date/valueProcess.js           |  12 +
 .../task_status}/displayValueProcess.js       |  12 +-
 .../entityfields/task_status/valueProcess.js  |  13 +
 .../task_subject_details/valueProcess.js      |   5 +
 .../entityfields/task_taskid/valueProcess.js  |   7 +
 .../entityfields/task_type/valueProcess.js    |  10 +
 .../recordcontainers/db/conditionProcess.js   |  42 +++
 .../recordcontainers/db/fromClauseProcess.js  |   3 +
 .../recordcontainers/db/onDBDelete.js         |   9 +
 .../recordcontainers/db/onDBInsert.js         |   6 +
 .../recordcontainers/db/orderClauseProcess.js |   4 +
 .../expression.js                             |   6 +
 .../priority.displayvalue}/expression.js      |   4 +-
 .../progress.displayvalue/expression.js       |   6 +
 .../expression.js                             |   6 +
 .../status.displayvalue/expression.js         |   2 +
 neonContext/Task/Task.aod                     |  64 ++--
 neonContext/Ticket/Ticket.aod                 |  29 ++
 neonView/TaskEdit_view/TaskEdit_view.aod      |   9 -
 .../TaskMainPreview_view.aod                  |  58 ---
 neonView/TaskMain_view/TaskMain_view.aod      |   5 -
 .../TaskPreview_view/TaskPreview_view.aod     |   2 -
 neonView/TicketEdit_view/TicketEdit_view.aod  |  65 ++++
 .../TicketFilter_view/TicketFilter_view.aod   | 121 ++++++
 neonView/TicketMain_view/TicketMain_view.aod  |  48 +++
 .../TicketPreview_view/TicketPreview_view.aod |  79 ++++
 process/ActivityTask_lib/process.js           |  12 -
 process/KeywordRegistry_basic/process.js      |   4 +-
 process/Util_lib/process.js                   |  23 ++
 78 files changed, 1278 insertions(+), 388 deletions(-)
 create mode 100644 .liquibase/Data_alias/basic/2019.1.4/Ticketmanagement/create_Ticket_table.xml
 delete mode 100644 entity/Task_entity/entityfields/code/stateProcess.js
 delete mode 100644 entity/Task_entity/entityfields/keywordstates/children/whitelistids_param/valueProcess.js
 delete mode 100644 entity/Task_entity/entityfields/type_param/valueProcess.js
 create mode 100644 entity/Ticket_entity/Ticket_entity.aod
 rename entity/{Task_entity => Ticket_entity}/entityfields/attributes/children/displaysimplename_param/valueProcess.js (100%)
 rename entity/{Task_entity => Ticket_entity}/entityfields/attributes/children/filteredattributeids_param/valueProcess.js (51%)
 create mode 100644 entity/Ticket_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js
 rename entity/{Task_entity => Ticket_entity}/entityfields/attributes/children/objecttype_param/valueProcess.js (100%)
 rename entity/{Task_entity => Ticket_entity}/entityfields/attributes/children/showempty_param/valueProcess.js (100%)
 rename entity/{Task_entity => Ticket_entity}/entityfields/attributes/onValidation.js (100%)
 rename entity/{Task_entity => Ticket_entity}/entityfields/attributes/stateProcess.js (77%)
 create mode 100644 entity/Ticket_entity/entityfields/code/displayValueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/code/valueProcess.js
 rename entity/{Task_entity/entityfields/attributes/children/objectrowid_param => Ticket_entity/entityfields/documents/children/assignmentrowid_param}/valueProcess.js (55%)
 create mode 100644 entity/Ticket_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/filteronlyownticket_param/valueProcess.js
 rename entity/{Task_entity/entityfields/keywordtypes => Ticket_entity/entityfields/keywordprogress}/children/containername_param/valueProcess.js (63%)
 create mode 100644 entity/Ticket_entity/entityfields/links/children/taskid_param/valueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/maindocuments/children/assignmentrowid_param/valueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/maindocuments/children/assignmenttable_param/valueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/maindocuments/stateProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_editor_contact_id/displayValueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_id/valueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_maturity_date/valueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_priority/displayValueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_priority/valueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_priority_icon/colorProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_priority_icon/valueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_progress/displayValueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_progress/valueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_requestor_contact_id/displayValueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_requestor_contact_id/valueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_start_date/valueProcess.js
 rename entity/{Task_entity/entityfields/type => Ticket_entity/entityfields/task_status}/displayValueProcess.js (50%)
 create mode 100644 entity/Ticket_entity/entityfields/task_status/valueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_subject_details/valueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_taskid/valueProcess.js
 create mode 100644 entity/Ticket_entity/entityfields/task_type/valueProcess.js
 create mode 100644 entity/Ticket_entity/recordcontainers/db/conditionProcess.js
 create mode 100644 entity/Ticket_entity/recordcontainers/db/fromClauseProcess.js
 create mode 100644 entity/Ticket_entity/recordcontainers/db/onDBDelete.js
 create mode 100644 entity/Ticket_entity/recordcontainers/db/onDBInsert.js
 create mode 100644 entity/Ticket_entity/recordcontainers/db/orderClauseProcess.js
 create mode 100644 entity/Ticket_entity/recordcontainers/db/recordfieldmappings/editor_contact_id.displayvalue/expression.js
 rename entity/{Task_entity/recordcontainers/db/recordfieldmappings/type.displayvalue => Ticket_entity/recordcontainers/db/recordfieldmappings/priority.displayvalue}/expression.js (73%)
 create mode 100644 entity/Ticket_entity/recordcontainers/db/recordfieldmappings/progress.displayvalue/expression.js
 create mode 100644 entity/Ticket_entity/recordcontainers/db/recordfieldmappings/requestor_contact_id.displayvalue/expression.js
 create mode 100644 entity/Ticket_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
 create mode 100644 neonContext/Ticket/Ticket.aod
 delete mode 100644 neonView/TaskMainPreview_view/TaskMainPreview_view.aod
 create mode 100644 neonView/TicketEdit_view/TicketEdit_view.aod
 create mode 100644 neonView/TicketFilter_view/TicketFilter_view.aod
 create mode 100644 neonView/TicketMain_view/TicketMain_view.aod
 create mode 100644 neonView/TicketPreview_view/TicketPreview_view.aod

diff --git a/.liquibase/Data_alias/basic/2019.1.4/Ticketmanagement/create_Ticket_table.xml b/.liquibase/Data_alias/basic/2019.1.4/Ticketmanagement/create_Ticket_table.xml
new file mode 100644
index 0000000000..cbc82f51cf
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.1.4/Ticketmanagement/create_Ticket_table.xml
@@ -0,0 +1,16 @@
+<?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="j.hoermann" id="15176b40-4b5e-48a9-8dfc-4540b01595c8">
+        <createTable tableName="TICKET">
+            <column name="TICKETID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_TICKET_TICKETID"/>
+            </column>
+            <column name="TASK_ID" type="CHAR(36)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="CODE" type="INTEGER"/>
+        </createTable>
+        
+        <dropColumn tableName="TASK" columnName="CODE"/>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2019.1.4/Ticketmanagement/insert_TaskType_Task.xml b/.liquibase/Data_alias/basic/2019.1.4/Ticketmanagement/insert_TaskType_Task.xml
index c9bafcf988..82f7e4d652 100644
--- a/.liquibase/Data_alias/basic/2019.1.4/Ticketmanagement/insert_TaskType_Task.xml
+++ b/.liquibase/Data_alias/basic/2019.1.4/Ticketmanagement/insert_TaskType_Task.xml
@@ -60,7 +60,7 @@
         <insert tableName="AB_KEYWORD_ENTRY">
             <column name="AB_KEYWORD_ENTRYID" value="2ef84e0e-988a-44b4-9d14-3461555d2f18"/>
             <column name="KEYID" value="f3da0edd-49d9-4061-98c1-8fda8631be7e"/>
-            <column name="TITLE" value="Complaint"/>
+            <column name="TITLE" value="Ticket"/>
             <column name="CONTAINER" value="TaskType"/>
             <column name="SORTING" valueNumeric="1"/>
             <column name="ISACTIVE" valueNumeric="1"/>
diff --git a/.liquibase/Data_alias/basic/2019.1.4/changelog.xml b/.liquibase/Data_alias/basic/2019.1.4/changelog.xml
index a6fcf7a25d..6a95ddfc9b 100644
--- a/.liquibase/Data_alias/basic/2019.1.4/changelog.xml
+++ b/.liquibase/Data_alias/basic/2019.1.4/changelog.xml
@@ -194,7 +194,8 @@
     <include relativeToChangelogFile="true" file="Ticketmanagement/insertTicketAttributes_TaskType_Task.xml"/>
     <include relativeToChangelogFile="true" file="Ticketmanagement/insert_TaskType_Task.xml"/>
     <include relativeToChangelogFile="true" file="Ticketmanagement/update_TaskStatus_add_icon_and_new_status.xml"/>
-    
+    <include relativeToChangelogFile="true" file="Ticketmanagement/create_Ticket_table.xml"/>
+
     <include relativeToChangelogFile="true" file="longerProductName_Code.xml"/>
     
     <include relativeToChangelogFile="true" file="BulkMail/create_bulkmail.xml"/>
diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index 5974f4083e..54e741e474 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -5095,27 +5095,6 @@
                 <title>Task Id</title>
                 <description></description>
               </entityFieldDb>
-              <entityFieldDb>
-                <name>CODE</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="4" />
-                <size v="10" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="true" />
-                <documentation></documentation>
-                <title>task number</title>
-                <description></description>
-                <customProperties>
-                  <customBooleanProperty>
-                    <name>log</name>
-                    <global v="false" />
-                    <property v="true" />
-                  </customBooleanProperty>
-                </customProperties>
-              </entityFieldDb>
               <entityFieldDb>
                 <name>STATUS</name>
                 <dbName></dbName>
@@ -9958,6 +9937,68 @@
               </entityFieldDb>
             </entityFields>
           </entityDb>
+          <entityDb>
+            <name>TICKET</name>
+            <dbName></dbName>
+            <idColumn>TICKETID</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>CODE</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>TICKETID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TASK_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <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>
+            </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 11bf4ef5b6..c974800c2b 100644
--- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod
+++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod
@@ -116,6 +116,30 @@
           </entityNode>
         </childNodes>
       </entityNode>
+      <entityNode>
+        <name>Group</name>
+        <kind v="123" />
+        <title>Support</title>
+        <childNodes>
+          <entityNode>
+            <name>Group6</name>
+            <kind v="123" />
+            <title></title>
+            <childNodes>
+              <entityNode>
+                <name>Ticket</name>
+                <kind v="10077" />
+                <title></title>
+              </entityNode>
+              <entityNode>
+                <name>INTERNAL_ADMINISTRATOR</name>
+                <kind v="159" />
+                <title></title>
+              </entityNode>
+            </childNodes>
+          </entityNode>
+        </childNodes>
+      </entityNode>
       <entityNode>
         <name>ADMINISTRATION</name>
         <kind v="123" />
diff --git a/entity/AttributeRelation_entity/AttributeRelation_entity.aod b/entity/AttributeRelation_entity/AttributeRelation_entity.aod
index 5ef3a51482..294f3f2322 100644
--- a/entity/AttributeRelation_entity/AttributeRelation_entity.aod
+++ b/entity/AttributeRelation_entity/AttributeRelation_entity.aod
@@ -229,12 +229,6 @@
           <fieldName>AttributeConditions</fieldName>
           <isConsumer v="false" />
         </entityDependency>
-        <entityDependency>
-          <name>fc4a1e51-6bdb-46dd-9ffc-a45480051d28</name>
-          <entityName>Task_entity</entityName>
-          <fieldName>Attributes</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/Attribute_entity/afterUiInit.js b/entity/Attribute_entity/afterUiInit.js
index 9c97441ea2..6a175be075 100644
--- a/entity/Attribute_entity/afterUiInit.js
+++ b/entity/Attribute_entity/afterUiInit.js
@@ -1,27 +1,28 @@
-import("system.util");
-import("system.db");
-import("system.neon");
-import("system.vars");
-import("Context_lib");
-import("Attribute_lib");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW 
-    && vars.get("$field.ATTRIBUTE_TYPE").trim() != $AttributeTypes.COMBOVALUE
-    && vars.exists("$param.AttrParentId_param") && vars.get("$param.AttrParentId_param"))
-{
-    var parentId = vars.get("$param.AttrParentId_param");
-    var attributeId = vars.get("$field.UID");
-
-    var usageSql = SqlCondition.begin()
-        .andPrepare("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", parentId)
-        .buildSql("select OBJECT_TYPE from AB_ATTRIBUTEUSAGE", "1=0");
-    var usages = db.array(db.COLUMN, usageSql);
-
-    //preset the usages with the ones from the parent
-    usages.forEach(function (usage) 
-    {
-        neon.addRecord("AttributeUsages", {
-            "OBJECT_TYPE" : usage
-        });
-    });
+import("Sql_lib");
+import("system.util");
+import("system.db");
+import("system.neon");
+import("system.vars");
+import("Context_lib");
+import("Attribute_lib");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW 
+    && vars.get("$field.ATTRIBUTE_TYPE").trim() != $AttributeTypes.COMBOVALUE
+    && vars.exists("$param.AttrParentId_param") && vars.get("$param.AttrParentId_param"))
+{
+    var parentId = vars.get("$param.AttrParentId_param");
+    var attributeId = vars.get("$field.UID");
+
+    var usageSql = SqlCondition.begin()
+        .andPrepare("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", parentId)
+        .buildSql("select OBJECT_TYPE from AB_ATTRIBUTEUSAGE", "1=0");
+    var usages = db.array(db.COLUMN, usageSql);
+
+    //preset the usages with the ones from the parent
+    usages.forEach(function (usage) 
+    {
+        neon.addRecord("AttributeUsages", {
+            "OBJECT_TYPE" : usage
+        });
+    });
 }
\ No newline at end of file
diff --git a/entity/DocumentTemplateLink_entity/entityfields/documenttemplate_id_child/displayValueProcess.js b/entity/DocumentTemplateLink_entity/entityfields/documenttemplate_id_child/displayValueProcess.js
index c39c4f940d..fd9bb084f5 100644
--- a/entity/DocumentTemplateLink_entity/entityfields/documenttemplate_id_child/displayValueProcess.js
+++ b/entity/DocumentTemplateLink_entity/entityfields/documenttemplate_id_child/displayValueProcess.js
@@ -1,13 +1,14 @@
-import("system.result");
-import("system.db");
-import("system.vars");
-import("Contact_lib");
-
-var documenttemplatename = "";
-var documenttemplateId = vars.get("$field.DOCUMENTTEMPLATE_ID_CHILD");
-
-documenttemplatename = db.cell(SqlCondition.begin()
-                                  .andPrepare("DOCUMENTTEMPLATE.DOCUMENTTEMPLATEID", documenttemplateId)
-                                  .buildSql("select DOCUMENTTEMPLATE.NAME from DOCUMENTTEMPLATE"));
-
+import("Sql_lib");
+import("system.result");
+import("system.db");
+import("system.vars");
+import("Contact_lib");
+
+var documenttemplatename = "";
+var documenttemplateId = vars.get("$field.DOCUMENTTEMPLATE_ID_CHILD");
+
+documenttemplatename = db.cell(SqlCondition.begin()
+                                  .andPrepare("DOCUMENTTEMPLATE.DOCUMENTTEMPLATEID", documenttemplateId)
+                                  .buildSql("select DOCUMENTTEMPLATE.NAME from DOCUMENTTEMPLATE"));
+
 result.string(documenttemplatename);
\ No newline at end of file
diff --git a/entity/Employee_entity/recordcontainers/jdito/onUpdate.js b/entity/Employee_entity/recordcontainers/jdito/onUpdate.js
index 6553a5d7c8..ac20df00f1 100644
--- a/entity/Employee_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/Employee_entity/recordcontainers/jdito/onUpdate.js
@@ -1,38 +1,39 @@
-import("system.db");
-import("system.vars");
-import("system.tools");
-import("Person_lib");
-import("Entity_lib");
-
-// TODO: this is a workaround for missing possibility to react on changes of fields not connected to record Contqainer #1030023
-FieldChanges.assimilateChangeAndDispose("$field.IMAGE", function (state, value)
-{
-    var personId = db.cell(SqlCondition.begin()
-        .andPrepareVars("CONTACT.CONTACTID", "$field.CONTACT_ID")
-        .buildSql("select PERSON_ID from CONTACT")
-    );
-    if (state == FieldChanges.STATE_CHANGED())
-        PersUtils.setImage(personId, value);
-    else
-        PersUtils.removeImage(personId);
-});
-
-var user = tools.getUserByAttribute(tools.NAME, vars.get("$field.UID"));
-
-user[tools.TITLE] = vars.get("$field.TITLE");
-user[tools.PARAMS][tools.ISACTIVE] = vars.get("$field.ISACTIVE");
-user[tools.PARAMS][tools.FIRSTNAME] = vars.get("$field.FIRSTNAME");
-user[tools.PARAMS][tools.LASTNAME] = vars.get("$field.LASTNAME");
-user[tools.PARAMS][tools.EMAIL] = vars.get("$field.EMAIL_ADDRESS");
-user[tools.PARAMS][tools.CALENDARID] = vars.get("$field.EMAIL_ADDRESS");
-user[tools.PARAMS][tools.CONTACTID] = vars.get("$field.CONTACT_ID");
-user[tools.PARAMS][tools.DESCRIPTION] = vars.get("$field.DESCRIPTION");
-user[tools.PARAMS].department = vars.get("$field.DEPARTMENT");
-
-if (vars.exists("$param.PasswordChange_param") && vars.get("$param.PasswordChange_param") 
-    && vars.get("$field.PASSWORD") == vars.get("$field.CONFIRM_PASSWORD"))
-{
-    user[tools.PASSWORD] = vars.getString("$field.PASSWORD");
-}
-
+import("Sql_lib");
+import("system.db");
+import("system.vars");
+import("system.tools");
+import("Person_lib");
+import("Entity_lib");
+
+// TODO: this is a workaround for missing possibility to react on changes of fields not connected to record Contqainer #1030023
+FieldChanges.assimilateChangeAndDispose("$field.IMAGE", function (state, value)
+{
+    var personId = db.cell(SqlCondition.begin()
+        .andPrepareVars("CONTACT.CONTACTID", "$field.CONTACT_ID")
+        .buildSql("select PERSON_ID from CONTACT")
+    );
+    if (state == FieldChanges.STATE_CHANGED())
+        PersUtils.setImage(personId, value);
+    else
+        PersUtils.removeImage(personId);
+});
+
+var user = tools.getUserByAttribute(tools.NAME, vars.get("$field.UID"));
+
+user[tools.TITLE] = vars.get("$field.TITLE");
+user[tools.PARAMS][tools.ISACTIVE] = vars.get("$field.ISACTIVE");
+user[tools.PARAMS][tools.FIRSTNAME] = vars.get("$field.FIRSTNAME");
+user[tools.PARAMS][tools.LASTNAME] = vars.get("$field.LASTNAME");
+user[tools.PARAMS][tools.EMAIL] = vars.get("$field.EMAIL_ADDRESS");
+user[tools.PARAMS][tools.CALENDARID] = vars.get("$field.EMAIL_ADDRESS");
+user[tools.PARAMS][tools.CONTACTID] = vars.get("$field.CONTACT_ID");
+user[tools.PARAMS][tools.DESCRIPTION] = vars.get("$field.DESCRIPTION");
+user[tools.PARAMS].department = vars.get("$field.DEPARTMENT");
+
+if (vars.exists("$param.PasswordChange_param") && vars.get("$param.PasswordChange_param") 
+    && vars.get("$field.PASSWORD") == vars.get("$field.CONFIRM_PASSWORD"))
+{
+    user[tools.PASSWORD] = vars.getString("$field.PASSWORD");
+}
+
 tools.updateUser(user);
\ No newline at end of file
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index 2835626afa..e823443fa8 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -171,12 +171,6 @@
           <fieldName>KeywordGenders</fieldName>
           <isConsumer v="false" />
         </entityDependency>
-        <entityDependency>
-          <name>001e0934-0920-4b38-afff-caf299e96abf</name>
-          <entityName>Task_entity</entityName>
-          <fieldName>KeywordTypes</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
         <entityDependency>
           <name>8d28f08b-675d-4bcf-9318-a508d45ca69e</name>
           <entityName>Task_entity</entityName>
diff --git a/entity/Offer_entity/entityfields/anycontacts/children/contactid_param/valueProcess.js b/entity/Offer_entity/entityfields/anycontacts/children/contactid_param/valueProcess.js
index c41e20315c..36e83de504 100644
--- a/entity/Offer_entity/entityfields/anycontacts/children/contactid_param/valueProcess.js
+++ b/entity/Offer_entity/entityfields/anycontacts/children/contactid_param/valueProcess.js
@@ -1,3 +1,4 @@
+import("Context_lib");
 import("system.result");
 import("system.vars");
 
diff --git a/entity/TaskLink_entity/TaskLink_entity.aod b/entity/TaskLink_entity/TaskLink_entity.aod
index 81535cc226..c44b974a11 100644
--- a/entity/TaskLink_entity/TaskLink_entity.aod
+++ b/entity/TaskLink_entity/TaskLink_entity.aod
@@ -42,6 +42,12 @@
           <fieldName>Links</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>96ab81b2-20d1-4e30-8563-4b06d8406269</name>
+          <entityName>Ticket_entity</entityName>
+          <fieldName>Links</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/Task_entity/Task_entity.aod b/entity/Task_entity/Task_entity.aod
index 03fd7028b4..0a910115e6 100644
--- a/entity/Task_entity/Task_entity.aod
+++ b/entity/Task_entity/Task_entity.aod
@@ -16,16 +16,6 @@
       <name>#PROVIDER</name>
       <recordContainer>db</recordContainer>
     </entityProvider>
-    <entityField>
-      <name>CODE</name>
-      <title>task number</title>
-      <contentType>NUMBER</contentType>
-      <outputFormat>0000000</outputFormat>
-      <inputFormat>0000000</inputFormat>
-      <searchable v="false" />
-      <state>DISABLED</state>
-      <stateProcess>%aditoprj%/entity/Task_entity/entityfields/code/stateProcess.js</stateProcess>
-    </entityField>
     <entityField>
       <name>SUBJECT</name>
       <title>subject</title>
@@ -34,7 +24,6 @@
     <entityField>
       <name>STATUS</name>
       <title>{$TASK_STATUS}</title>
-      <colorProcess>%aditoprj%/entity/Task_entity/entityfields/status/colorProcess.js</colorProcess>
       <consumer>KeywordStates</consumer>
       <groupable v="true" />
       <mandatory v="true" />
@@ -85,16 +74,6 @@
       <inputFormat>dd.MM.yyyy HH:mm</inputFormat>
       <valueProcess>%aditoprj%/entity/Task_entity/entityfields/maturity_date/valueProcess.js</valueProcess>
     </entityField>
-    <entityField>
-      <name>TYPE</name>
-      <title>type</title>
-      <consumer>KeywordTypes</consumer>
-      <groupable v="true" />
-      <searchable v="true" />
-      <state>READONLY</state>
-      <valueProcess>%aditoprj%/entity/Task_entity/entityfields/type/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/Task_entity/entityfields/type/displayValueProcess.js</displayValueProcess>
-    </entityField>
     <entityField>
       <name>DESCRIPTION</name>
       <title>description</title>
@@ -169,25 +148,6 @@
           <valueProcess>%aditoprj%/entity/Task_entity/entityfields/keywordstates/children/containername_param/valueProcess.js</valueProcess>
           <expose v="false" />
         </entityParameter>
-        <entityParameter>
-          <name>WhitelistIds_param</name>
-          <valueProcess>%aditoprj%/entity/Task_entity/entityfields/keywordstates/children/whitelistids_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordTypes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>ContainerName_param</name>
-          <valueProcess>%aditoprj%/entity/Task_entity/entityfields/keywordtypes/children/containername_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
       </children>
     </entityConsumer>
     <entityConsumer>
@@ -453,43 +413,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityConsumer>
-      <name>Attributes</name>
-      <stateProcess>%aditoprj%/entity/Task_entity/entityfields/attributes/stateProcess.js</stateProcess>
-      <onValidation>%aditoprj%/entity/Task_entity/entityfields/attributes/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>ObjectRowId_param</name>
-          <valueProcess>%aditoprj%/entity/Task_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>ObjectType_param</name>
-          <valueProcess>%aditoprj%/entity/Task_entity/entityfields/attributes/children/objecttype_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>ShowEmpty_param</name>
-          <valueProcess>%aditoprj%/entity/Task_entity/entityfields/attributes/children/showempty_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>FilteredAttributeIds_param</name>
-          <valueProcess>%aditoprj%/entity/Task_entity/entityfields/attributes/children/filteredattributeids_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>DisplaySimpleName_param</name>
-          <valueProcess>%aditoprj%/entity/Task_entity/entityfields/attributes/children/displaysimplename_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
-    <entityParameter>
-      <name>Type_param</name>
-      <valueProcess>%aditoprj%/entity/Task_entity/entityfields/type_param/valueProcess.js</valueProcess>
-      <expose v="true" />
-    </entityParameter>
     <entityActionGroup>
       <name>tableActions</name>
       <children>
@@ -509,6 +432,10 @@
         </entityActionField>
       </children>
     </entityActionGroup>
+    <entityField>
+      <name>TYPE</name>
+      <valueProcess>%aditoprj%/entity/Task_entity/entityfields/type/valueProcess.js</valueProcess>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -520,7 +447,7 @@
       <onDBDelete>%aditoprj%/entity/Task_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
       <linkInformation>
         <linkInformation>
-          <name>47e1b4a5-6901-48b0-85ba-bec39b86a2d7</name>
+          <name>6dfe6f25-2b83-413b-89e4-5c5b9839be2e</name>
           <tableName>TASK</tableName>
           <primaryKey>TASKID</primaryKey>
           <isUIDTable v="true" />
@@ -528,10 +455,6 @@
         </linkInformation>
       </linkInformation>
       <recordFieldMappings>
-        <dbRecordFieldMapping>
-          <name>CODE.value</name>
-          <recordfield>TASK.CODE</recordfield>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>DESCRIPTION.value</name>
           <recordfield>TASK.DESCRIPTION</recordfield>
@@ -572,10 +495,6 @@
           <name>TASKID.value</name>
           <recordfield>TASK.TASKID</recordfield>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>TYPE.value</name>
-          <recordfield>TASK.TYPE</recordfield>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>EDITOR_CONTACT_ID.displayValue</name>
           <expression>%aditoprj%/entity/Task_entity/recordcontainers/db/recordfieldmappings/editor_contact_id.displayvalue/expression.js</expression>
@@ -584,10 +503,6 @@
           <name>REQUESTOR_CONTACT_ID.displayValue</name>
           <expression>%aditoprj%/entity/Task_entity/recordcontainers/db/recordfieldmappings/requestor_contact_id.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>TYPE.displayValue</name>
-          <expression>%aditoprj%/entity/Task_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js</expression>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>PARENT_CONTEXT.value</name>
           <recordfield>TASK.PARENT_CONTEXT</recordfield>
@@ -612,6 +527,10 @@
           <name>STATUS.displayValue</name>
           <expression>%aditoprj%/entity/Task_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TYPE.value</name>
+          <recordfield>TASK.TYPE</recordfield>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/Task_entity/entityfields/code/stateProcess.js b/entity/Task_entity/entityfields/code/stateProcess.js
deleted file mode 100644
index b066ae31a4..0000000000
--- a/entity/Task_entity/entityfields/code/stateProcess.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import("system.neon");
-import("system.result");
-import("system.vars");
-import("ActivityTask_lib");
-
-if (TaskUtils.getShowCode(vars.get("$field.TYPE")))
-{
-    result.string(neon.COMPONENTSTATE_READONLY);
-}
-else
-{
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
-}
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/keywordstates/children/whitelistids_param/valueProcess.js b/entity/Task_entity/entityfields/keywordstates/children/whitelistids_param/valueProcess.js
deleted file mode 100644
index e9a933ca7e..0000000000
--- a/entity/Task_entity/entityfields/keywordstates/children/whitelistids_param/valueProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.vars");
-import("system.result");
-import("ActivityTask_lib");
-
-result.object(TaskUtils.getAvailableStatus(vars.get("$field.TYPE")));
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/maindocuments/children/assignmentrowid_param/valueProcess.js b/entity/Task_entity/entityfields/maindocuments/children/assignmentrowid_param/valueProcess.js
index 291121452f..c95f5ea0c8 100644
--- a/entity/Task_entity/entityfields/maindocuments/children/assignmentrowid_param/valueProcess.js
+++ b/entity/Task_entity/entityfields/maindocuments/children/assignmentrowid_param/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.result");
 import("system.vars");
 
-result.string(vars.get("$field.TASKID"));//TODO: sys.uid or similar?
\ No newline at end of file
+result.string(vars.get("$sys.uid"));
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/type/valueProcess.js b/entity/Task_entity/entityfields/type/valueProcess.js
index 5785a095c9..04149ad63a 100644
--- a/entity/Task_entity/entityfields/type/valueProcess.js
+++ b/entity/Task_entity/entityfields/type/valueProcess.js
@@ -6,5 +6,5 @@ import("KeywordRegistry_basic");
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
 {
     // Sets the type to "Task" as default value.
-    result.string(vars.get("$param.Type_param"));
+    result.string($KeywordRegistry.taskType$task());
 }
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/type_param/valueProcess.js b/entity/Task_entity/entityfields/type_param/valueProcess.js
deleted file mode 100644
index f1d6cdd9b2..0000000000
--- a/entity/Task_entity/entityfields/type_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("KeywordRegistry_basic");
-import("system.result");
-
-result.string($KeywordRegistry.taskType$Task());
\ No newline at end of file
diff --git a/entity/Task_entity/recordcontainers/db/conditionProcess.js b/entity/Task_entity/recordcontainers/db/conditionProcess.js
index 1aa0331dad..8169552d13 100644
--- a/entity/Task_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Task_entity/recordcontainers/db/conditionProcess.js
@@ -1,29 +1,39 @@
-import("Employee_lib");
-import("system.vars");
-import("system.db");
-import("system.result");
-import("Sql_lib");
-
-var cond = new SqlCondition();
-var alternativeFallbackCondition = "1 = 1";
-
-if (vars.getString("$param.FilterOnlyOwnTask_param") == "true")
-{
-    var ownContactId = EmployeeUtils.getCurrentContactId();
-    if (ownContactId)
-        cond.andPrepareIfSet("TASK.EDITOR_CONTACT_ID", ownContactId);
-    else
-        alternativeFallbackCondition = "1 = 2";
-}
-if (vars.exists("$param.RowId_param") && vars.get("$param.RowId_param") && vars.exists("$param.ObjectId_param") && vars.get("$param.ObjectId_param"))
-{
-    var activityLinkCond = SqlCondition.begin().andPrepareVars("TASKLINK.OBJECT_ROWID", "$param.RowId_param")
-                                               .andPrepareVars("TASKLINK.OBJECT_TYPE", "$param.ObjectId_param");
-
-                                                            // TODO: more performant way than IN. Maybe a join?
-    cond.and(db.translateStatement(activityLinkCond.buildSql("TASK.TASKID in (select TASKLINK.TASK_ID from TASKLINK", "1=2", ")")))
-}
-
-//TODO: use a preparedCondition when available #1030812 #1034026
-var resCond = db.translateCondition(cond.build(alternativeFallbackCondition));
-result.string(resCond);
+import("Employee_lib");
+import("system.vars");
+import("system.db");
+import("system.result");
+import("Sql_lib");
+import("KeywordRegistry_basic");
+
+var cond = new SqlCondition();
+cond.andPrepare("TASK.TYPE", $KeywordRegistry.taskType$task())
+
+var loadNothing = false;
+
+if (vars.getString("$param.FilterOnlyOwnTask_param") == "true")
+{
+    var ownContactId = EmployeeUtils.getCurrentContactId();
+    if (ownContactId)
+        cond.andPrepareIfSet("TASK.EDITOR_CONTACT_ID", ownContactId);
+    else
+        loadNothing = true;
+}
+if (vars.exists("$param.RowId_param") && vars.get("$param.RowId_param") && vars.exists("$param.ObjectId_param") && vars.get("$param.ObjectId_param"))
+{
+    var activityLinkCond = SqlCondition.begin().andPrepareVars("TASKLINK.OBJECT_ROWID", "$param.RowId_param")
+                                               .andPrepareVars("TASKLINK.OBJECT_TYPE", "$param.ObjectId_param");
+
+                                                            // TODO: more performant way than IN. Maybe a join?
+    cond.and(db.translateStatement(activityLinkCond.buildSql("TASK.TASKID in (select TASKLINK.TASK_ID from TASKLINK", "1=2", ")")))
+}
+
+if (loadNothing)
+{
+    result.string("1=2");
+}
+else
+{
+    //TODO: use a preparedCondition when available #1030812 #1034026
+    var resCond = db.translateCondition(cond.build("1=1"));
+    result.string(resCond);
+}
\ No newline at end of file
diff --git a/entity/Ticket_entity/Ticket_entity.aod b/entity/Ticket_entity/Ticket_entity.aod
new file mode 100644
index 0000000000..2e14fc9038
--- /dev/null
+++ b/entity/Ticket_entity/Ticket_entity.aod
@@ -0,0 +1,349 @@
+<?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.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.8">
+  <name>Ticket_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>CODE</name>
+      <title>ticket number</title>
+      <contentType>NUMBER</contentType>
+      <outputFormat>0000000</outputFormat>
+      <inputFormat>0000000</inputFormat>
+      <searchable v="false" />
+      <state>DISABLED</state>
+      <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/code/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Ticket_entity/entityfields/code/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>TASK_SUBJECT</name>
+      <title>subject</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>TASK_STATUS</name>
+      <title>{$TICKET_STATUS}</title>
+      <consumer>KeywordStates</consumer>
+      <groupable v="true" />
+      <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_status/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_status/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>TASK_PRIORITY</name>
+      <title>Priority</title>
+      <consumer>KeywordPriorities</consumer>
+      <groupable v="true" />
+      <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_priority/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_priority/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>TASK_REQUESTOR_CONTACT_ID</name>
+      <title>{$TICKET_REQUESTOR}</title>
+      <consumer>ContactRequestors</consumer>
+      <linkedContext>Person</linkedContext>
+      <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_requestor_contact_id/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_requestor_contact_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>TASK_EDITOR_CONTACT_ID</name>
+      <title>{$TICKET_EDITOR}</title>
+      <consumer>ContactEditors</consumer>
+      <linkedContext>Person</linkedContext>
+      <displayValueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_editor_contact_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>TASK_START_DATE</name>
+      <title>Begin</title>
+      <contentType>DATE</contentType>
+      <resolution>MINUTE</resolution>
+      <outputFormat>dd.MM.yyyy HH:mm</outputFormat>
+      <inputFormat>dd.MM.yyyy HH:mm</inputFormat>
+      <groupable v="true" />
+      <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_start_date/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>TASK_MATURITY_DATE</name>
+      <title>Maturity</title>
+      <contentType>DATE</contentType>
+      <resolution>MINUTE</resolution>
+      <outputFormat>dd.MM.yyyy HH:mm</outputFormat>
+      <inputFormat>dd.MM.yyyy HH:mm</inputFormat>
+      <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_maturity_date/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>TASK_TYPE</name>
+      <title>type</title>
+      <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_type/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>TASK_DESCRIPTION</name>
+      <title>description</title>
+      <contentType>LONG_TEXT</contentType>
+    </entityField>
+    <entityField>
+      <name>TASK_TASKID</name>
+      <title>TASKID (UID)</title>
+      <mandatory v="true" />
+      <searchable v="false" />
+      <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_taskid/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>TASK_PRIORITY_ICON</name>
+      <colorProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_priority_icon/colorProcess.js</colorProcess>
+      <contentType>IMAGE</contentType>
+      <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_priority_icon/valueProcess.js</valueProcess>
+    </entityField>
+    <entityParameter>
+      <name>FilterOnlyOwnTicket_param</name>
+      <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/filteronlyownticket_param/valueProcess.js</valueProcess>
+    </entityParameter>
+    <entityConsumer>
+      <name>Links</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>TaskLink_entity</entityName>
+        <fieldName>Link</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>TaskId_param</name>
+          <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/links/children/taskid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Attributes</name>
+      <stateProcess>%aditoprj%/entity/Ticket_entity/entityfields/attributes/stateProcess.js</stateProcess>
+      <onValidation>%aditoprj%/entity/Ticket_entity/entityfields/attributes/onValidation.js</onValidation>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>AttributeRelations</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ObjectRowId_param</name>
+          <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/attributes/children/objecttype_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ShowEmpty_param</name>
+          <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/attributes/children/showempty_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>FilteredAttributeIds_param</name>
+          <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/attributes/children/filteredattributeids_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>DisplaySimpleName_param</name>
+          <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/attributes/children/displaysimplename_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>MainDocuments</name>
+      <stateProcess>%aditoprj%/entity/Ticket_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>AssignmentRowId_param</name>
+          <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/maindocuments/children/assignmentrowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>AssignmentTable_param</name>
+          <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/maindocuments/children/assignmenttable_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Documents</name>
+      <selectionMode>MULTI</selectionMode>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>AssignmentRowId_param</name>
+          <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>AssignmentTable_param</name>
+          <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>LogHistories</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>tablenames_param</name>
+          <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>TASK_PROGRESS</name>
+      <title>Progress</title>
+      <consumer>KeywordProgress</consumer>
+      <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_progress/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_progress/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>KeywordProgress</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/keywordprogress/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>TICKETTYPE</name>
+    </entityField>
+    <entityField>
+      <name>TICKETID</name>
+    </entityField>
+    <entityField>
+      <name>TASK_ID</name>
+      <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>TASK_SUBJECT_DETAILS</name>
+      <title>subject</title>
+      <linkedContext>Task</linkedContext>
+      <valueProcess>%aditoprj%/entity/Ticket_entity/entityfields/task_subject_details/valueProcess.js</valueProcess>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <alias>Data_alias</alias>
+      <isRequireContainerFiltering v="true" />
+      <fromClauseProcess>%aditoprj%/entity/Ticket_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
+      <conditionProcess>%aditoprj%/entity/Ticket_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <orderClauseProcess>%aditoprj%/entity/Ticket_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
+      <onDBInsert>%aditoprj%/entity/Ticket_entity/recordcontainers/db/onDBInsert.js</onDBInsert>
+      <onDBDelete>%aditoprj%/entity/Ticket_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
+      <linkInformation>
+        <linkInformation>
+          <name>ec5c2cd3-f05b-467f-88c6-c1d4d7de87cc</name>
+          <tableName>TICKET</tableName>
+          <primaryKey>TICKETID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+        <linkInformation>
+          <name>d73da2b3-bc44-4909-9bc0-9298cf57e7d7</name>
+          <tableName>TASK</tableName>
+          <primaryKey>TASKID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>CODE.value</name>
+          <recordfield>TICKET.CODE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_DESCRIPTION.value</name>
+          <recordfield>TASK.DESCRIPTION</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_EDITOR_CONTACT_ID.value</name>
+          <recordfield>TASK.EDITOR_CONTACT_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_MATURITY_DATE.value</name>
+          <recordfield>TASK.MATURITY_DATE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_PRIORITY.value</name>
+          <recordfield>TASK.PRIORITY</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_REQUESTOR_CONTACT_ID.value</name>
+          <recordfield>TASK.REQUESTOR_CONTACT_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_START_DATE.value</name>
+          <recordfield>TASK.START_DATE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_STATUS.value</name>
+          <recordfield>TASK.STATUS</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_SUBJECT.value</name>
+          <recordfield>TASK.SUBJECT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_EDITOR_CONTACT_ID.displayValue</name>
+          <expression>%aditoprj%/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/editor_contact_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_REQUESTOR_CONTACT_ID.displayValue</name>
+          <expression>%aditoprj%/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/requestor_contact_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_PRIORITY.displayValue</name>
+          <expression>%aditoprj%/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/priority.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_PROGRESS.value</name>
+          <recordfield>TASK.PROGRESS</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_PROGRESS.displayValue</name>
+          <expression>%aditoprj%/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/progress.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_STATUS.displayValue</name>
+          <expression>%aditoprj%/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_TYPE.value</name>
+          <recordfield>TASK.TYPE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_ID.value</name>
+          <recordfield>TICKET.TASK_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_TASKID.value</name>
+          <recordfield>TASK.TASKID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TICKETID.value</name>
+          <recordfield>TICKET.TICKETID</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/Task_entity/entityfields/attributes/children/displaysimplename_param/valueProcess.js b/entity/Ticket_entity/entityfields/attributes/children/displaysimplename_param/valueProcess.js
similarity index 100%
rename from entity/Task_entity/entityfields/attributes/children/displaysimplename_param/valueProcess.js
rename to entity/Ticket_entity/entityfields/attributes/children/displaysimplename_param/valueProcess.js
diff --git a/entity/Task_entity/entityfields/attributes/children/filteredattributeids_param/valueProcess.js b/entity/Ticket_entity/entityfields/attributes/children/filteredattributeids_param/valueProcess.js
similarity index 51%
rename from entity/Task_entity/entityfields/attributes/children/filteredattributeids_param/valueProcess.js
rename to entity/Ticket_entity/entityfields/attributes/children/filteredattributeids_param/valueProcess.js
index 47009a5424..a6ce85b4b1 100644
--- a/entity/Task_entity/entityfields/attributes/children/filteredattributeids_param/valueProcess.js
+++ b/entity/Ticket_entity/entityfields/attributes/children/filteredattributeids_param/valueProcess.js
@@ -2,4 +2,4 @@ import("system.vars");
 import("system.result");
 import("ActivityTask_lib");
 
-result.object(TaskUtils.getTypeAttributes(vars.get("$field.TYPE")));
\ No newline at end of file
+result.object(TaskUtils.getTypeAttributes(vars.get("$field.TASK_TYPE")));
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js b/entity/Ticket_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js
new file mode 100644
index 0000000000..1e8cb5a212
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.TICKETID"))
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/attributes/children/objecttype_param/valueProcess.js b/entity/Ticket_entity/entityfields/attributes/children/objecttype_param/valueProcess.js
similarity index 100%
rename from entity/Task_entity/entityfields/attributes/children/objecttype_param/valueProcess.js
rename to entity/Ticket_entity/entityfields/attributes/children/objecttype_param/valueProcess.js
diff --git a/entity/Task_entity/entityfields/attributes/children/showempty_param/valueProcess.js b/entity/Ticket_entity/entityfields/attributes/children/showempty_param/valueProcess.js
similarity index 100%
rename from entity/Task_entity/entityfields/attributes/children/showempty_param/valueProcess.js
rename to entity/Ticket_entity/entityfields/attributes/children/showempty_param/valueProcess.js
diff --git a/entity/Task_entity/entityfields/attributes/onValidation.js b/entity/Ticket_entity/entityfields/attributes/onValidation.js
similarity index 100%
rename from entity/Task_entity/entityfields/attributes/onValidation.js
rename to entity/Ticket_entity/entityfields/attributes/onValidation.js
diff --git a/entity/Task_entity/entityfields/attributes/stateProcess.js b/entity/Ticket_entity/entityfields/attributes/stateProcess.js
similarity index 77%
rename from entity/Task_entity/entityfields/attributes/stateProcess.js
rename to entity/Ticket_entity/entityfields/attributes/stateProcess.js
index 8c4ca0d7a0..7002f05bc9 100644
--- a/entity/Task_entity/entityfields/attributes/stateProcess.js
+++ b/entity/Ticket_entity/entityfields/attributes/stateProcess.js
@@ -3,7 +3,7 @@ import("system.vars");
 import("system.neon");
 import("ActivityTask_lib");
 
-if (TaskUtils.typeHasAttributes(vars.get("$field.TYPE")))
+if (TaskUtils.typeHasAttributes(vars.get("$field.TASK_TYPE")))
 {
     result.string(neon.COMPONENTSTATE_EDITABLE);
 }
diff --git a/entity/Ticket_entity/entityfields/code/displayValueProcess.js b/entity/Ticket_entity/entityfields/code/displayValueProcess.js
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/entity/Ticket_entity/entityfields/code/valueProcess.js b/entity/Ticket_entity/entityfields/code/valueProcess.js
new file mode 100644
index 0000000000..b3745b58d0
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/code/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string("-1");
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js b/entity/Ticket_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js
similarity index 55%
rename from entity/Task_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js
rename to entity/Ticket_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js
index 9bd2844554..c95f5ea0c8 100644
--- a/entity/Task_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js
+++ b/entity/Ticket_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js
@@ -1,4 +1,4 @@
-import("system.vars");
 import("system.result");
+import("system.vars");
 
-result.string(vars.get("$field.TASKID"))
\ No newline at end of file
+result.string(vars.get("$sys.uid"));
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js b/entity/Ticket_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js
new file mode 100644
index 0000000000..9f9b1dd3ca
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.vars");
+
+result.string("TICKET");
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/filteronlyownticket_param/valueProcess.js b/entity/Ticket_entity/entityfields/filteronlyownticket_param/valueProcess.js
new file mode 100644
index 0000000000..e0f3ec47e2
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/filteronlyownticket_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(false);
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/keywordtypes/children/containername_param/valueProcess.js b/entity/Ticket_entity/entityfields/keywordprogress/children/containername_param/valueProcess.js
similarity index 63%
rename from entity/Task_entity/entityfields/keywordtypes/children/containername_param/valueProcess.js
rename to entity/Ticket_entity/entityfields/keywordprogress/children/containername_param/valueProcess.js
index b139734c3e..b19308201a 100644
--- a/entity/Task_entity/entityfields/keywordtypes/children/containername_param/valueProcess.js
+++ b/entity/Ticket_entity/entityfields/keywordprogress/children/containername_param/valueProcess.js
@@ -2,4 +2,4 @@ import("system.result");
 import("Keyword_lib");
 import("KeywordRegistry_basic");
 
-result.string($KeywordRegistry.taskType());
+result.string($KeywordRegistry.taskProgress());
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/links/children/taskid_param/valueProcess.js b/entity/Ticket_entity/entityfields/links/children/taskid_param/valueProcess.js
new file mode 100644
index 0000000000..f8071b02f4
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/links/children/taskid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.TASK_TASKID"));
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js b/entity/Ticket_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js
new file mode 100644
index 0000000000..9dcf6c151f
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js
@@ -0,0 +1,10 @@
+import("system.vars");
+import("system.result");
+import("Context_lib");
+
+var res = [];
+res.push({id: vars.get("$field.TICKETID"), tableNames: ["TICKET"]});
+res.push({id: vars.get("$field.TASK_TASKID"), tableNames: ["TASK"]});
+
+res = JSON.stringify(res);//currently only strings  can be passed as param
+result.object(res);
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/maindocuments/children/assignmentrowid_param/valueProcess.js b/entity/Ticket_entity/entityfields/maindocuments/children/assignmentrowid_param/valueProcess.js
new file mode 100644
index 0000000000..c95f5ea0c8
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/maindocuments/children/assignmentrowid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.vars");
+
+result.string(vars.get("$sys.uid"));
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/maindocuments/children/assignmenttable_param/valueProcess.js b/entity/Ticket_entity/entityfields/maindocuments/children/assignmenttable_param/valueProcess.js
new file mode 100644
index 0000000000..09f18437ab
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/maindocuments/children/assignmenttable_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("TICKET");
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/maindocuments/stateProcess.js b/entity/Ticket_entity/entityfields/maindocuments/stateProcess.js
new file mode 100644
index 0000000000..5458354c9a
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/maindocuments/stateProcess.js
@@ -0,0 +1,14 @@
+import("system.result");
+import("system.db");
+import("system.vars");
+import("system.neon");
+import("Sql_lib");
+
+if (0 == db.getBinaryCount("TASK", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getSystemAlias(), "MAINDOCUMENT"))
+{
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
+else
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+}
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/task_editor_contact_id/displayValueProcess.js b/entity/Ticket_entity/entityfields/task_editor_contact_id/displayValueProcess.js
new file mode 100644
index 0000000000..0dde82e772
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_editor_contact_id/displayValueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.vars");
+import("Contact_lib");
+
+var id = vars.get("$this.value");
+//show the simpel title since this will be later an employee-entry and therefore no organisation is needed
+var title = ContactUtils.getTitleByContactId(id);
+result.string(title);
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/task_id/valueProcess.js b/entity/Ticket_entity/entityfields/task_id/valueProcess.js
new file mode 100644
index 0000000000..48fc3a1ef5
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_id/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(vars.get("$field.TASK_TASKID"));
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/task_maturity_date/valueProcess.js b/entity/Ticket_entity/entityfields/task_maturity_date/valueProcess.js
new file mode 100644
index 0000000000..f86620cd5d
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_maturity_date/valueProcess.js
@@ -0,0 +1,12 @@
+import("system.eMath");
+import("system.datetime");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+{
+    var startDate = vars.get("$field.TASK_START_DATE");
+    var presetVal = eMath.addInt(startDate, datetime.ONE_WEEK);
+    result.string(presetVal);
+}
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/task_priority/displayValueProcess.js b/entity/Ticket_entity/entityfields/task_priority/displayValueProcess.js
new file mode 100644
index 0000000000..7828c80c39
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_priority/displayValueProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+result.string(KeywordUtils.getViewValue($KeywordRegistry.taskPriority(), vars.get("$field.TASK_PRIORITY")));
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/task_priority/valueProcess.js b/entity/Ticket_entity/entityfields/task_priority/valueProcess.js
new file mode 100644
index 0000000000..0639e8287e
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_priority/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.util");
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("KeywordRegistry_basic");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string($KeywordRegistry.taskPriority$low());
diff --git a/entity/Ticket_entity/entityfields/task_priority_icon/colorProcess.js b/entity/Ticket_entity/entityfields/task_priority_icon/colorProcess.js
new file mode 100644
index 0000000000..d5381e94ed
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_priority_icon/colorProcess.js
@@ -0,0 +1,21 @@
+import("system.vars");
+import("KeywordRegistry_basic");
+import("system.result");
+import("system.neon");
+
+switch(vars.getString("$field.TASK_PRIORITY"))
+{
+    case $KeywordRegistry.taskPriority$none():
+        result.string(neon.PRIORITY_NONE_COLOR);
+        break;
+    case $KeywordRegistry.taskPriority$low():
+        result.string(neon.PRIORITY_LOW_COLOR);
+        break;
+    case $KeywordRegistry.taskPriority$medium():
+        result.string(neon.PRIORITY_MEDIUM_COLOR);
+        break;
+    case $KeywordRegistry.taskPriority$high():
+        result.string(neon.PRIORITY_HIGH_COLOR);
+        break;
+}
+
diff --git a/entity/Ticket_entity/entityfields/task_priority_icon/valueProcess.js b/entity/Ticket_entity/entityfields/task_priority_icon/valueProcess.js
new file mode 100644
index 0000000000..c8a46bd41b
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_priority_icon/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("ActivityTask_lib");
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string(TaskUtils.getStatusIcon(vars.getString("$field.TASK_STATUS")));
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/task_progress/displayValueProcess.js b/entity/Ticket_entity/entityfields/task_progress/displayValueProcess.js
new file mode 100644
index 0000000000..19faa7e8ce
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_progress/displayValueProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+result.string(KeywordUtils.getViewValue($KeywordRegistry.taskProgress(), vars.get("$field.TASK_PROGRESS")));
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/task_progress/valueProcess.js b/entity/Ticket_entity/entityfields/task_progress/valueProcess.js
new file mode 100644
index 0000000000..854d3c9429
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_progress/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.util");
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("KeywordRegistry_basic");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string($KeywordRegistry.taskProgress$0());
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/task_requestor_contact_id/displayValueProcess.js b/entity/Ticket_entity/entityfields/task_requestor_contact_id/displayValueProcess.js
new file mode 100644
index 0000000000..0dde82e772
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_requestor_contact_id/displayValueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.vars");
+import("Contact_lib");
+
+var id = vars.get("$this.value");
+//show the simpel title since this will be later an employee-entry and therefore no organisation is needed
+var title = ContactUtils.getTitleByContactId(id);
+result.string(title);
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/task_requestor_contact_id/valueProcess.js b/entity/Ticket_entity/entityfields/task_requestor_contact_id/valueProcess.js
new file mode 100644
index 0000000000..1e62e7551c
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_requestor_contact_id/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("Employee_lib");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(EmployeeUtils.getCurrentContactId());
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/task_start_date/valueProcess.js b/entity/Ticket_entity/entityfields/task_start_date/valueProcess.js
new file mode 100644
index 0000000000..5b098ba003
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_start_date/valueProcess.js
@@ -0,0 +1,12 @@
+import("system.datetime");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+{
+    var presetVal = datetime.date();
+    //TODO: depending on what happens in #1032274 we need to manually set the resolution to MINUTES or not (which means we've to set everything smaller than MINUTES (Seconds, etc.) to zero) 
+    presetVal = Math.floor(presetVal / datetime.ONE_MINUTE) * datetime.ONE_MINUTE;
+    result.string(presetVal);
+}
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/type/displayValueProcess.js b/entity/Ticket_entity/entityfields/task_status/displayValueProcess.js
similarity index 50%
rename from entity/Task_entity/entityfields/type/displayValueProcess.js
rename to entity/Ticket_entity/entityfields/task_status/displayValueProcess.js
index b8b8e7a4a3..e8f71e16db 100644
--- a/entity/Task_entity/entityfields/type/displayValueProcess.js
+++ b/entity/Ticket_entity/entityfields/task_status/displayValueProcess.js
@@ -1,6 +1,6 @@
-import("system.result");
-import("system.vars");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-result.string(KeywordUtils.getViewValue($KeywordRegistry.taskType(), vars.get("$field.TYPE")));
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.result");
+import("Keyword_lib");
+
+result.string(KeywordUtils.getViewValue($KeywordRegistry.taskStatus(), vars.get("$field.TASK_STATUS")));
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/task_status/valueProcess.js b/entity/Ticket_entity/entityfields/task_status/valueProcess.js
new file mode 100644
index 0000000000..d807ce33a0
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_status/valueProcess.js
@@ -0,0 +1,13 @@
+import("ActivityTask_lib");
+import("system.util");
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("KeywordRegistry_basic");
+import("Keyword_lib");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+{
+    var defaultState = TaskUtils.getDefaultStatus(vars.get("$field.TASK_TYPE"));
+    result.string(defaultState);
+}
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/task_subject_details/valueProcess.js b/entity/Ticket_entity/entityfields/task_subject_details/valueProcess.js
new file mode 100644
index 0000000000..575d44d113
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_subject_details/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+
+var responsible = vars.get("$field.TASK_EDITOR_CONTACT_ID.displayValue");
+result.string(vars.get("$field.TASK_SUBJECT") + (responsible ? " (" + responsible + ")" : ""));
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/task_taskid/valueProcess.js b/entity/Ticket_entity/entityfields/task_taskid/valueProcess.js
new file mode 100644
index 0000000000..4af99287f5
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_taskid/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.util");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(util.getNewUUID());
\ No newline at end of file
diff --git a/entity/Ticket_entity/entityfields/task_type/valueProcess.js b/entity/Ticket_entity/entityfields/task_type/valueProcess.js
new file mode 100644
index 0000000000..68c9898c51
--- /dev/null
+++ b/entity/Ticket_entity/entityfields/task_type/valueProcess.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+import("KeywordRegistry_basic");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+{
+    // Sets the type to "Task" as default value.
+    result.string($KeywordRegistry.taskType$ticket());
+}
\ No newline at end of file
diff --git a/entity/Ticket_entity/recordcontainers/db/conditionProcess.js b/entity/Ticket_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000..e5a38557f5
--- /dev/null
+++ b/entity/Ticket_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,42 @@
+import("system.logging");
+import("Employee_lib");
+import("system.vars");
+import("system.db");
+import("system.result");
+import("Sql_lib");
+import("KeywordRegistry_basic");
+
+var cond = new SqlCondition();
+cond.andPrepare("TASK.TYPE", $KeywordRegistry.taskType$ticket())
+
+var loadNothing = false;
+
+if (vars.getString("$param.FilterOnlyOwnTicket_param") == "true")
+{
+    var ownContactId = EmployeeUtils.getCurrentContactId();
+    if (ownContactId)
+        cond.andPrepareIfSet("TASK.EDITOR_CONTACT_ID", ownContactId);
+    else
+        loadNothing = true;
+}
+
+if (vars.exists("$param.RowId_param") && vars.get("$param.RowId_param") && vars.exists("$param.ObjectId_param") && vars.get("$param.ObjectId_param"))
+{
+    var activityLinkCond = SqlCondition.begin().andPrepareVars("TASKLINK.OBJECT_ROWID", "$param.RowId_param")
+                                               .andPrepareVars("TASKLINK.OBJECT_TYPE", "$param.ObjectId_param");
+
+                                                            // TODO: more performant way than IN. Maybe a join?
+    cond.and(db.translateStatement(activityLinkCond.buildSql("TASK.TASKID in (select TASKLINK.TASK_ID from TASKLINK", "1=2", ")")))
+}
+
+if (loadNothing) 
+{
+    result.string("1=2");
+}
+else
+{
+    //TODO: use a preparedCondition when available #1030812 #1034026
+    var resCond = db.translateCondition(cond.build("1=1"));
+    logging.log(resCond)
+    result.string(resCond);
+}
\ No newline at end of file
diff --git a/entity/Ticket_entity/recordcontainers/db/fromClauseProcess.js b/entity/Ticket_entity/recordcontainers/db/fromClauseProcess.js
new file mode 100644
index 0000000000..12885dc890
--- /dev/null
+++ b/entity/Ticket_entity/recordcontainers/db/fromClauseProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("TICKET left join TASK on TASK_ID = TASKID");
\ No newline at end of file
diff --git a/entity/Ticket_entity/recordcontainers/db/onDBDelete.js b/entity/Ticket_entity/recordcontainers/db/onDBDelete.js
new file mode 100644
index 0000000000..533e52691a
--- /dev/null
+++ b/entity/Ticket_entity/recordcontainers/db/onDBDelete.js
@@ -0,0 +1,9 @@
+import("system.logging");
+import("system.vars");
+import("system.db");
+import("Sql_lib");
+
+var condition = SqlCondition.begin()
+    .andPrepareVars("TASKLINK.TASK_ID", "$field.TASK_TASKID");
+logging.log("delete " + vars.get("$field.TASK_TASKID"))
+db.deleteData("TASKLINK", condition.build("1=2"));
\ No newline at end of file
diff --git a/entity/Ticket_entity/recordcontainers/db/onDBInsert.js b/entity/Ticket_entity/recordcontainers/db/onDBInsert.js
new file mode 100644
index 0000000000..0a2c2a214c
--- /dev/null
+++ b/entity/Ticket_entity/recordcontainers/db/onDBInsert.js
@@ -0,0 +1,6 @@
+import("Util_lib");
+import("system.vars");
+import("system.db");
+import("ActivityTask_lib")
+
+CodeUtils.setCode(vars.get("$field.TICKETID"), "TICKET", "TICKETID", "CODE");
\ No newline at end of file
diff --git a/entity/Ticket_entity/recordcontainers/db/orderClauseProcess.js b/entity/Ticket_entity/recordcontainers/db/orderClauseProcess.js
new file mode 100644
index 0000000000..e1eed9e6c1
--- /dev/null
+++ b/entity/Ticket_entity/recordcontainers/db/orderClauseProcess.js
@@ -0,0 +1,4 @@
+import("system.db");
+import("system.result");
+
+result.object({"TASK.MATURITY_DATE": db.DESCENDING});
\ No newline at end of file
diff --git a/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/editor_contact_id.displayvalue/expression.js b/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/editor_contact_id.displayvalue/expression.js
new file mode 100644
index 0000000000..e5961584dd
--- /dev/null
+++ b/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/editor_contact_id.displayvalue/expression.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Person_lib");
+
+//TODO: try to find a better solution for this -> #TITLE-mechanic when available
+var subSql = PersUtils.getResolvingDisplaySubSql("TASK.EDITOR_CONTACT_ID");
+result.string(subSql);
\ No newline at end of file
diff --git a/entity/Task_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js b/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/priority.displayvalue/expression.js
similarity index 73%
rename from entity/Task_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js
rename to entity/Ticket_entity/recordcontainers/db/recordfieldmappings/priority.displayvalue/expression.js
index 8f9ef6854e..0b2c6568c3 100644
--- a/entity/Task_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js
+++ b/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/priority.displayvalue/expression.js
@@ -2,5 +2,5 @@ import("system.result");
 import("Keyword_lib");
 import("KeywordRegistry_basic");
 
-var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.taskType(), "TASK.TYPE");
-result.string(sql);
+var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.taskPriority(), "TASK.PRIORITY");
+result.string(sql);
\ No newline at end of file
diff --git a/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/progress.displayvalue/expression.js b/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/progress.displayvalue/expression.js
new file mode 100644
index 0000000000..4666f51439
--- /dev/null
+++ b/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/progress.displayvalue/expression.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.taskProgress(), "TASK.PROGRESS");
+result.string(sql);
\ No newline at end of file
diff --git a/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/requestor_contact_id.displayvalue/expression.js b/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/requestor_contact_id.displayvalue/expression.js
new file mode 100644
index 0000000000..6c6d6087a2
--- /dev/null
+++ b/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/requestor_contact_id.displayvalue/expression.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Person_lib");
+
+//TODO: try to find a better solution for this -> #TITLE-mechanic when available
+var subSql = PersUtils.getResolvingDisplaySubSql("TASK.REQUESTOR_CONTACT_ID");
+result.string(subSql);
\ No newline at end of file
diff --git a/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
new file mode 100644
index 0000000000..7f15c2dfb2
--- /dev/null
+++ b/entity/Ticket_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
@@ -0,0 +1,2 @@
+// do not use this, because TaskUtils.getTypeStatusKeyword(vars.get("$field.TASK_TYPE")) has to be called, which is not possible in a subselect.
+// --> only use display value process
\ No newline at end of file
diff --git a/neonContext/Task/Task.aod b/neonContext/Task/Task.aod
index 73a85997d1..34cc2cb4de 100644
--- a/neonContext/Task/Task.aod
+++ b/neonContext/Task/Task.aod
@@ -1,34 +1,30 @@
-<?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.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
-  <name>Task</name>
-  <title>Task</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <documentation>%aditoprj%/neonContext/Task/documentation.adoc</documentation>
-  <mainview>TaskMain_view</mainview>
-  <filterview>TaskFilter_view</filterview>
-  <editview>TaskEdit_view</editview>
-  <preview>TaskPreview_view</preview>
-  <entity>Task_entity</entity>
-  <references>
-    <neonViewReference>
-      <name>5e6fdab4-8781-4e2d-af7a-755d834b631d</name>
-      <view>TaskFilter_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>7a4bcf0f-2861-4400-8fab-152c6a9ecb9b</name>
-      <view>TaskPreview_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>b9bd19b5-2a67-47a4-83cd-41ba30e81888</name>
-      <view>TaskEdit_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>83309ef0-d1c0-4f74-bb44-41fd8e054b4b</name>
-      <view>TaskMain_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>b2d84509-c72b-497e-9422-e4efae2e6b68</name>
-      <view>TaskMainPreview_view</view>
-    </neonViewReference>
-  </references>
-</neonContext>
+<?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.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
+  <name>Task</name>
+  <title>Task</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/neonContext/Task/documentation.adoc</documentation>
+  <mainview>TaskMain_view</mainview>
+  <filterview>TaskFilter_view</filterview>
+  <editview>TaskEdit_view</editview>
+  <preview>TaskPreview_view</preview>
+  <entity>Task_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>5e6fdab4-8781-4e2d-af7a-755d834b631d</name>
+      <view>TaskFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>7a4bcf0f-2861-4400-8fab-152c6a9ecb9b</name>
+      <view>TaskPreview_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>b9bd19b5-2a67-47a4-83cd-41ba30e81888</name>
+      <view>TaskEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>83309ef0-d1c0-4f74-bb44-41fd8e054b4b</name>
+      <view>TaskMain_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/Ticket/Ticket.aod b/neonContext/Ticket/Ticket.aod
new file mode 100644
index 0000000000..4d119be977
--- /dev/null
+++ b/neonContext/Ticket/Ticket.aod
@@ -0,0 +1,29 @@
+<?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.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
+  <name>Ticket</name>
+  <title>Ticket</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <mainview>TicketMain_view</mainview>
+  <filterview>TicketFilter_view</filterview>
+  <editview>TicketEdit_view</editview>
+  <preview>TicketPreview_view</preview>
+  <entity>Ticket_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>3191f35b-3dde-4912-b728-130fa1fc1b7e</name>
+      <view>TicketFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>f5c0ef30-deea-4a8b-a177-2f2052621ca3</name>
+      <view>TicketEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>a1830cdc-a1a1-4110-b666-7a74157f78fc</name>
+      <view>TicketMain_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>c290c5f1-53d3-4634-bf42-0de2ee89974c</name>
+      <view>TicketPreview_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonView/TaskEdit_view/TaskEdit_view.aod b/neonView/TaskEdit_view/TaskEdit_view.aod
index 4d44b6272b..d0995eb3ab 100644
--- a/neonView/TaskEdit_view/TaskEdit_view.aod
+++ b/neonView/TaskEdit_view/TaskEdit_view.aod
@@ -13,10 +13,6 @@
       <editMode v="true" />
       <entityField>#ENTITY</entityField>
       <fields>
-        <entityFieldLink>
-          <name>f8dcc490-1b86-47c3-88fa-8005f8e0095b</name>
-          <entityField>TYPE</entityField>
-        </entityFieldLink>
         <entityFieldLink>
           <name>fb5768fe-2dd2-45cd-8d21-f20af279f409</name>
           <entityField>SUBJECT</entityField>
@@ -64,10 +60,5 @@
       <entityField>Links</entityField>
       <view>TaskLinkMultiEdit_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>74f3f70d-c25f-455c-a619-593f569360a6</name>
-      <entityField>Attributes</entityField>
-      <view>AttributeRelationMultiEdit_view</view>
-    </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/TaskMainPreview_view/TaskMainPreview_view.aod b/neonView/TaskMainPreview_view/TaskMainPreview_view.aod
deleted file mode 100644
index efa23f33b6..0000000000
--- a/neonView/TaskMainPreview_view/TaskMainPreview_view.aod
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
-  <name>TaskMainPreview_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <headerFooterLayout>
-      <name>layout</name>
-      <header>Header</header>
-    </headerFooterLayout>
-  </layout>
-  <children>
-    <cardViewTemplate>
-      <name>Header</name>
-      <iconField>PRIORITY_ICON</iconField>
-      <titleField>SUBJECT</titleField>
-      <subtitleField>CODE</subtitleField>
-      <descriptionField>STATUS</descriptionField>
-      <favoriteAction1>newActivity</favoriteAction1>
-      <entityField>#ENTITY</entityField>
-    </cardViewTemplate>
-    <genericViewTemplate>
-      <name>Info</name>
-      <showDrawer v="true" />
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>f988850e-53ed-443d-bd3d-16946eba656e</name>
-          <entityField>START_DATE</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>dda6aefc-9d4f-4d93-9a45-bc97a278c050</name>
-          <entityField>MATURITY_DATE</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>a2c82cd5-6dcd-42aa-b650-85369f4e8d39</name>
-          <entityField>PROGRESS</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>ebdffed8-4999-4ec1-ac4d-c22514dfed0c</name>
-          <entityField>PRIORITY</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>05de9afc-429e-46a8-8e3b-2ff689ed090e</name>
-          <entityField>REQUESTOR_CONTACT_ID</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>bbf1a736-acf9-4b41-9df9-5675fc6d8943</name>
-          <entityField>EDITOR_CONTACT_ID</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-    <neonViewReference>
-      <name>c4f66270-1d64-4243-9561-fb5642cff3f1</name>
-      <entityField>Links</entityField>
-      <view>TaskLinkPreviewList_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
diff --git a/neonView/TaskMain_view/TaskMain_view.aod b/neonView/TaskMain_view/TaskMain_view.aod
index adf0d2c480..627f9530ba 100644
--- a/neonView/TaskMain_view/TaskMain_view.aod
+++ b/neonView/TaskMain_view/TaskMain_view.aod
@@ -48,10 +48,5 @@
       <entityField>#ENTITY</entityField>
       <view>TaskPreview_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>f45ff4cb-e469-46ee-808f-8c406eccbcd2</name>
-      <entityField>Attributes</entityField>
-      <view>AttributeRelationTree_view</view>
-    </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/TaskPreview_view/TaskPreview_view.aod b/neonView/TaskPreview_view/TaskPreview_view.aod
index 54a1ed4e5d..b6c5767452 100644
--- a/neonView/TaskPreview_view/TaskPreview_view.aod
+++ b/neonView/TaskPreview_view/TaskPreview_view.aod
@@ -13,8 +13,6 @@
       <name>Header</name>
       <iconField>PRIORITY_ICON</iconField>
       <titleField>SUBJECT</titleField>
-      <subtitleField>CODE</subtitleField>
-      <descriptionField>TYPE</descriptionField>
       <favoriteAction1>newActivity</favoriteAction1>
       <entityField>#ENTITY</entityField>
     </cardViewTemplate>
diff --git a/neonView/TicketEdit_view/TicketEdit_view.aod b/neonView/TicketEdit_view/TicketEdit_view.aod
new file mode 100644
index 0000000000..1dd2512b71
--- /dev/null
+++ b/neonView/TicketEdit_view/TicketEdit_view.aod
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
+  <name>TicketEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Edit</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>46ef8d86-47fc-495d-bd33-9cb43ea29b25</name>
+          <entityField>TASK_SUBJECT</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>60dc6a4c-78a0-4105-b679-e9ae280e9e9a</name>
+          <entityField>TASK_DESCRIPTION</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>7bc8570c-4bb2-4e37-9dd3-5661adf88fcb</name>
+          <entityField>TASK_START_DATE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>e8fdd5ff-4edf-46c4-96fb-9900695f6ca0</name>
+          <entityField>TASK_MATURITY_DATE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>a2eee9f8-a0fd-484f-b1ae-bc0f989a0e54</name>
+          <entityField>TASK_STATUS</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>05462ebf-04cb-407f-bc9e-56f016766ee1</name>
+          <entityField>TASK_PROGRESS</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>677a46e7-a846-4b84-8c31-2a888e7dd7f3</name>
+          <entityField>TASK_PRIORITY</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>58eb48d2-1ee1-4f55-a5e0-28b05cf8b8bf</name>
+          <entityField>TASK_REQUESTOR_CONTACT_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>c023e4ba-8779-4ca3-9bba-50bbc26b54f2</name>
+          <entityField>TASK_EDITOR_CONTACT_ID</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>135e702d-aa52-4787-9f05-6e9fa1569567</name>
+      <entityField>Links</entityField>
+      <view>TaskLinkMultiEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>5a61eda9-d71b-4b15-83f6-f4580a214876</name>
+      <entityField>Attributes</entityField>
+      <view>AttributeRelationMultiEdit_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/TicketFilter_view/TicketFilter_view.aod b/neonView/TicketFilter_view/TicketFilter_view.aod
new file mode 100644
index 0000000000..4bc66b93a8
--- /dev/null
+++ b/neonView/TicketFilter_view/TicketFilter_view.aod
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
+  <name>TicketFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <dashletConfigurations>
+    <neonDashletConfiguration>
+      <name>mytickets</name>
+      <title>My tasks</title>
+      <description>Show tasks where I am editor</description>
+      <fragment>Ticket/filter</fragment>
+      <singleton v="true" />
+      <requiresConfiguration v="false" />
+      <icon>VAADIN:TASKS</icon>
+      <categories>
+        <neonDashletCategory>
+          <name>tasks</name>
+          <title>Tickets</title>
+        </neonDashletCategory>
+      </categories>
+      <parameters>
+        <neonDashletParameter>
+          <name>FilterOnlyOwnTicket_param</name>
+          <value>true</value>
+        </neonDashletParameter>
+      </parameters>
+    </neonDashletConfiguration>
+  </dashletConfigurations>
+  <layout>
+    <groupLayout>
+      <name>layout</name>
+    </groupLayout>
+  </layout>
+  <children>
+    <timelineViewTemplate>
+      <name>TicketsTimeline</name>
+      <favoriteActionGroup1>tableActions</favoriteActionGroup1>
+      <dateField>TASK_MATURITY_DATE</dateField>
+      <titleField>TASK_SUBJECT</titleField>
+      <descriptionField>TASK_DESCRIPTION</descriptionField>
+      <iconIdField>TASK_PRIORITY_ICON</iconIdField>
+      <entityField>#ENTITY</entityField>
+    </timelineViewTemplate>
+    <tableViewTemplate>
+      <name>TicketsTable</name>
+      <favoriteActionGroup1>tableActions</favoriteActionGroup1>
+      <entityField>#ENTITY</entityField>
+      <title></title>
+      <columns>
+        <neonTableColumn>
+          <name>97c51024-1193-412a-a1e7-d5b4fe5ea1b3</name>
+          <entityField>TASK_PRIORITY_ICON</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>37366161-eeb1-4f2e-9e25-843e85f2c4b6</name>
+          <entityField>TASK_STATUS</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>077df121-a59b-48ab-9772-aa29fa0d7c1d</name>
+          <entityField>TASK_SUBJECT</entityField>
+          <expandRatio v="100" />
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>7e2dca2a-6a53-41cc-8dd7-a8ee370ff4de</name>
+          <entityField>TASK_REQUESTOR_CONTACT_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>fb4ad106-1d84-445b-ab4a-ac36b6e3b0c2</name>
+          <entityField>TASK_EDITOR_CONTACT_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>cf98ce13-f3c4-4c6b-8964-a7a5d17b05c2</name>
+          <entityField>TASK_PRIORITY</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>38ac59d8-ad7e-4e0f-85b8-6cba129ffabf</name>
+          <entityField>TASK_MATURITY_DATE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>7eb5fb76-7e83-4151-9364-28749712c58a</name>
+          <entityField>TASK_PROGRESS</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>2a20110d-0b42-4f47-9361-2256c5c5aad5</name>
+          <entityField>TASK_DESCRIPTION</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+    <treeTableViewTemplate>
+      <name>TicketsTreeTable</name>
+      <favoriteActionGroup1>tableActions</favoriteActionGroup1>
+      <defaultGroupFields>
+        <element>TYPE</element>
+      </defaultGroupFields>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>34e2d188-bf3e-4049-9094-2c68a2552fc9</name>
+          <entityField>TASK_PRIORITY_ICON</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>fce7d0f3-b045-4230-9adb-2c11716a1e39</name>
+          <entityField>TASK_SUBJECT</entityField>
+          <expandRatio v="100" />
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>32562679-18bb-4084-a2f5-eca18e0b91bb</name>
+          <entityField>TASK_PRIORITY</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>1be2b011-6759-4ba9-9ec1-6cc30db7f959</name>
+          <entityField>TASK_MATURITY_DATE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>33319779-919b-4672-aa0a-0e94f0d8c640</name>
+          <entityField>TASK_STATUS</entityField>
+        </neonTableColumn>
+      </columns>
+    </treeTableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/TicketMain_view/TicketMain_view.aod b/neonView/TicketMain_view/TicketMain_view.aod
new file mode 100644
index 0000000000..680fad48fa
--- /dev/null
+++ b/neonView/TicketMain_view/TicketMain_view.aod
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
+  <name>TicketMain_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <masterSlaveLayout>
+      <name>layout</name>
+      <master>bfecc398-890e-485f-afa0-74e24f41b019</master>
+    </masterSlaveLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>details</name>
+      <showDrawer v="true" />
+      <drawerCaption></drawerCaption>
+      <fixedDrawer v="true" />
+      <hideLabels v="false" />
+      <entityField>#ENTITY</entityField>
+      <title>details</title>
+      <fields>
+        <entityFieldLink>
+          <name>3f746e73-b8cd-4d08-b352-a2307e080410</name>
+          <entityField>TASK_DESCRIPTION</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>6846f680-84ef-46da-a0ea-6797044cf693</name>
+      <entityField>Documents</entityField>
+      <view>DocumentFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>ffa776bd-013c-4d4d-aedd-490625ef0fe1</name>
+      <entityField>LogHistories</entityField>
+      <view>LogHistoryFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>bfecc398-890e-485f-afa0-74e24f41b019</name>
+      <entityField>#ENTITY</entityField>
+      <view>TicketPreview_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>f45ff4cb-e469-46ee-808f-8c406eccbcd2</name>
+      <entityField>Attributes</entityField>
+      <view>AttributeRelationTree_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/TicketPreview_view/TicketPreview_view.aod b/neonView/TicketPreview_view/TicketPreview_view.aod
new file mode 100644
index 0000000000..b60429fe48
--- /dev/null
+++ b/neonView/TicketPreview_view/TicketPreview_view.aod
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
+  <name>TicketPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <header>Header</header>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <cardViewTemplate>
+      <name>Header</name>
+      <iconField>TASK_PRIORITY_ICON</iconField>
+      <titleField>TASK_SUBJECT</titleField>
+      <subtitleField>CODE</subtitleField>
+      <favoriteAction1>newActivity</favoriteAction1>
+      <entityField>#ENTITY</entityField>
+    </cardViewTemplate>
+    <genericViewTemplate>
+      <name>Info</name>
+      <showDrawer v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>afbb79a4-418f-44ba-892d-c41843e57416</name>
+          <entityField>TASK_STATUS</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>ffdd1606-4d33-4580-84bd-42b411d15168</name>
+          <entityField>TASK_START_DATE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>d419374d-e56b-40ce-9ded-e6214c8572f0</name>
+          <entityField>TASK_MATURITY_DATE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>f3d37da9-9104-4dff-9796-24ca81e26976</name>
+          <entityField>TASK_PROGRESS</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>f3d555e1-94f0-46d1-8d2e-0863c32f236c</name>
+          <entityField>TASK_PRIORITY</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>1f8a7860-d0f7-4f86-af23-382d82c062c2</name>
+          <entityField>TASK_REQUESTOR_CONTACT_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>9e2ef777-209c-4ad7-91e7-8422896ebc08</name>
+          <entityField>TASK_EDITOR_CONTACT_ID</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>0ad1cd97-a128-4b10-87f8-434fc72723bd</name>
+      <entityField>Links</entityField>
+      <view>TaskLinkPreviewList_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>b3f080e0-a1fb-42bd-ac4a-3788fb077b9c</name>
+      <entityField>MainDocuments</entityField>
+      <view>DocumentList_view</view>
+    </neonViewReference>
+    <genericViewTemplate>
+      <name>Description</name>
+      <showDrawer v="true" />
+      <drawerCaption>Description</drawerCaption>
+      <hideLabels v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>4b4997bf-fb16-4669-9b47-7cbd279159c6</name>
+          <entityField>TASK_DESCRIPTION</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/process/ActivityTask_lib/process.js b/process/ActivityTask_lib/process.js
index 174dfc5ff2..69402dc76a 100644
--- a/process/ActivityTask_lib/process.js
+++ b/process/ActivityTask_lib/process.js
@@ -102,18 +102,6 @@ TaskUtils.hasTasks = function(pRowId, pObjectType)
         return true;
 }
 
-/**
- * Sets the code of the given Task to the current max-code + 1
- */
-TaskUtils.setCode = function(pTaskId)
-{
-    var max = db.cell("select max(CODE) from TASK");
-    if (!max)
-        max = -1;
-    
-    db.updateData("TASK", ["CODE"], null, [parseInt(max)+1], SqlCondition.equals("TASK.TASKID", pTaskId, "1=2"));
-}
-
 TaskUtils.getTypeGroup = function(pType)
 {
     return KeywordUtils.getAttributeRelation(pType, $KeywordRegistry.taskType(), "group", "Task");
diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js
index 276c521b0f..ba206cf6ba 100644
--- a/process/KeywordRegistry_basic/process.js
+++ b/process/KeywordRegistry_basic/process.js
@@ -47,8 +47,8 @@ $KeywordRegistry.taskStatus$waiting = function(){return "00595a73-22e2-4c3b-a21c
 $KeywordRegistry.taskStatus$ended = function(){return "7c9d6681-6cf5-4395-b276-3941b6fd0d57";};
 
 $KeywordRegistry.taskType = function(){return "TaskType";};
-$KeywordRegistry.taskType$Task = function(){return "4dee8727-8299-422e-ae41-6cdf9de2dfd7";};
-$KeywordRegistry.taskType$bugTicket = function(){return "f3da0edd-49d9-4061-98c1-8fda8631be7e";};
+$KeywordRegistry.taskType$task = function(){return "4dee8727-8299-422e-ae41-6cdf9de2dfd7";};
+$KeywordRegistry.taskType$ticket = function(){return "f3da0edd-49d9-4061-98c1-8fda8631be7e";};
 $KeywordRegistry.taskType$supportTicket = function(){return "7bf77721-470f-4cdf-a6af-452bf05a405b";};
 
 $KeywordRegistry.productPricelist = function(){return "ProductPricelist";};
diff --git a/process/Util_lib/process.js b/process/Util_lib/process.js
index 7120f0e2ee..d72ca6cdba 100644
--- a/process/Util_lib/process.js
+++ b/process/Util_lib/process.js
@@ -1,3 +1,4 @@
+import("Sql_lib");
 import("system.neon");
 import("system.project");
 import("system.process");
@@ -495,6 +496,9 @@ NumberSequencingUtils.getMaxUniqueNumber = function(pColumn, pTable, pCondition)
 
 /**
  * functions for trees
+ * Do not create an instance of this!
+ * 
+ * @class
  */
 function TreeUtils () {}
 
@@ -566,4 +570,23 @@ TreeUtils.treeOrderBy = function(pData, pLayerIndex, pOrderByIndexes)
 
         return 0;
     })
+}
+
+/**
+ * functions for numbered codes
+ * Do not create an instance of this!
+ * 
+ * @class
+ */
+function CodeUtils () {}
+/**
+ * Sets the code of the given Table to the current max-code + 1
+ */
+CodeUtils.setCode = function(pId, pTable, pIdCol, pCodeCol)
+{
+    var max = db.cell("select max(" + pCodeCol + ") from " + pTable);
+    if (!max)
+        max = -1;
+    
+    db.updateData(pTable, [pCodeCol], null, [parseInt(max)+1], SqlCondition.equals(pTable + "." + pIdCol, pId, "1=2"));
 }
\ No newline at end of file
-- 
GitLab