From 6059a60942951a0ff307331bc2a05d89427257db Mon Sep 17 00:00:00 2001
From: Johannes Hoermann <j.hoermann@adito.de>
Date: Wed, 19 Jun 2019 10:20:45 +0200
Subject: [PATCH] 360: add different context-filter for subcontexts

---
 .../recordcontainers/jdito/contentProcess.js  | 25 +++++++++++++------
 process/Context_lib/process.js                | 11 ++++----
 2 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/entity/360Degree_entity/recordcontainers/jdito/contentProcess.js b/entity/360Degree_entity/recordcontainers/jdito/contentProcess.js
index 70cbe95498e..953a229acb9 100644
--- a/entity/360Degree_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/360Degree_entity/recordcontainers/jdito/contentProcess.js
@@ -10,7 +10,7 @@ if (vars.exists("$param.ObjectType_param") && vars.get("$param.ObjectType_param"
 {
     
     var active;
-    var selectMap = ContextUtils.getSelectMap ()
+    var selectMap = ContextUtils.getSelectMap();
     if(vars.exists("$local.filter") && vars.get("$local.filter") )
     {
         var filter = vars.get("$local.filter");
@@ -28,7 +28,7 @@ if (vars.exists("$param.ObjectType_param") && vars.get("$param.ObjectType_param"
     var contextList = JSON.parse(vars.getString("$param.ObjectType_param"));
     var contactId = vars.get("$param.ObjectRowId_param");
     var baseContext = vars.exists("$param.BaseContextId_param") ? vars.get("$param.BaseContextId_param") : undefined;
-    result.object(_get360Data(baseContext, contactId, contextList, active, undefined, baseContext != undefined));
+    result.object(_get360Data(selectMap, baseContext, contactId, contextList, active, undefined, baseContext != undefined));
     
    
 } 
@@ -38,11 +38,20 @@ else
 }
 
 /** 
+ * load all data for the 360Degree tree.
+ * @param {Object} pSelectMap the select map (result of ContextUtils.getSelectMap())
+ * @param {String} pBaseContextId the ContextId in which this 360 Degree tree is located / for which the data should be loaded
+ * @param {String[]} pContactId the Contactid the 360 Degree tree should be loaded for
+ * @param {String[]} pContextList list of contexts to load. Note that subcontexts use their own list, defined in ContextUtils
+ * @param {Boolean} [pActive=undefined] if not undefined: it select only for active / inactive state
+ * @param {String[]} [pExcludedObjectIds=undefined] if set: this contextIds are filtered out.
  * @param {Boolean} [pAlsoAddFromSubcontexts=false] if true also load data from contexts which are configured as subcontexts.
  *  A subcontext is for example used by Organisations, which also load the data from all Persons in this organisation into the 360°-view.
  *  Does not include subcontexts of subcontexts
+ *  
+ *  @return {String[][]} the resulting data
  */
-function _get360Data(pBaseContextId, pContactId, pContextList, pActive, pExcludedObjectIds, pAlsoAddFromSubcontexts)
+function _get360Data(pSelectMap, pBaseContextId, pContactId, pContextList, pActive, pExcludedObjectIds, pAlsoAddFromSubcontexts)
 {   
     var resultList = [];
     pContextList.forEach(function (context) 
@@ -60,7 +69,7 @@ function _get360Data(pBaseContextId, pContactId, pContextList, pActive, pExclude
                 record[5] = translate.text(pActive);
             else
             {
-               if(selectMap[context].activeStates.indexOf(row[3]) > -1)    
+               if(pSelectMap[context].activeStates.indexOf(row[3]) > -1)    
                   record[5] = translate.text("true");
                else
                   record[5] = translate.text("false");
@@ -71,7 +80,7 @@ function _get360Data(pBaseContextId, pContactId, pContextList, pActive, pExclude
     
     if (pAlsoAddFromSubcontexts)
     {
-        var baseContextData = ContextUtils.getSelectMap()[pBaseContextId];
+        var baseContextData = pSelectMap[pBaseContextId];
         var subContexts = baseContextData.getSubContexts(pContactId);
 
         if (!pExcludedObjectIds)
@@ -81,13 +90,13 @@ function _get360Data(pBaseContextId, pContactId, pContextList, pActive, pExclude
         
         for (subContextId in subContexts)
         {
-            var subContextSql = subContexts[subContextId];
+            var subContextSql = subContexts[subContextId][0];
             // select Ids from subcontexts
             var subContextContactIds = db.array(db.COLUMN, subContextSql);
 
             subContextContactIds.forEach(function(pId) {
-                                                                                                         // V-- do not add subcontexts deeper than one layer
-                var subcontextRes = _get360Data(undefined, pId, pContextList, pActive, pExcludedObjectIds, false);
+                                                                                                                                        // V-- do not add subcontexts deeper than one layer
+                var subcontextRes = _get360Data(pSelectMap, pBaseContextId, pId, subContexts[subContextId][1], pActive, pExcludedObjectIds, false);
                 logging.log(subcontextRes.toSource())
                 resultList = resultList.concat(subcontextRes);
             });
diff --git a/process/Context_lib/process.js b/process/Context_lib/process.js
index ba247e4d8e9..f07f6a3eee6 100644
--- a/process/Context_lib/process.js
+++ b/process/Context_lib/process.js
@@ -242,8 +242,9 @@ function ContextSelector(pTableName, pIdField, pTitleExpression)
      * an object which contains the subcontexts and the prepared select to get the contactIds of them.
      *                                                                                V--With Tablename!
      * {                       V-- before id-condition | add "and", if needed --V     V-IdCollumn name   V-- optional after-condition SQL (e.g. group by etc.)
-     *   "Person": ["select PERSON_ID from CONTACT where PERSON_ID is not null and", "CONTACT.ORGANISATION_ID", ''],
-     *   "Offer" ...
+     *   "Person": ["select PERSON_ID from CONTACT where PERSON_ID is not null and", "CONTACT.ORGANISATION_ID", '', ["Offer", "Contract"]],
+     *                                                                                                            //  the contexts to show for this subcontext
+     *   "Offer" ... // you can add as many subcontexts as you wish
      * }
      * read-only property; set it with a matching setter
      * @property
@@ -299,9 +300,9 @@ ContextSelector.prototype.getSubContexts = function(pParentRowId)
         
         for (contextId in this.subContexts)
         {
-            sqls[contextId] = SqlCondition.begin()
+            sqls[contextId] = [SqlCondition.begin()
                                .andPrepare(this.subContexts[contextId][1], pParentRowId)
-                               .buildSql(this.subContexts[contextId][0], "1=2", this.subContexts[contextId][2], false);
+                               .buildSql(this.subContexts[contextId][0], "1=2", this.subContexts[contextId][2], false), this.subContexts[contextId][3]];
         }
         
         return sqls;
@@ -377,7 +378,7 @@ ContextUtils.getSelectMap  = function()
                                        .setJoinExpression("join CONTACT on ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID and CONTACT.PERSON_ID is null")
                                        .setCondition(SqlCondition.begin().and("ORGANISATION.ORGANISATIONID != '0'"))
                                        .setSubContexts({
-                                           "Person": ["select CONTACTID from CONTACT where PERSON_ID is not null and", "CONTACT.ORGANISATION_ID", '']
+                                           "Person": ["select CONTACTID from CONTACT where PERSON_ID is not null and", "CONTACT.ORGANISATION_ID", '', ["Offer", "Contract"]]
                                        })
             ,"Person": ContextSelector.create("CONTACT", "CONTACTID")
                                       .setTitleExpression(maskingUtils.concat([
-- 
GitLab