From 5cd9eab5871af547929f3f872f3a9112e5a748aa Mon Sep 17 00:00:00 2001
From: "b.ulrich" <b.ulrich@adito.de>
Date: Thu, 17 Dec 2020 08:54:37 +0100
Subject: [PATCH] =?UTF-8?q?[Projekt:=20Entwicklung=20-=20xRM][TicketNr.:?=
 =?UTF-8?q?=201065476][Kontakt=20mit=20mehreren=20Funktionen=20kann=20nich?=
 =?UTF-8?q?t=20gel=C3=B6scht=20werden]?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 entity/Person_entity/Person_entity.aod        |  7 ++++
 .../deletefunction/onActionProcess.js         | 40 +++++++++++++++++++
 .../deletefunction/stateProcess.js            | 20 ++++++++++
 .../_____LANGUAGE_EXTRA.aod                   |  3 ++
 .../_____LANGUAGE_de/_____LANGUAGE_de.aod     |  8 ++--
 .../_____LANGUAGE_en/_____LANGUAGE_en.aod     |  3 ++
 6 files changed, 77 insertions(+), 4 deletions(-)
 create mode 100644 entity/Person_entity/entityfields/deletefunction/onActionProcess.js
 create mode 100644 entity/Person_entity/entityfields/deletefunction/stateProcess.js

diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod
index ccb951171b0..c75998fdf57 100644
--- a/entity/Person_entity/Person_entity.aod
+++ b/entity/Person_entity/Person_entity.aod
@@ -7,6 +7,7 @@
   <title>Contact</title>
   <siblings>
     <element>Address_entity</element>
+    <element>Contact_entity</element>
   </siblings>
   <grantDeleteProcess>%aditoprj%/entity/Person_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Person_entity/contentTitleProcess.js</contentTitleProcess>
@@ -1415,6 +1416,12 @@
         <fieldName>#PROVIDER</fieldName>
       </dependency>
     </entityConsumer>
+    <entityActionField>
+      <name>deleteFunction</name>
+      <title>Delete this Function</title>
+      <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/deletefunction/onActionProcess.js</onActionProcess>
+      <stateProcess>%aditoprj%/entity/Person_entity/entityfields/deletefunction/stateProcess.js</stateProcess>
+    </entityActionField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/Person_entity/entityfields/deletefunction/onActionProcess.js b/entity/Person_entity/entityfields/deletefunction/onActionProcess.js
new file mode 100644
index 00000000000..083e2d8b0d3
--- /dev/null
+++ b/entity/Person_entity/entityfields/deletefunction/onActionProcess.js
@@ -0,0 +1,40 @@
+import("system.entities");
+import("system.neon");
+import("Workflow_lib");
+import("Context_lib");
+import("DuplicateScanner_lib");
+import("Sql_lib");
+import("system.vars");
+
+var personId = vars.get("$field.PERSONID");
+
+var contactIds = newSelect("count(CONTACT.CONTACTID)")
+                            .from("CONTACT")
+                            .join("PERSON", "CONTACT.PERSON_ID = PERSON.PERSONID")
+                            .where("PERSON.PERSONID", personId)
+                            .cell();
+if(contactIds > 1)
+{
+    var contactId = vars.get("$field.CONTACTID");
+
+    var config = entities.createConfigForDeletingRows().entity("Contact_entity").uid(contactId);
+    
+    entities.deleteRow(config);
+    
+    DuplicateScannerUtils.deleteCachedDuplicate(contactId);
+
+    new AttributeRelationQuery(contactId, null, ContextUtils.getCurrentContextId())
+        .deleteAllAttributes();
+
+    newWhere("COMMUNICATION.CONTACT_ID", contactId).deleteData();
+    newWhere("ADDRESS.CONTACT_ID", contactId).deleteData();
+    newWhere("COMMRESTRICTION.CONTACT_ID", contactId).deleteData();
+    newWhere("AB_APPOINTMENTLINK.OBJECT_TYPE", "Person")
+    .and("AB_APPOINTMENTLINK.OBJECT_ROWID", contactId).deleteData();
+    newWhere("AB_ATTRIBUTERELATION.OBJECT_TYPE", "Person")
+    .and("AB_ATTRIBUTERELATION.OBJECT_ROWID", contactId).deleteData();
+
+    WorkflowSignalSender.deleted();
+    
+    neon.closeImage(vars.get("$sys.currentimage"), true); //ToDo: #1070797 This should probably not be necessary 
+}
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/deletefunction/stateProcess.js b/entity/Person_entity/entityfields/deletefunction/stateProcess.js
new file mode 100644
index 00000000000..d1b946d06bd
--- /dev/null
+++ b/entity/Person_entity/entityfields/deletefunction/stateProcess.js
@@ -0,0 +1,20 @@
+import("system.result");
+import("system.neon");
+import("Sql_lib");
+import("system.vars");
+
+var res = neon.COMPONENTSTATE_DISABLED;
+
+var personId = vars.get("$field.PERSONID");
+
+var contactIds = newSelect("count(CONTACT.CONTACTID)")
+                            .from("CONTACT")
+                            .join("PERSON", "CONTACT.PERSON_ID = PERSON.PERSONID")
+                            .where("PERSON.PERSONID", personId)
+                            .cell();
+if(contactIds > 1)
+{
+    res = neon.COMPONENTSTATE_EDITABLE;
+}
+
+result.string(res);
\ No newline at end of file
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index 375e6f26967..c8f697eb37c 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -7587,6 +7587,9 @@
     <entry>
       <key>The team must have at least one owner</key>
     </entry>
+    <entry>
+      <key>Delete this Function</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
   <sqlModels>
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index b1e9c45fd04..48811b948ee 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -8381,7 +8381,6 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>Subcategory</key>
-      <value>Unterkategorie</value>
     </entry>
     <entry>
       <key>The radius has to be at least %0.</key>
@@ -9542,6 +9541,10 @@ Bitte Datumseingabe prüfen</value>
       <key>Date (Month)</key>
       <value>Datum (Monat)</value>
     </entry>
+    <entry>
+      <key>Delete this Function</key>
+      <value>Diese Funktion löschen</value>
+    </entry>
     <entry>
       <key>Date (Year)</key>
       <value>Datum (Jahr)</value>
@@ -10000,9 +10003,6 @@ Bitte Datumseingabe prüfen</value>
     <entry>
       <key>My campaigns</key>
     </entry>
-    <entry>
-      <key>Subcategory</key>
-    </entry>
     <entry>
       <key>Campaign costs</key>
     </entry>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index e27607261ac..56cb1721db2 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -7668,6 +7668,9 @@
     <entry>
       <key>The team must have at least one owner</key>
     </entry>
+    <entry>
+      <key>Delete this Function</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
-- 
GitLab