From d0f1fab3451290bd9e6db3c7621902991f1003b4 Mon Sep 17 00:00:00 2001
From: "m.mansour" <m.mansour@mmansour.aditosoftware.local>
Date: Fri, 5 Jul 2019 12:29:25 +0200
Subject: [PATCH] Supportticket

---
 entity/Activity_entity/Activity_entity.aod    |  4 +-
 .../ModuleTree_entity/ModuleTree_entity.aod   |  6 ++
 .../recordcontainers/jdito/contentProcess.js  | 64 +++++++++++--
 .../SupportTicket_entity.aod                  | 59 +++++++++++-
 .../contextname_param/valueProcess.js         |  4 +
 .../children/id_param/valueProcess.js         |  4 +
 .../newactivity/onActionProcess.js            |  5 +
 .../newactivity/tooltipProcess.js             |  4 +
 .../entityfields/newtask/onActionProcess.js   |  5 +
 .../task_parent_context/valueProcess.js       |  4 +
 .../task_parent_id/valueProcess.js            |  4 +
 .../recordcontainers/db/conditionProcess.js   | 11 ++-
 entity/Task_entity/Task_entity.aod            | 13 +--
 .../newsupportticket/onActionProcess.js       |  6 ++
 .../_____LANGUAGE_de/_____LANGUAGE_de.aod     | 93 +++++++++++++++++++
 .../_____LANGUAGE_en/_____LANGUAGE_en.aod     | 93 +++++++++++++++++++
 .../SupportTicketMain_view.aod                |  5 +
 process/Ticket_lib/process.js                 |  2 +-
 18 files changed, 363 insertions(+), 23 deletions(-)
 create mode 100644 entity/SupportTicket_entity/entityfields/moduletrees/children/contextname_param/valueProcess.js
 create mode 100644 entity/SupportTicket_entity/entityfields/moduletrees/children/id_param/valueProcess.js
 create mode 100644 entity/SupportTicket_entity/entityfields/newactivity/onActionProcess.js
 create mode 100644 entity/SupportTicket_entity/entityfields/newactivity/tooltipProcess.js
 create mode 100644 entity/SupportTicket_entity/entityfields/newtask/onActionProcess.js
 create mode 100644 entity/SupportTicket_entity/entityfields/task_parent_context/valueProcess.js
 create mode 100644 entity/SupportTicket_entity/entityfields/task_parent_id/valueProcess.js
 create mode 100644 entity/Task_entity/entityfields/newsupportticket/onActionProcess.js

diff --git a/entity/Activity_entity/Activity_entity.aod b/entity/Activity_entity/Activity_entity.aod
index 40b966dcea..7b430aeb51 100644
--- a/entity/Activity_entity/Activity_entity.aod
+++ b/entity/Activity_entity/Activity_entity.aod
@@ -285,8 +285,8 @@
         <entityParameter>
           <name>ID_param</name>
           <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/moduletrees/children/id_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-          <mandatory v="false" />
+          <expose v="true" />
+          <mandatory v="true" />
         </entityParameter>
       </children>
     </entityConsumer>
diff --git a/entity/ModuleTree_entity/ModuleTree_entity.aod b/entity/ModuleTree_entity/ModuleTree_entity.aod
index 04d6372a08..af088a8e5f 100644
--- a/entity/ModuleTree_entity/ModuleTree_entity.aod
+++ b/entity/ModuleTree_entity/ModuleTree_entity.aod
@@ -36,6 +36,12 @@
           <fieldName>ModuleTrees</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>3132e321-3b6a-4828-b600-01897ae83646</name>
+          <entityName>SupportTicket_entity</entityName>
+          <fieldName>ModuleTrees</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/ModuleTree_entity/recordcontainers/jdito/contentProcess.js b/entity/ModuleTree_entity/recordcontainers/jdito/contentProcess.js
index c3d1948fc0..95d7c11f3f 100644
--- a/entity/ModuleTree_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/ModuleTree_entity/recordcontainers/jdito/contentProcess.js
@@ -1,3 +1,5 @@
+import("system.logging");
+import("KeywordRegistry_basic");
 import("system.vars");
 import("Sql_lib")
 import("system.result");
@@ -8,8 +10,10 @@ var fixedID = vars.get("$param.ID_param");
 
 let resArray = [];
 
+var cond = new SqlCondition();
 // Query root element
 var root = queryRootElement(fixedContextName, fixedID, true);
+
 if (root !== null) {
     // Push root element
     resArray.push(root);
@@ -20,10 +24,8 @@ if (root !== null) {
     if (children !== null) {
      
        // Push each children
-       for(let i = 0; i < children.length; i++) {
-           resArray.push(children[i]);
-       }
-
+       resArray = resArray.concat(children);
+       logging.log(JSON.stringify(resArray, null, "\t"));
        result.object(resArray);
     }
 }
@@ -36,9 +38,24 @@ if (root !== null) {
  * @param pID ID of the parent element.
  */
 function queryChildrenElements (pContextName, pID) {
-    var taskResult = db.table("select TASKID, PARENT_ID, PARENT_CONTEXT, SUBJECT, DESCRIPTION from TASK where PARENT_ID = '" + pID +"' and PARENT_CONTEXT = '" + pContextName + "'");
-    var activityResult = db.table("select ACTIVITYID, PARENT_ID, PARENT_CONTEXT, SUBJECT, INFO from ACTIVITY where PARENT_ID = '" + pID +"' and PARENT_CONTEXT = '" + pContextName + "'");
-  
+    
+    var taskResult = db.table(SqlCondition.begin()
+    .andPrepare("TASK.PARENT_ID", pID)
+    .andPrepare("TASK.PARENT_CONTEXT", pContextName)
+    .andPrepare("TASK.TYPE", $KeywordRegistry.taskType$task())
+    .buildSql("select TASKID, PARENT_ID, PARENT_CONTEXT, SUBJECT, DESCRIPTION from TASK"));
+    
+    
+     var ticketResult = db.table(SqlCondition.begin()
+    .andPrepare("TASK.PARENT_ID", pID)
+    .andPrepare("TASK.PARENT_CONTEXT", pContextName)
+    .buildSql("select TASKID, PARENT_ID, PARENT_CONTEXT, SUBJECT, DESCRIPTION from TICKET left join TASK on TASK_ID = TASKID"));
+    
+    var activityResult = db.table(SqlCondition.begin()
+    .andPrepare("ACTIVITY.PARENT_ID", pID)
+    .andPrepare("ACTIVITY.PARENT_CONTEXT", pContextName)
+    .buildSql("select ACTIVITYID, PARENT_ID, PARENT_CONTEXT, SUBJECT, INFO from ACTIVITY"));
+    
     var res = []
   
     for (let i = 0; i < taskResult.length; i++) {
@@ -60,6 +77,16 @@ function queryChildrenElements (pContextName, pID) {
         let children = queryChildrenElements("Activity", activityResult[i][0]);
         res = res.concat(children);
     }
+    
+    for (let i = 0; i < ticketResult.length; i++) {
+        // Augment data
+        ticketResult[i] = augmentData(ticketResult[i], "SupportTicket");
+        res.push(ticketResult[i]);
+        
+        // Query children
+        let children = queryChildrenElements("SupportTicket", ticketResult[i][0]);
+        res = res.concat(children);
+    }
       
     return res;
 }
@@ -72,6 +99,9 @@ function queryChildrenElements (pContextName, pID) {
  * @param pGetFirst start from the first element
  */
 function queryRootElement (pContextName, pID, pGetFirst) {
+    logging.log(pContextName)
+    logging.log(pID)
+    logging.log(pGetFirst)
     var resultArray;
     if (pContextName === "Task") {
         resultArray = db.array(db.ROW, "select TASKID, PARENT_ID, PARENT_CONTEXT, SUBJECT, DESCRIPTION from TASK where TASKID = '" + pID + "'");
@@ -99,7 +129,21 @@ function queryRootElement (pContextName, pID, pGetFirst) {
             fixedID = resultArray[0];
         }
         return augmentData(resultArray, "Activity");
-    } else {
+    }
+    else if (pContextName === "SupportTicket") {
+        resultArray = db.array(db.ROW, "select TICKETID, PARENT_ID, PARENT_CONTEXT, SUBJECT, DESCRIPTION from TICKET left join TASK on TASK_ID = TASKID where TICKETID = '" + pID +"'");
+        if (resultArray.length === 0) {
+            return null;
+        }
+        if (pGetFirst && resultArray[1] && resultArray[2])
+            return queryRootElement(resultArray[2], resultArray[1], pGetFirst);
+        if (pGetFirst)
+        {
+            fixedContextName = "SupportTicket";
+            fixedID = resultArray[0];
+        }
+        return augmentData(resultArray, "SupportTicket");}
+    else {
         return null;
     }
 }
@@ -121,7 +165,7 @@ function augmentData (pDataRow, pType) {
     if (pDataRow.length === 0)
         return null;
     
-    if (pType !== "Task" && pType !== "Activity")
+    if (pType !== "Task" && pType !== "Activity" && pType !="SupportTicket")
         return null;
     
     // PARENT_ID check
@@ -136,7 +180,7 @@ function augmentData (pDataRow, pType) {
     pDataRow.splice(1, 0, pType);
     
     // Insert icon
-    pDataRow.splice(6, 0, pType === "Task" ? "VAADIN:TASKS" : pType === "Activity" ? "VAADIN:HOURGLASS_END": null);
+    pDataRow.splice(6, 0, pType === "Task" ? "VAADIN:TASKS" : pType === "Activity" ? "VAADIN:HOURGLASS_END": pType==="SupportTicket" ? "VAADIN:QUESTION": null);
     
     return pDataRow;
 }
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/SupportTicket_entity.aod b/entity/SupportTicket_entity/SupportTicket_entity.aod
index cfb5e2f208..ca90d0c707 100644
--- a/entity/SupportTicket_entity/SupportTicket_entity.aod
+++ b/entity/SupportTicket_entity/SupportTicket_entity.aod
@@ -310,6 +310,53 @@
         <fieldName>Employees</fieldName>
       </dependency>
     </entityConsumer>
+    <entityActionField>
+      <name>newActivity</name>
+      <title>New activity</title>
+      <onActionProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/newactivity/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:HOURGLASS_END</iconId>
+      <tooltipProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess>
+    </entityActionField>
+    <entityActionField>
+      <name>newTask</name>
+      <title>New task</title>
+      <onActionProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/newtask/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:TASKS</iconId>
+    </entityActionField>
+    <entityConsumer>
+      <name>ModuleTrees</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ModuleTree_entity</entityName>
+        <fieldName>TreeProviders</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContextName_param</name>
+          <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/moduletrees/children/contextname_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ID_param</name>
+          <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/moduletrees/children/id_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>TASK_PARENT_ID</name>
+      <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/task_parent_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>TASK_PARENT_CONTEXT</name>
+      <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/task_parent_context/valueProcess.js</valueProcess>
+    </entityField>
+    <entityParameter>
+      <name>ParentContext_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>ParentId_param</name>
+      <expose v="true" />
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -323,14 +370,14 @@
       <onDBDelete>%aditoprj%/entity/SupportTicket_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
       <linkInformation>
         <linkInformation>
-          <name>ec5c2cd3-f05b-467f-88c6-c1d4d7de87cc</name>
+          <name>512c662b-33f6-4491-bd24-a8b862f2de84</name>
           <tableName>TICKET</tableName>
           <primaryKey>TICKETID</primaryKey>
           <isUIDTable v="true" />
           <readonly v="false" />
         </linkInformation>
         <linkInformation>
-          <name>d73da2b3-bc44-4909-9bc0-9298cf57e7d7</name>
+          <name>4e818524-bb9c-46e7-a336-e48da60c06d1</name>
           <tableName>TASK</tableName>
           <primaryKey>TASKID</primaryKey>
           <isUIDTable v="false" />
@@ -418,6 +465,14 @@
           <name>TICKETTYPE.value</name>
           <recordfield>TICKET.TICKETTYPE</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_PARENT_ID.value</name>
+          <recordfield>TASK.PARENT_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TASK_PARENT_CONTEXT.value</name>
+          <recordfield>TASK.PARENT_CONTEXT</recordfield>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/SupportTicket_entity/entityfields/moduletrees/children/contextname_param/valueProcess.js b/entity/SupportTicket_entity/entityfields/moduletrees/children/contextname_param/valueProcess.js
new file mode 100644
index 0000000000..5996e99db2
--- /dev/null
+++ b/entity/SupportTicket_entity/entityfields/moduletrees/children/contextname_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getCurrentContextId());
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/entityfields/moduletrees/children/id_param/valueProcess.js b/entity/SupportTicket_entity/entityfields/moduletrees/children/id_param/valueProcess.js
new file mode 100644
index 0000000000..9a7beeda99
--- /dev/null
+++ b/entity/SupportTicket_entity/entityfields/moduletrees/children/id_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.vars");
+
+result.string(vars.get("$field.TICKETID"));
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/entityfields/newactivity/onActionProcess.js b/entity/SupportTicket_entity/entityfields/newactivity/onActionProcess.js
new file mode 100644
index 0000000000..6ea79fab31
--- /dev/null
+++ b/entity/SupportTicket_entity/entityfields/newactivity/onActionProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("ActivityTask_lib");
+import("Context_lib");
+
+ActivityUtils.createNewActivity(undefined, undefined, ContextUtils.getCurrentContextId(), vars.get("$field.TASK_ID"));
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/entityfields/newactivity/tooltipProcess.js b/entity/SupportTicket_entity/entityfields/newactivity/tooltipProcess.js
new file mode 100644
index 0000000000..2cdf4480a4
--- /dev/null
+++ b/entity/SupportTicket_entity/entityfields/newactivity/tooltipProcess.js
@@ -0,0 +1,4 @@
+import("system.translate");
+import("system.result");
+
+result.string(translate.text("New activity"));
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/entityfields/newtask/onActionProcess.js b/entity/SupportTicket_entity/entityfields/newtask/onActionProcess.js
new file mode 100644
index 0000000000..be994af3d1
--- /dev/null
+++ b/entity/SupportTicket_entity/entityfields/newtask/onActionProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("ActivityTask_lib");
+import("Context_lib");
+
+TaskUtils.createNewTask(undefined, undefined, ContextUtils.getCurrentContextId(), vars.get("$field.TICKETID"));
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/entityfields/task_parent_context/valueProcess.js b/entity/SupportTicket_entity/entityfields/task_parent_context/valueProcess.js
new file mode 100644
index 0000000000..a9e15f730f
--- /dev/null
+++ b/entity/SupportTicket_entity/entityfields/task_parent_context/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$param.ParentContext_param"));
diff --git a/entity/SupportTicket_entity/entityfields/task_parent_id/valueProcess.js b/entity/SupportTicket_entity/entityfields/task_parent_id/valueProcess.js
new file mode 100644
index 0000000000..6de1c77ad4
--- /dev/null
+++ b/entity/SupportTicket_entity/entityfields/task_parent_id/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$param.ParentId_param"));
diff --git a/entity/SupportTicket_entity/recordcontainers/db/conditionProcess.js b/entity/SupportTicket_entity/recordcontainers/db/conditionProcess.js
index 7aed878b9c..ddefe83f37 100644
--- a/entity/SupportTicket_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/SupportTicket_entity/recordcontainers/db/conditionProcess.js
@@ -6,6 +6,12 @@ import("system.result");
 import("Sql_lib");
 import("KeywordRegistry_basic");
 
+if (vars.exists("$sys.idvalues"))
+logging.log("a " + vars.getString("$sys.idvalues"))
+
+if (vars.exists("$local.idvalues"))
+logging.log("b " + vars.getString("$local.idvalues"))
+
 var cond = new SqlCondition();
 cond.andPrepare("TASK.TYPE", $KeywordRegistry.taskType$ticket())
     .andPrepareVars("TICKET.TICKETTYPE", "$param.TicketType_param")
@@ -23,15 +29,16 @@ if (vars.getString("$param.FilterOnlyOwnTicket_param") == "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")
+    var taskLinkCond = 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", ")")))
+    cond.and(db.translateStatement(taskLinkCond.buildSql("TASK.TASKID in (select TASKLINK.TASK_ID from TASKLINK", "1=2", ")")))
 }
 
 if (loadNothing) 
 {
+    logging.log("Nothing")
     result.string("1=2");
 }
 else
diff --git a/entity/Task_entity/Task_entity.aod b/entity/Task_entity/Task_entity.aod
index 28a0a68c41..4d0e56d710 100644
--- a/entity/Task_entity/Task_entity.aod
+++ b/entity/Task_entity/Task_entity.aod
@@ -101,11 +101,6 @@
         <entityName>Employee_entity</entityName>
         <fieldName>Employees</fieldName>
       </dependency>
-      <children>
-        <entityParameter>
-          <name>OnlyActives_param</name>
-        </entityParameter>
-      </children>
     </entityConsumer>
     <entityConsumer>
       <name>ContactRequestors</name>
@@ -164,7 +159,7 @@
         <entityParameter>
           <name>ID_param</name>
           <valueProcess>%aditoprj%/entity/Task_entity/entityfields/moduletrees/children/id_param/valueProcess.js</valueProcess>
-          <expose v="false" />
+          <expose v="true" />
           <mandatory v="false" />
         </entityParameter>
         <entityParameter>
@@ -421,6 +416,12 @@
       <name>TYPE</name>
       <valueProcess>%aditoprj%/entity/Task_entity/entityfields/type/valueProcess.js</valueProcess>
     </entityField>
+    <entityActionField>
+      <name>newSupportticket</name>
+      <title>Neues Supportticket</title>
+      <onActionProcess>%aditoprj%/entity/Task_entity/entityfields/newsupportticket/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:QUESTION</iconId>
+    </entityActionField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/Task_entity/entityfields/newsupportticket/onActionProcess.js b/entity/Task_entity/entityfields/newsupportticket/onActionProcess.js
new file mode 100644
index 0000000000..500687bbf4
--- /dev/null
+++ b/entity/Task_entity/entityfields/newsupportticket/onActionProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("ActivityTask_lib");
+import("Context_lib");
+import("Ticket_lib")
+
+TicketUtils.createNewTicket(undefined, undefined, ContextUtils.getCurrentContextId(), vars.get("$field.TASKID"))
\ No newline at end of file
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index 32ba367380..97e84ddb59 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -5613,6 +5613,99 @@
     <entry>
       <key>Bulk mail was sent!</key>
     </entry>
+    <entry>
+      <key>Support Ticket</key>
+    </entry>
+    <entry>
+      <key>CC</key>
+    </entry>
+    <entry>
+      <key>Remarks</key>
+    </entry>
+    <entry>
+      <key>Xing</key>
+    </entry>
+    <entry>
+      <key>Organisation</key>
+    </entry>
+    <entry>
+      <key>Km</key>
+    </entry>
+    <entry>
+      <key>Billed</key>
+    </entry>
+    <entry>
+      <key>Km Fee</key>
+    </entry>
+    <entry>
+      <key>Credit Card</key>
+    </entry>
+    <entry>
+      <key>Taxi</key>
+    </entry>
+    <entry>
+      <key>Overnight stay</key>
+    </entry>
+    <entry>
+      <key>LinkedIn</key>
+    </entry>
+    <entry>
+      <key>In creation</key>
+    </entry>
+    <entry>
+      <key>Rented car</key>
+    </entry>
+    <entry>
+      <key>Update</key>
+    </entry>
+    <entry>
+      <key>The contact has an advertising ban for emails!</key>
+    </entry>
+    <entry>
+      <key>Blog</key>
+    </entry>
+    <entry>
+      <key>Until</key>
+    </entry>
+    <entry>
+      <key>From</key>
+    </entry>
+    <entry>
+      <key>Park fees</key>
+    </entry>
+    <entry>
+      <key>Abscences</key>
+    </entry>
+    <entry>
+      <key>Expense Report</key>
+    </entry>
+    <entry>
+      <key>Special displays</key>
+    </entry>
+    <entry>
+      <key>Transport cost</key>
+    </entry>
+    <entry>
+      <key>Day Fee</key>
+    </entry>
+    <entry>
+      <key>Fuel</key>
+    </entry>
+    <entry>
+      <key>Month</key>
+    </entry>
+    <entry>
+      <key>Working material</key>
+    </entry>
+    <entry>
+      <key>Hospitality</key>
+    </entry>
+    <entry>
+      <key>Trip purpose</key>
+    </entry>
+    <entry>
+      <key>Bed and Breakfast</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index 89992de900..0e615249a2 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -4513,6 +4513,99 @@
     <entry>
       <key>User Administration</key>
     </entry>
+    <entry>
+      <key>Support Ticket</key>
+    </entry>
+    <entry>
+      <key>CC</key>
+    </entry>
+    <entry>
+      <key>Remarks</key>
+    </entry>
+    <entry>
+      <key>Xing</key>
+    </entry>
+    <entry>
+      <key>Organisation</key>
+    </entry>
+    <entry>
+      <key>Km</key>
+    </entry>
+    <entry>
+      <key>Billed</key>
+    </entry>
+    <entry>
+      <key>Km Fee</key>
+    </entry>
+    <entry>
+      <key>Credit Card</key>
+    </entry>
+    <entry>
+      <key>Taxi</key>
+    </entry>
+    <entry>
+      <key>Overnight stay</key>
+    </entry>
+    <entry>
+      <key>LinkedIn</key>
+    </entry>
+    <entry>
+      <key>In creation</key>
+    </entry>
+    <entry>
+      <key>Rented car</key>
+    </entry>
+    <entry>
+      <key>Update</key>
+    </entry>
+    <entry>
+      <key>The contact has an advertising ban for emails!</key>
+    </entry>
+    <entry>
+      <key>Blog</key>
+    </entry>
+    <entry>
+      <key>Until</key>
+    </entry>
+    <entry>
+      <key>From</key>
+    </entry>
+    <entry>
+      <key>Park fees</key>
+    </entry>
+    <entry>
+      <key>Abscences</key>
+    </entry>
+    <entry>
+      <key>Expense Report</key>
+    </entry>
+    <entry>
+      <key>Special displays</key>
+    </entry>
+    <entry>
+      <key>Transport cost</key>
+    </entry>
+    <entry>
+      <key>Day Fee</key>
+    </entry>
+    <entry>
+      <key>Fuel</key>
+    </entry>
+    <entry>
+      <key>Month</key>
+    </entry>
+    <entry>
+      <key>Working material</key>
+    </entry>
+    <entry>
+      <key>Hospitality</key>
+    </entry>
+    <entry>
+      <key>Trip purpose</key>
+    </entry>
+    <entry>
+      <key>Bed and Breakfast</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/neonView/SupportTicketMain_view/SupportTicketMain_view.aod b/neonView/SupportTicketMain_view/SupportTicketMain_view.aod
index f8a2b93f79..e2129c858d 100644
--- a/neonView/SupportTicketMain_view/SupportTicketMain_view.aod
+++ b/neonView/SupportTicketMain_view/SupportTicketMain_view.aod
@@ -44,5 +44,10 @@
       <entityField>Attributes</entityField>
       <view>AttributeRelationTree_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>e3dbf148-8d3d-4a62-ac20-17c878c0a669</name>
+      <entityField>ModuleTrees</entityField>
+      <view>ModuleTree_view</view>
+    </neonViewReference>
   </children>
 </neonView>
diff --git a/process/Ticket_lib/process.js b/process/Ticket_lib/process.js
index f5bb788424..e1379df1db 100644
--- a/process/Ticket_lib/process.js
+++ b/process/Ticket_lib/process.js
@@ -63,7 +63,7 @@ TicketUtils.addLinkRecords= function(pObjectIdField, pRowIdField, pAdditionalLin
  */
 TicketUtils.prototype.createNewTicket = function(pRowId, pAdditionalLinks, pParentContext, pParentId, pParams)
 {
-    throw Error("Not implemented yet");
+    _ActivityTaskUtils._createNew("SupportTicket", pRowId, pAdditionalLinks, pParentContext, pParentId, pParams)
 }
 
 /**
-- 
GitLab