From c8d60e84350889d4a595dafd356c6fe3ff7052c9 Mon Sep 17 00:00:00 2001
From: Johannes Hoermann <j.hoermann@adito.de>
Date: Thu, 10 Oct 2019 09:39:59 +0200
Subject: [PATCH] fix objectrelation: edit of relations in use

---
 .../ObjectRelationType_entity.aod             |   1 +
 .../type2enabled_proxy/stateProcess.js        |  12 ++
 .../recordcontainers/jdito/onUpdate.js        | 138 ++++++++----------
 3 files changed, 75 insertions(+), 76 deletions(-)
 create mode 100644 entity/ObjectRelationType_entity/entityfields/type2enabled_proxy/stateProcess.js

diff --git a/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod b/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod
index 6a063fff6d8..fb534bb2230 100644
--- a/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod
+++ b/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod
@@ -114,6 +114,7 @@
       <title>Enable relation type 2</title>
       <contentType>BOOLEAN</contentType>
       <dropDownProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/type2enabled_proxy/dropDownProcess.js</dropDownProcess>
+      <stateProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/type2enabled_proxy/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/type2enabled_proxy/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
diff --git a/entity/ObjectRelationType_entity/entityfields/type2enabled_proxy/stateProcess.js b/entity/ObjectRelationType_entity/entityfields/type2enabled_proxy/stateProcess.js
new file mode 100644
index 00000000000..6433e03a881
--- /dev/null
+++ b/entity/ObjectRelationType_entity/entityfields/type2enabled_proxy/stateProcess.js
@@ -0,0 +1,12 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if (vars.getString("$param.UsageCount_param") > 0)
+{
+    result.string(neon.COMPONENTSTATE_DISABLED);
+}
+else
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+}
\ No newline at end of file
diff --git a/entity/ObjectRelationType_entity/recordcontainers/jdito/onUpdate.js b/entity/ObjectRelationType_entity/recordcontainers/jdito/onUpdate.js
index 7525fe76f2d..7aa7d08ec61 100644
--- a/entity/ObjectRelationType_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/ObjectRelationType_entity/recordcontainers/jdito/onUpdate.js
@@ -4,94 +4,80 @@ import("Sql_lib");
 import("system.db");
 import("system.vars");
 
-var usageCount = db.cell(SqlCondition.begin()
-                                   .andPrepareVars("AB_OBJECTRELATION.AB_OBJECTRELATIONTYPE1", "$field.UID")
-                                   .andPrepareVars("AB_OBJECTRELATION.AB_OBJECTRELATIONTYPE2", "$field.DEST_OBJECTRELATIONTYPEID")
-                                   .buildSql("select count(*) from AB_OBJECTRELATION", "1=2"))
+var type1Fields = {};
+var type2Fields = {};
 
-if (usageCount <= 0)
+vars.get("local.changed").forEach(function(pChange)
 {
-    var type1Fields = {};
-    var type2Fields = {};
+    var fieldName = pChange.split(".")[0];
 
-    vars.get("local.changed").forEach(function(pChange)
+    switch (pChange.split("_")[0])
     {
-        var fieldName = pChange.split(".")[0];
+        case "SOURCE":
+            type1Fields[fieldName.replace("SOURCE_", "")] = vars.get("$field." + fieldName);
+            break;
+        case "DEST":
+            type2Fields[fieldName.replace("DEST_", "")] = vars.get("$field." + fieldName);
+            break;
+        case "Type2Enabled":
+            break;
+        case "ICON":
+            type1Fields[fieldName] = vars.get("$field." + fieldName);
+        default:
+            type1Fields[fieldName] = vars.get("$field." + fieldName);
+            type2Fields[fieldName] = vars.get("$field." + fieldName);
+    }
+});
 
-        switch (pChange.split("_")[0])
-        {
-            case "SOURCE":
-                type1Fields[fieldName.replace("SOURCE_", "")] = vars.get("$field." + fieldName);
-                break;
-            case "DEST":
-                type2Fields[fieldName.replace("DEST_", "")] = vars.get("$field." + fieldName);
-                break;
-            case "Type2Enabled":
-                break;
-            case "ICON":
-                type1Fields[fieldName] = vars.get("$field." + fieldName);
-            default:
-                type1Fields[fieldName] = vars.get("$field." + fieldName);
-                type2Fields[fieldName] = vars.get("$field." + fieldName);
-        }
-    });
+var updates = [];
+var type1Cond = SqlCondition.begin().andPrepare("AB_OBJECTRELATIONTYPE.RELATION_TYPE", vars.get("$field.RELATION_TYPE"))
+                                    .andPrepare("AB_OBJECTRELATIONTYPE.SIDE", "1").build("1=2");
+var type2Cond = SqlCondition.begin().andPrepare("AB_OBJECTRELATIONTYPE.RELATION_TYPE", vars.get("$field.RELATION_TYPE"))
+                                    .andPrepare("AB_OBJECTRELATIONTYPE.SIDE", "2").build("1=2");
 
-    var updates = [];
-    var type1Cond = SqlCondition.begin().andPrepare("AB_OBJECTRELATIONTYPE.RELATION_TYPE", vars.get("$field.RELATION_TYPE"))
-                                        .andPrepare("AB_OBJECTRELATIONTYPE.SIDE", "1").build("1=2");
-    var type2Cond = SqlCondition.begin().andPrepare("AB_OBJECTRELATIONTYPE.RELATION_TYPE", vars.get("$field.RELATION_TYPE"))
-                                        .andPrepare("AB_OBJECTRELATIONTYPE.SIDE", "2").build("1=2");
+for (let field in type1Fields) {
+    updates.push(["AB_OBJECTRELATIONTYPE", [field], null, [type1Fields[field]], type1Cond]);
+}
 
-    for (let field in type1Fields) {
-        updates.push(["AB_OBJECTRELATIONTYPE", [field], null, [type1Fields[field]], type1Cond]);
-    }
+var type2Enabled = vars.getString("$field.Type2Enabled_proxy");
 
-    var type2Enabled = vars.getString("$field.Type2Enabled_proxy");
-    
-    // delete, if type2  is empty -> convert it to a "same"-type
-    if (type2Enabled == "0" || ((vars.get("$field.SOURCE_RELATION_TITLE") == vars.get("$field.DEST_RELATION_TITLE") && vars.get("$field.SOURCE_OBJECT_TYPE") == vars.get("$field.DEST_OBJECT_TYPE"))
-        || !vars.get("$field.DEST_OBJECT_TYPE") && !vars.get("$field.DEST_RELATION_TITLE")))
-    {
-        db.deleteData("AB_OBJECTRELATIONTYPE", type2Cond);
+// delete, if type2  is empty -> convert it to a "same"-type
+if (type2Enabled == "0" || ((vars.get("$field.SOURCE_RELATION_TITLE") == vars.get("$field.DEST_RELATION_TITLE") && vars.get("$field.SOURCE_OBJECT_TYPE") == vars.get("$field.DEST_OBJECT_TYPE"))
+    || !vars.get("$field.DEST_OBJECT_TYPE") && !vars.get("$field.DEST_RELATION_TITLE")))
+{
+    db.deleteData("AB_OBJECTRELATIONTYPE", type2Cond);
+}
+else
+{   // update if already existing
+    if (vars.get("$field.DIRECTION") != "same")
+    {    
+        for (let field in type2Fields) {
+            updates.push(["AB_OBJECTRELATIONTYPE", [field], null, [type2Fields[field]], type2Cond]);
+        }
     }
     else
-    {   // update if already existing
-        if (vars.get("$field.DIRECTION") != "same")
-        {    
-            for (let field in type2Fields) {
-                updates.push(["AB_OBJECTRELATIONTYPE", [field], null, [type2Fields[field]], type2Cond]);
-            }
-        }
-        else
-        {   // insert if it was "same" before
-            if ((vars.get("$field.SOURCE_RELATION_TITLE") != vars.get("$field.DEST_RELATION_TITLE") || vars.get("$field.SOURCE_OBJECT_TYPE") != vars.get("$field.DEST_OBJECT_TYPE"))
-            && vars.get("$field.DEST_OBJECT_TYPE") && vars.get("$field.DEST_RELATION_TITLE"))
-            {
-                db.insertData("AB_OBJECTRELATIONTYPE", [
-                    "AB_OBJECTRELATIONTYPEID",
-                    "OBJECT_TYPE",
-                    "RELATION_TITLE",
-                    "RELATION_TYPE",
-                    "SIDE",
-                    "HIERARCHY"
-                ], null, [
-                    util.getNewUUID(),
-                    vars.get("$field.DEST_OBJECT_TYPE"),
-                    vars.get("$field.DEST_RELATION_TITLE"),
-                    vars.get("$field.RELATION_TYPE"),
-                    2,
-                    vars.get("$field.HIERARCHY")
-                ]);
+    {   // insert if it was "same" before
+        if ((vars.get("$field.SOURCE_RELATION_TITLE") != vars.get("$field.DEST_RELATION_TITLE") || vars.get("$field.SOURCE_OBJECT_TYPE") != vars.get("$field.DEST_OBJECT_TYPE"))
+        && vars.get("$field.DEST_OBJECT_TYPE") && vars.get("$field.DEST_RELATION_TITLE"))
+        {
+            db.insertData("AB_OBJECTRELATIONTYPE", [
+                "AB_OBJECTRELATIONTYPEID",
+                "OBJECT_TYPE",
+                "RELATION_TITLE",
+                "RELATION_TYPE",
+                "SIDE",
+                "HIERARCHY"
+            ], null, [
+                util.getNewUUID(),
+                vars.get("$field.DEST_OBJECT_TYPE"),
+                vars.get("$field.DEST_RELATION_TITLE"),
+                vars.get("$field.RELATION_TYPE"),
+                2,
+                vars.get("$field.HIERARCHY")
+            ]);
 
-            }
         }
     }
-
-    db.updates(updates);
-}
-else
-{
-    // TODO: Show message hier nicht möglich: mit Grant-Prozess ausführung komplett verhindern, wenn es diese gibt.
-    //question.showMessage(translate.withArguments("There are still %0 relations using the type %1.", [usageCount, translate.text(vars.get("$field.SOURCE_RELATION_TITLE")) + " -> " + translate.text(vars.get("$field.DEST_RELATION_TITLE"))]), question.WARNING, translate.text("Cannot remove relation type"))
 }
 
+db.updates(updates);
-- 
GitLab