From 8daf340a1c17ef26ff072567dbb6851ceef86dcf Mon Sep 17 00:00:00 2001
From: Benjamin Ulrich <b.ulrich@adito.de>
Date: Wed, 12 Aug 2020 14:28:12 +0000
Subject: [PATCH] [Projekt: Entwicklung - Neon][TicketNr.:
 1060551][Standardadresse bleibt bei Firmenwechsel gleich]

---
 .../recordcontainers/db/onDBUpdate.js         | 42 ++++++++++++++++++-
 1 file changed, 41 insertions(+), 1 deletion(-)

diff --git a/entity/Person_entity/recordcontainers/db/onDBUpdate.js b/entity/Person_entity/recordcontainers/db/onDBUpdate.js
index 4268b8a017..126fccba8c 100644
--- a/entity/Person_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/Person_entity/recordcontainers/db/onDBUpdate.js
@@ -1,12 +1,52 @@
+import("Sql_lib");
 import("Workflow_lib");
 import("DataPrivacy_lib");
 import("system.tools");
+import("system.neon");
 import("system.vars");
 import("Person_lib");
 import("Communication_lib");
 import("Entity_lib");
 import("StandardObject_lib");
 
+var localChanged = vars.get("$local.changed");
+var orgChanged = false;
+for (var i = 0; i < localChanged.length; i++) {
+    if(localChanged[i] == "CONTACT.ORGANISATION_ID")
+    {
+        orgChanged = true;
+        break;
+    }
+}
+
+if(orgChanged)
+{
+    var orgAddressId = newSelect("CONTACT.ADDRESS_ID")
+                                    .from("CONTACT")
+                                    .where("CONTACT.ORGANISATION_ID",  vars.get("$field.ORGANISATION_ID"))
+                                    .and("CONTACT.PERSON_ID is null")
+                                    .cell();
+
+    var addressId = vars.get("$field.ADDRESS_ID");
+
+    if(addressId != orgAddressId) //update standard address if the the organisation changed
+    {
+        var persAddress = newSelect("ADDRESS.ADDRESSID")
+                                .from("ADDRESS")
+                                .where("ADDRESS.CONTACT_ID", vars.get("$field.CONTACTID"))
+                                .and("ADDRESS.ADDRESSID", addressId)
+                                .cell();
+
+        if(!persAddress) // only when the standard address is from the organisation
+        {
+            var standardAddressId = new StandardObject("Address", null, "Person", vars.get("$field.PERSONID"))
+                    .onPersonValueChange(vars.get("$field.ORGANISATION_ID"));
+
+            neon.setFieldValue("$field.ADDRESS_ID", standardAddressId);
+        }
+    }
+}
+
 var rowdata =  vars.get("$local.rowdata");
 // TODO: this is a workaround for missing possibility to react on changes of fields not connected to record Contqainer #1030023
 var uid = rowdata["CONTACT.CONTACTID"];
@@ -24,7 +64,7 @@ new StandardObject("Address", rowdata["CONTACT.ADDRESS_ID"], "Person", uid)
 var updates = [];
     
 // update user object if name changed
-vars.get("$local.changed").forEach(function(fieldName) 
+localChanged.forEach(function(fieldName) 
 {
     var nameProp = tools.LASTNAME;
     switch (fieldName) {
-- 
GitLab