From a0a78de1f12f3f8522796854e2d9ba4bacbd3381 Mon Sep 17 00:00:00 2001
From: "j.goderbauer" <j.goderbauer@adito.de>
Date: Wed, 9 Sep 2020 09:10:37 +0200
Subject: [PATCH] Organisation_entity: Index bugfix: standard phone and
 standard email stored too much values

---
 .../Organisation_entity.aod                   |  4 +--
 .../recordcontainers/index/query.js           | 29 ++++++++++++-------
 2 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod
index 6bb2df593c2..deb5ee36417 100644
--- a/entity/Organisation_entity/Organisation_entity.aod
+++ b/entity/Organisation_entity/Organisation_entity.aod
@@ -1601,7 +1601,7 @@
           <additionalFieldNameAliases>
             <element>email</element>
           </additionalFieldNameAliases>
-          <isMultiValued v="true" />
+          <isMultiValued v="false" />
         </indexRecordFieldMapping>
         <indexRecordFieldMapping>
           <name>STANDARD_PHONE_COMMUNICATION.value</name>
@@ -1609,7 +1609,7 @@
           <additionalFieldNameAliases>
             <element>phone</element>
           </additionalFieldNameAliases>
-          <isMultiValued v="true" />
+          <isMultiValued v="false" />
         </indexRecordFieldMapping>
         <indexRecordFieldMapping>
           <name>ADDRESS_ID.displayValue</name>
diff --git a/entity/Organisation_entity/recordcontainers/index/query.js b/entity/Organisation_entity/recordcontainers/index/query.js
index e860656afa3..0bc707c2167 100644
--- a/entity/Organisation_entity/recordcontainers/index/query.js
+++ b/entity/Organisation_entity/recordcontainers/index/query.js
@@ -15,17 +15,18 @@ You may want to check out if your change affects other modules. However adding m
  */
 
 var commMediumPhoneIds = CommUtil.getMediumIdsByCategory("PHONE");
+var commMediumMailIds = CommUtil.getMediumIdsByCategory("EMAIL");
 var sqlHelper = new SqlMaskingUtils();
 var querySelect = newSelect([
         "CONTACT.CONTACTID",
         sqlHelper.concat(["ORGANISATION.NAME", "'|'", "ORGANISATION.CUSTOMERCODE"]),
         sqlHelper.concat([
-            sqlHelper.concat(["defaultAddress.ADDRESS", "defaultAddress.BUILDINGNO", "'-'"
-                ,"defaultAddress.COUNTRY", "defaultAddress.ZIP", "defaultAddress.CITY"]),
+            sqlHelper.concat(["standardAddress.ADDRESS", "standardAddress.BUILDINGNO", "'-'"
+                ,"standardAddress.COUNTRY", "standardAddress.ZIP", "standardAddress.CITY"]),
             sqlHelper.concat(["'" + translate.text("Phone") + ":'", "(" + CommUtil.getStandardSubSqlPhone() + ")"]),
             sqlHelper.concat(["'" + translate.text("Email") + ":'", "(" + CommUtil.getStandardSubSqlMail() + ")"])
         ], " | "),
-        sqlHelper.concat([sqlHelper.cast("defaultAddress.LAT", SQLTYPES.VARCHAR, 16), sqlHelper.cast("defaultAddress.LON", SQLTYPES.VARCHAR, 16)], ","),
+        sqlHelper.concat([sqlHelper.cast("standardAddress.LAT", SQLTYPES.VARCHAR, 16), sqlHelper.cast("standardAddress.LON", SQLTYPES.VARCHAR, 16)], ","),
         //additional indexed fields
         "ORGANISATION.NAME",
         sqlHelper.trim("ORGANISATION.ORGANISATIONID"),//trim to enable filter patterns like: >> -organisationid_value:0<<
@@ -35,19 +36,27 @@ var querySelect = newSelect([
         "ADDRESS.COUNTRY",
         "ADDRESS.ZIP",
         "ADDRESS.CITY",
-        "COMMUNICATION.ADDR",
-        "PHONE.ADDR",
-        sqlHelper.concat([sqlHelper.concat(["defaultAddress.ADDRESS", "defaultAddress.BUILDINGNO"])
-            ,sqlHelper.concat(["defaultAddress.COUNTRY", "defaultAddress.ZIP", "defaultAddress.CITY"])
+        "standardEmail.ADDR",
+        "standardPhone.ADDR",
+        sqlHelper.concat([sqlHelper.concat(["standardAddress.ADDRESS", "standardAddress.BUILDINGNO"])
+            ,sqlHelper.concat(["standardAddress.COUNTRY", "standardAddress.ZIP", "standardAddress.CITY"])
         ], " - ")
     ])
     .from("ORGANISATION")
     .join("CONTACT", "CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID and CONTACT.PERSON_ID is null")
-    .leftJoin("ADDRESS", "defaultAddress.ADDRESSID = CONTACT.ADDRESS_ID", "defaultAddress")
+    .leftJoin("ADDRESS", "standardAddress.ADDRESSID = CONTACT.ADDRESS_ID", "standardAddress")
     .leftJoin("ADDRESS", "ADDRESS.CONTACT_ID = CONTACT.CONTACTID")
     .leftJoin("COMMUNICATION", "COMMUNICATION.CONTACT_ID = CONTACT.CONTACTID")
-    .leftJoin("COMMUNICATION", newWhere("phone.CONTACT_ID = CONTACT.CONTACTID")
-        .and(["COMMUNICATION", "MEDIUM_ID", "phone"], commMediumPhoneIds, SqlBuilder.IN()), "phone")
+    //standardMail is not multi valued and can only old one value (the standard email address)
+    .leftJoin("COMMUNICATION", newWhere("standardEmail.CONTACT_ID = CONTACT.CONTACTID")
+            .and(["COMMUNICATION", "MEDIUM_ID", "standardEmail"], commMediumMailIds, SqlBuilder.IN())
+            .and(["COMMUNICATION", "ISSTANDARD", "standardEmail"], "1")
+        , "standardEmail")
+    //standardPhone is not multi valued and can only old one value (the standard phone number)
+    .leftJoin("COMMUNICATION", newWhere("standardPhone.CONTACT_ID = CONTACT.CONTACTID")
+            .and(["COMMUNICATION", "MEDIUM_ID", "standardPhone"], commMediumPhoneIds, SqlBuilder.IN())
+            .and(["COMMUNICATION", "ISSTANDARD", "standardPhone"], "1")
+        , "standardPhone")
     .where("CONTACT.STATUS", $KeywordRegistry.contactStatus$inactive(), SqlBuilder.NOT_EQUAL());
 
 if (vars.exists("$local.idvalue") && vars.get("$local.idvalue") && vars.get("$local.idvalue").length > 0) 
-- 
GitLab