From aa2f08acd613d74db2d4eed58f71d25d6d967f4a Mon Sep 17 00:00:00 2001
From: Johannes Hoermann <j.hoermann@adito.de>
Date: Mon, 26 Nov 2018 11:16:23 +0100
Subject: [PATCH] Salesproject: create Milestones on changes

---
 aliasDefinition/Data_alias/Data_alias.aod            |  2 +-
 .../SalesprojectCycle_entity.aod                     |  2 ++
 .../entityfields/type/valueProcess.js                |  0
 .../entityfields/value/possibleItemsProcess.js       | 11 ++++++-----
 entity/Salesproject_entity/Salesproject_entity.aod   |  1 +
 entity/Salesproject_entity/onDBInsert.js             |  4 ++--
 entity/Salesproject_entity/onDBUpdate.js             |  5 +++++
 .../data/example_salesproject/SALESPROJECT_gfk.xml   |  2 +-
 .../db_changes/struct/create_salesproject_cycle.xml  |  2 +-
 process/Keyword_lib/process.js                       | 12 ++++++++++++
 process/Salesproject_lib/process.js                  |  9 +++++++--
 11 files changed, 38 insertions(+), 12 deletions(-)
 create mode 100644 entity/SalesprojectCycle_entity/entityfields/type/valueProcess.js
 create mode 100644 entity/Salesproject_entity/onDBUpdate.js

diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index e5d9fb31d4..85d9ea5997 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -3171,7 +3171,7 @@
                 <name>TYPE</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
+                <columnType v="4" />
                 <size v="10" />
                 <scale v="0" />
                 <notNull v="false" />
diff --git a/entity/SalesprojectCycle_entity/SalesprojectCycle_entity.aod b/entity/SalesprojectCycle_entity/SalesprojectCycle_entity.aod
index 9befac9617..5d159a9908 100644
--- a/entity/SalesprojectCycle_entity/SalesprojectCycle_entity.aod
+++ b/entity/SalesprojectCycle_entity/SalesprojectCycle_entity.aod
@@ -43,6 +43,8 @@
       <name>TYPE</name>
       <tableName>SALESPROJECT_CYCLE</tableName>
       <columnName>TYPE</columnName>
+      <contentType>NUMBER</contentType>
+      <valueProcess>%aditoprj%/entity/SalesprojectCycle_entity/entityfields/type/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>VALUE</name>
diff --git a/entity/SalesprojectCycle_entity/entityfields/type/valueProcess.js b/entity/SalesprojectCycle_entity/entityfields/type/valueProcess.js
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/entity/SalesprojectCycle_entity/entityfields/value/possibleItemsProcess.js b/entity/SalesprojectCycle_entity/entityfields/value/possibleItemsProcess.js
index 5f5dd7b9b2..b5cc5a9e29 100644
--- a/entity/SalesprojectCycle_entity/entityfields/value/possibleItemsProcess.js
+++ b/entity/SalesprojectCycle_entity/entityfields/value/possibleItemsProcess.js
@@ -1,21 +1,22 @@
 import("system.result");
 import("system.vars");
+import("system.logging");
 import("Keyword_lib");
 
 var kwdUtils, items, keyword;
 
 kwdUtils = new KeywordUtils();
-
-switch (vars.get("$field.TYPE"))
+logging.log(vars.get("$field.TYPE").toSource())
+switch (parseInt(vars.get("$field.TYPE")))
 {
-    case "Phase":
+    case 1:
         keyword = "SALESPROJECT.PHASE";
         break;
-    case "State":
+    case 2:
         keyword = "SALESPROJECT.STATE";
         break;
 }
-
+logging.log(keyword)
 if (keyword) {
     items = kwdUtils.getStandardArray(keyword);
 }
diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod
index 91fa179c02..e24e99ec2a 100644
--- a/entity/Salesproject_entity/Salesproject_entity.aod
+++ b/entity/Salesproject_entity/Salesproject_entity.aod
@@ -8,6 +8,7 @@
   <iconId>VAADIN:FILTER</iconId>
   <alias>Data_alias</alias>
   <onDBInsert>%aditoprj%/entity/Salesproject_entity/onDBInsert.js</onDBInsert>
+  <onDBUpdate>%aditoprj%/entity/Salesproject_entity/onDBUpdate.js</onDBUpdate>
   <entityFields>
     <entityIncomingField>
       <name>#INCOMING</name>
diff --git a/entity/Salesproject_entity/onDBInsert.js b/entity/Salesproject_entity/onDBInsert.js
index 677dab41bf..24f917cdcd 100644
--- a/entity/Salesproject_entity/onDBInsert.js
+++ b/entity/Salesproject_entity/onDBInsert.js
@@ -1,5 +1,5 @@
 import("system.vars");
 import("Salesproject_lib");
 
-Salesproject.insertMilestone(vars.getString("$field.SALESPROJECTID"), Salesproject_TYPES.PHASE, vars.get("$field.PHASE"));
-Salesproject.insertMilestone(vars.getString("$field.SALESPROJECTID"), Salesproject_TYPES.STATE, vars.get("$field.STATE"));
\ No newline at end of file
+Salesproject.insertMilestone(vars.getString("$field.SALESPROJECTID"), 1, vars.get("$field.PHASE"));
+Salesproject.insertMilestone(vars.getString("$field.SALESPROJECTID"), 2, vars.get("$field.STATE"));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/onDBUpdate.js b/entity/Salesproject_entity/onDBUpdate.js
new file mode 100644
index 0000000000..14b1627655
--- /dev/null
+++ b/entity/Salesproject_entity/onDBUpdate.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.logging");
+import("Salesproject_lib");
+
+logging.log(vars.get("$local.changed").toSource())
\ No newline at end of file
diff --git a/others/db_changes/data/example_salesproject/SALESPROJECT_gfk.xml b/others/db_changes/data/example_salesproject/SALESPROJECT_gfk.xml
index f806e07377..db97bcf7d4 100644
--- a/others/db_changes/data/example_salesproject/SALESPROJECT_gfk.xml
+++ b/others/db_changes/data/example_salesproject/SALESPROJECT_gfk.xml
@@ -35,7 +35,7 @@
         <column name="USER_NEW" value="admin"/>
         <column name="DATE_NEW" valueDate="2018-06-13T09:03:43"/>
         <column name="SALESPROJECT_ID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
-        <column name="TYPE" value="Phase"/>
+        <column name="TYPE" valueNumeric="1"/>
         <column name="VALUE" valueNumeric="1"/>
         <column name="DATE_START" valueDate="2018-06-13T09:03:43"/>
         <column name="DATE_END" valueDate="2018-06-13T09:03:43"/>
diff --git a/others/db_changes/struct/create_salesproject_cycle.xml b/others/db_changes/struct/create_salesproject_cycle.xml
index 49d8701706..73db00ee25 100644
--- a/others/db_changes/struct/create_salesproject_cycle.xml
+++ b/others/db_changes/struct/create_salesproject_cycle.xml
@@ -9,7 +9,7 @@
                 <constraints nullable="false"/>
             </column>
             
-            <column name="TYPE" type="VARCHAR(10)"/>
+            <column name="TYPE" type="INTEGER"/>
             <column name="VALUE" type="INTEGER"/>
             
             <column name="DATE_START" type="TIMESTAMP"/>
diff --git a/process/Keyword_lib/process.js b/process/Keyword_lib/process.js
index fd778f65a0..9faa3d7467 100644
--- a/process/Keyword_lib/process.js
+++ b/process/Keyword_lib/process.js
@@ -44,6 +44,7 @@ function KeywordUtils(){
      * @param {String} keywordType specifies the type of the keyword and therefore the list elements; e.g. "COUNTRY"
      * @return {Object} object with the following methods:
      * <br/>- toArray
+     * <br/>- get
      * <br/>- getPropForKey
      * <br/>- getPropsForKey
      * <br/>- filter
@@ -262,6 +263,12 @@ function KeywordUtils(){
                     ,createKeywordEntry("6", translate.text("Sales ID"))
                 ]);
                 break;
+            case "SALESPROJECT.CYCLE.TYPE":
+                valueContainer = createKeywordEntriesContainer([
+                     createKeywordEntry("1", translate.text("Phase"), null, {keyword: "SALESPROJECT.PHASE"})
+                    ,createKeywordEntry("2", translate.text("State"), null, {category: "SALESPROJECT.STATE"})
+                ]);
+                break;
             case "OFFER.PROBABILITY":
                 valueContainer = createKeywordEntriesContainer([
                      createKeywordEntry("1", translate.text("0 %"), null, {percentValue: 0})
@@ -338,6 +345,10 @@ function KeywordUtils(){
             }
             return res;
         };
+        
+        _existsFn = function(key){
+            return (valueContainer[key] != undefined);
+        };
 
         return {
             /**
@@ -355,6 +366,7 @@ function KeywordUtils(){
                 }
                 return this;
             }
+            ,exists: _existsFn
         };
     };
     
diff --git a/process/Salesproject_lib/process.js b/process/Salesproject_lib/process.js
index e3f10b6a49..506500b8f9 100644
--- a/process/Salesproject_lib/process.js
+++ b/process/Salesproject_lib/process.js
@@ -2,6 +2,7 @@ import("system.translate");
 import("system.db");
 import("system.eMath");
 import("Util_lib");
+import("Keyword_lib");
 
 /**
 *  Types for the milestone.
@@ -44,13 +45,17 @@ Salesproject = {
      * Insert a new milestone.
      * 
      * @param {String} ID of the salesproject
-     * @param {TYPES} type type can either be Salesproject_TYPES.PHASE or Salesproject_TYPES.STATE
+     * @param {Integer} type can be any value of the keyword SALESPROJECT.CYCLE.TYPE
      * @param {Integer} value value of the phase or state
      * 
      * @result {boolean} true if inserted, else false
      */
     insertMilestone: function(salesprojectId, type, value) {
-        if (type == Salesproject_TYPES.PHASE || type == Salesproject_TYPES.STATE) {
+        var kwdUtils, items;
+
+        kwdUtils = new KeywordUtils();
+                
+        if (kwdUtils.createKeyword("SALESPROJECT.CYCLE.TYPE").exists(type)) {
             db.insertData(
                 "SALESPROJECT_CYCLE",
                 ["SALESPROJECT_CYCLEID", "SALESPROJECT_ID", "TYPE", "VALUE", "DATE_START", "USER_NEW", "DATE_NEW"],
-- 
GitLab