From 42bf2f05d7f4f8ecbdbe319aa3f07bda32c6bc44 Mon Sep 17 00:00:00 2001
From: Benjamin Ulrich <b.ulrich@adito.de>
Date: Thu, 19 Aug 2021 07:38:26 +0000
Subject: [PATCH] [Projekt: xRM-Sales][TicketNr.: 1085057][Umsatzprognose aus
 Firmenfilter]

---
 .../Organisation_entity.aod                   |   9 +-
 .../children/openturnover/onActionProcess.js  |  22 ++
 entity/Turnover_entity/Turnover_entity.aod    |   2 +-
 entity/Turnover_entity/initFilterProcess.js   |  30 ++-
 .../_____LANGUAGE_EXTRA.aod                   |  21 ++
 .../_____LANGUAGE_de/_____LANGUAGE_de.aod     |   4 +
 .../_____LANGUAGE_en/_____LANGUAGE_en.aod     |  21 ++
 neonContext/Turnover/Turnover.aod             |   4 +
 ...ultiDataChartOrganisationGrouping_view.aod | 209 ++++++++++++++++++
 .../documentation.adoc                        |   6 +
 10 files changed, 320 insertions(+), 8 deletions(-)
 create mode 100644 entity/Organisation_entity/entityfields/filterviewactiongroup/children/openturnover/onActionProcess.js
 create mode 100644 neonView/TurnoverDynamicMultiDataChartOrganisationGrouping_view/TurnoverDynamicMultiDataChartOrganisationGrouping_view.aod
 create mode 100644 neonView/TurnoverDynamicMultiDataChartOrganisationGrouping_view/documentation.adoc

diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod
index cd75186ab89..2ceff6d0144 100644
--- a/entity/Organisation_entity/Organisation_entity.aod
+++ b/entity/Organisation_entity/Organisation_entity.aod
@@ -1187,6 +1187,13 @@
           <selectionType>UNBOUND</selectionType>
           <iconId>VAADIN:MONEY</iconId>
         </entityActionField>
+        <entityActionField>
+          <name>openTurnover</name>
+          <title>Open Turnover</title>
+          <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/openturnover/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <iconId>VAADIN:CHART</iconId>
+        </entityActionField>
         <entityActionField>
           <name>addAttributeToSelection</name>
           <title>Set attribute (use filter result)</title>
@@ -1315,7 +1322,7 @@
       </dependency>
       <children>
         <entityParameter>
-          <name>ContactId_param</name>
+          <name>ContactIds_param</name>
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/turnovers/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
diff --git a/entity/Organisation_entity/entityfields/filterviewactiongroup/children/openturnover/onActionProcess.js b/entity/Organisation_entity/entityfields/filterviewactiongroup/children/openturnover/onActionProcess.js
new file mode 100644
index 00000000000..369a9d04fef
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/filterviewactiongroup/children/openturnover/onActionProcess.js
@@ -0,0 +1,22 @@
+import("system.neon");
+import("Context_lib");
+import("FilterViewAction_lib");
+import("system.vars");
+
+var contactIds = [];
+var currentContext = ContextUtils.getCurrentContextId();
+
+if (vars.get("$sys.selection").length > 0)
+{
+    contactIds = vars.get("$sys.selection");
+}
+else
+{
+    contactIds = FilterViewActionUtils.getUidsByEntityFilter(currentContext, vars.get("$sys.filter"));
+}
+
+var params = {
+    "ContactIds_param": JSON.stringify(contactIds)
+};
+
+neon.openContext("Turnover", "TurnoverDynamicMultiDataChartOrganisationGrouping_view", null, neon.OPERATINGSTATE_SEARCH, params, null);
\ No newline at end of file
diff --git a/entity/Turnover_entity/Turnover_entity.aod b/entity/Turnover_entity/Turnover_entity.aod
index 3f19987dced..8f20baba778 100644
--- a/entity/Turnover_entity/Turnover_entity.aod
+++ b/entity/Turnover_entity/Turnover_entity.aod
@@ -201,7 +201,7 @@
       </children>
     </entityProvider>
     <entityParameter>
-      <name>ContactId_param</name>
+      <name>ContactIds_param</name>
       <expose v="true" />
     </entityParameter>
     <entityParameter>
diff --git a/entity/Turnover_entity/initFilterProcess.js b/entity/Turnover_entity/initFilterProcess.js
index b7905f93bee..3d13a60e2f3 100644
--- a/entity/Turnover_entity/initFilterProcess.js
+++ b/entity/Turnover_entity/initFilterProcess.js
@@ -6,10 +6,10 @@ import("Keyword_lib");
 import("KeywordRegistry_basic");
 import("system.result");
 
-var contactId = vars.get("$param.ContactId_param");
+var contactIds = vars.get("$param.ContactIds_param");
 var salesprojectId = vars.get("$param.SalesprojectIdDynamicChart_param");
 
-if(contactId || salesprojectId)
+if(contactIds || salesprojectId)
 {
     var filter = {
             type: "group",
@@ -24,11 +24,29 @@ if(contactId || salesprojectId)
             }]
         };
     
-    if(contactId)
+    if(contactIds)
     {
-        filter.childs[0].name = "ORGANISATION_ID";
-        filter.childs[0].key = contactId;
-        filter.childs[0].value = OrganisationUtils.getNameByContactId(contactId);
+        contactIds = JSON.parse(contactIds);
+        
+        filter.operator = "OR";
+        for (i = 0; i < contactIds.length; i++)
+        {
+            if(i != 0)
+            {
+                filter.childs.push({
+                                        type: "row",
+                                        name: null,
+                                        operator: "EQUAL",
+                                        contenttype: "TEXT",
+                                        key: null,
+                                        value: null
+                                    });
+            }
+            
+            filter.childs[i].name = "ORGANISATION_ID";
+            filter.childs[i].key = contactIds[i];
+            filter.childs[i].value = OrganisationUtils.getNameByContactId(contactIds[i]);
+        }
     }
     else if(salesprojectId)
     {
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index ad0a74378d8..c264c38136f 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -9496,6 +9496,27 @@
     <entry>
       <key>TrueType Font</key>
     </entry>
+    <entry>
+      <key>No recipient is marked for test run replacement.</key>
+    </entry>
+    <entry>
+      <key>Should a test email be sent to you instead?</key>
+    </entry>
+    <entry>
+      <key>Copy Recipients</key>
+    </entry>
+    <entry>
+      <key>copy</key>
+    </entry>
+    <entry>
+      <key>There are no test recipients.</key>
+    </entry>
+    <entry>
+      <key>The test run is not properly configured.</key>
+    </entry>
+    <entry>
+      <key>Open Turnover</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 86f1d20bd15..13fce6618cf 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -38,6 +38,10 @@
       <key>Default phone</key>
       <value>Standard Telefon</value>
     </entry>
+    <entry>
+      <key>Open Turnover</key>
+      <value>Umsatzprognose öffnen</value>
+    </entry>
     <entry>
       <key>Number of clicks</key>
       <value>Anzahl Klicks</value>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index 14758851ea7..1f456fce27c 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -9611,6 +9611,27 @@
     <entry>
       <key>TrueType Font</key>
     </entry>
+    <entry>
+      <key>No recipient is marked for test run replacement.</key>
+    </entry>
+    <entry>
+      <key>Should a test email be sent to you instead?</key>
+    </entry>
+    <entry>
+      <key>Copy Recipients</key>
+    </entry>
+    <entry>
+      <key>copy</key>
+    </entry>
+    <entry>
+      <key>There are no test recipients.</key>
+    </entry>
+    <entry>
+      <key>The test run is not properly configured.</key>
+    </entry>
+    <entry>
+      <key>Open Turnover</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/neonContext/Turnover/Turnover.aod b/neonContext/Turnover/Turnover.aod
index b1da34ccaf6..5b68846a330 100644
--- a/neonContext/Turnover/Turnover.aod
+++ b/neonContext/Turnover/Turnover.aod
@@ -22,5 +22,9 @@
       <name>d54348be-db01-4f89-ad3f-99ef35fa7e32</name>
       <view>TurnoverDynamicMultiDataChart_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>2356a379-c5d3-4eea-b81e-ad3eb70a7309</name>
+      <view>TurnoverDynamicMultiDataChartOrganisationGrouping_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonView/TurnoverDynamicMultiDataChartOrganisationGrouping_view/TurnoverDynamicMultiDataChartOrganisationGrouping_view.aod b/neonView/TurnoverDynamicMultiDataChartOrganisationGrouping_view/TurnoverDynamicMultiDataChartOrganisationGrouping_view.aod
new file mode 100644
index 00000000000..ccb59b7d2f9
--- /dev/null
+++ b/neonView/TurnoverDynamicMultiDataChartOrganisationGrouping_view/TurnoverDynamicMultiDataChartOrganisationGrouping_view.aod
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>TurnoverDynamicMultiDataChartOrganisationGrouping_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/neonView/TurnoverDynamicMultiDataChartOrganisationGrouping_view/documentation.adoc</documentation>
+  <filterable v="true" />
+  <layout>
+    <groupLayout>
+      <name>layout</name>
+    </groupLayout>
+  </layout>
+  <children>
+    <dynamicMultiDataChartViewTemplate>
+      <name>ColumnChart</name>
+      <chartType>COLUMN</chartType>
+      <yAxisLabel>Volume</yAxisLabel>
+      <defaultGroupFields>
+        <element>ORGANISATION_ID</element>
+      </defaultGroupFields>
+      <maxDBRow v="1000" />
+      <columns>
+        <neonDynamicMultiDataChartColumn>
+          <name>e799a70f-0d62-4871-bf78-208450514924</name>
+          <entityField>PLANNING_VOLUME</entityField>
+          <aggregateEntityField>PlanningVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>42754fbc-e0e4-4175-bed1-1b8a612f0b1a</name>
+          <entityField>FORECAST_VOLUME</entityField>
+          <aggregateEntityField>ForecastVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>7e55a377-7b61-47ce-a969-a0eec026eb4d</name>
+          <entityField>FORECAST_VOLUME_weighted</entityField>
+          <aggregateEntityField>ForecastVolumeWeighted_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>ef1322ac-a717-4a29-bda0-09bb2cafd124</name>
+          <entityField>TURNOVER_VOLUME</entityField>
+          <aggregateEntityField>TurnoverVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+      </columns>
+    </dynamicMultiDataChartViewTemplate>
+    <dynamicMultiDataChartViewTemplate>
+      <name>LineChart</name>
+      <chartType>LINE</chartType>
+      <yAxisLabel>Volume</yAxisLabel>
+      <defaultGroupFields>
+        <element>ORGANISATION_ID</element>
+      </defaultGroupFields>
+      <maxDBRow v="1000" />
+      <columns>
+        <neonDynamicMultiDataChartColumn>
+          <name>c89c74f6-97d2-407c-97bb-705badd0a47b</name>
+          <entityField>PLANNING_VOLUME</entityField>
+          <aggregateEntityField>PlanningVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>cb37d17b-0582-4858-b821-0d0bf9d31936</name>
+          <entityField>FORECAST_VOLUME</entityField>
+          <aggregateEntityField>ForecastVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>73faf8fc-faf8-469e-b9b8-50fc1784b759</name>
+          <entityField>FORECAST_VOLUME_weighted</entityField>
+          <aggregateEntityField>ForecastVolumeWeighted_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>6cc4169a-bf40-4bb6-b842-00b8dcf00e7c</name>
+          <entityField>TURNOVER_VOLUME</entityField>
+          <aggregateEntityField>TurnoverVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+      </columns>
+    </dynamicMultiDataChartViewTemplate>
+    <dynamicMultiDataChartViewTemplate>
+      <name>AreaChart</name>
+      <chartType>AREA</chartType>
+      <yAxisLabel>Volume</yAxisLabel>
+      <defaultGroupFields>
+        <element>ORGANISATION_ID</element>
+      </defaultGroupFields>
+      <maxDBRow v="1000" />
+      <columns>
+        <neonDynamicMultiDataChartColumn>
+          <name>a21fd450-e912-426d-a714-670d7cf238e7</name>
+          <entityField>PLANNING_VOLUME</entityField>
+          <aggregateEntityField>PlanningVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>4a2291ee-ede4-45c1-b1cc-1ed6e7a91e56</name>
+          <entityField>FORECAST_VOLUME</entityField>
+          <aggregateEntityField>ForecastVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>5dfa62d6-a0ff-4a10-a041-8de6fe9c635a</name>
+          <entityField>FORECAST_VOLUME_weighted</entityField>
+          <aggregateEntityField>ForecastVolumeWeighted_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>f2e8b9c6-fbda-4715-b118-311f9d5eeb12</name>
+          <entityField>TURNOVER_VOLUME</entityField>
+          <aggregateEntityField>TurnoverVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+      </columns>
+    </dynamicMultiDataChartViewTemplate>
+    <dynamicMultiDataChartViewTemplate>
+      <name>BarChart</name>
+      <chartType>BAR</chartType>
+      <yAxisLabel>Volume</yAxisLabel>
+      <defaultGroupFields>
+        <element>ORGANISATION_ID</element>
+      </defaultGroupFields>
+      <maxDBRow v="1000" />
+      <columns>
+        <neonDynamicMultiDataChartColumn>
+          <name>3157970c-538f-45d9-89ea-00d514c14e43</name>
+          <entityField>PLANNING_VOLUME</entityField>
+          <aggregateEntityField>PlanningVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>48aebea0-789c-40da-ab0a-e859f76c7ba0</name>
+          <entityField>FORECAST_VOLUME</entityField>
+          <aggregateEntityField>ForecastVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>2138239a-aba5-4d49-84cb-f4cd03be0a09</name>
+          <entityField>FORECAST_VOLUME_weighted</entityField>
+          <aggregateEntityField>ForecastVolumeWeighted_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>d8e81828-77cd-4066-a924-b9a7b3bd4fbf</name>
+          <entityField>TURNOVER_VOLUME</entityField>
+          <aggregateEntityField>TurnoverVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+      </columns>
+    </dynamicMultiDataChartViewTemplate>
+    <dynamicMultiDataChartViewTemplate>
+      <name>SplineChart</name>
+      <chartType>SPLINE</chartType>
+      <yAxisLabel>Volume</yAxisLabel>
+      <defaultGroupFields>
+        <element>ORGANISATION_ID</element>
+      </defaultGroupFields>
+      <maxDBRow v="1000" />
+      <columns>
+        <neonDynamicMultiDataChartColumn>
+          <name>7481739d-d6e6-4c48-bcae-8b593d8d6834</name>
+          <entityField>PLANNING_VOLUME</entityField>
+          <aggregateEntityField>PlanningVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>fa8e7b00-0a3e-42c9-8848-8e6e423cbe1a</name>
+          <entityField>FORECAST_VOLUME</entityField>
+          <aggregateEntityField>ForecastVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>ff7437b9-b517-482a-a1fa-814bc58acfe9</name>
+          <entityField>FORECAST_VOLUME_weighted</entityField>
+          <aggregateEntityField>ForecastVolumeWeighted_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>b3ed1ac2-5449-4dd6-b45d-372ffeaff6c8</name>
+          <entityField>TURNOVER_VOLUME</entityField>
+          <aggregateEntityField>TurnoverVolume_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+      </columns>
+    </dynamicMultiDataChartViewTemplate>
+    <treeTableViewTemplate>
+      <name>TreeTable</name>
+      <showChildrenCount v="false" />
+      <defaultGroupFields>
+        <element>ORGANISATION_ID</element>
+      </defaultGroupFields>
+      <isCreatable v="false" />
+      <isDeletable v="false" />
+      <isEditable v="false" />
+      <columns>
+        <neonTreeTableColumn>
+          <name>96b1a5cf-a9d2-4082-bff7-664a16bfefb7</name>
+          <entityField>GroupField</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>3b98f8bc-643c-4fa9-be27-e1770cfb04f0</name>
+          <entityField>PLANNING_VOLUME</entityField>
+          <aggregateEntityField>PlanningVolume_aggregate</aggregateEntityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>f5279d1a-1794-4d1e-9821-a1bb37188bc1</name>
+          <entityField>FORECAST_VOLUME</entityField>
+          <aggregateEntityField>ForecastVolume_aggregate</aggregateEntityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>989c33e7-1833-44c3-94f6-81c2d09049dc</name>
+          <entityField>FORECAST_VOLUME_weighted</entityField>
+          <aggregateEntityField>ForecastVolumeWeighted_aggregate</aggregateEntityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>91d3962e-1d4b-4923-bbd5-ed6e2453d1d2</name>
+          <entityField>TURNOVER_VOLUME</entityField>
+          <aggregateEntityField>TurnoverVolume_aggregate</aggregateEntityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>80ec8777-8d68-4904-922d-1a7045fb5a5c</name>
+          <entityField>emptyField</entityField>
+        </neonTreeTableColumn>
+      </columns>
+    </treeTableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/TurnoverDynamicMultiDataChartOrganisationGrouping_view/documentation.adoc b/neonView/TurnoverDynamicMultiDataChartOrganisationGrouping_view/documentation.adoc
new file mode 100644
index 00000000000..d82264b3cd8
--- /dev/null
+++ b/neonView/TurnoverDynamicMultiDataChartOrganisationGrouping_view/documentation.adoc
@@ -0,0 +1,6 @@
+== TurnoverDynamicMultiDataChartOrganisationGrouping_view
+
+This View is no different to TurnoverDynamicMultiDataChart_view except the defaultGroupFields: the normal view has the YEAR set, 
+and the viewtemplates of this view have the ORGANISATION_ID set.
+Reason being, that we want to have the organisation set as defaultGroupField when usng the "openTurnover" action from Organisation_entity.
+There currently is no way of dynamically changing the defaultGroupField, so this very similar view has to exist.
\ No newline at end of file
-- 
GitLab