From 888a1589d5374779510c66e3e25c31cc6b3cad1f Mon Sep 17 00:00:00 2001
From: Johannes Hoermann <j.hoermann@adito.de>
Date: Thu, 25 Apr 2019 14:43:22 +0200
Subject: [PATCH] Cost to campaignstep, filter category keyword

---
 .../CampaignCost_entitiy.aod                   |  4 ++++
 .../valueProcess.js                            | 18 ++++++++++++++++++
 .../netperparticipant/valueProcess.js          |  2 +-
 .../CampaignStep_entity.aod                    | 10 ++++++++++
 .../cost.value/expression.js                   |  3 +++
 .../KeywordEntry_entity.aod                    |  6 ++++++
 .../documentation.adoc                         |  2 ++
 .../recordcontainers/db/conditionProcess.js    |  4 ++++
 .../CampaignStepPreview_view.aod               |  4 ++++
 9 files changed, 52 insertions(+), 1 deletion(-)
 create mode 100644 entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js
 create mode 100644 entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/cost.value/expression.js
 create mode 100644 entity/KeywordEntry_entity/entityfields/excludedkeyidssubquery_param/documentation.adoc

diff --git a/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod b/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod
index a280adae7f0..3896ae9bcc6 100644
--- a/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod
+++ b/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod
@@ -147,6 +147,10 @@
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
+        <entityParameter>
+          <name>ExcludedKeyIdsSubquery_param</name>
+          <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js</valueProcess>
+        </entityParameter>
       </children>
     </entityConsumer>
     <entityActionGroup>
diff --git a/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js
new file mode 100644
index 00000000000..f9fdcc7295c
--- /dev/null
+++ b/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js
@@ -0,0 +1,18 @@
+import("system.neon");
+import("system.vars");
+import("system.db");
+import("Sql_lib");
+import("system.result");
+
+var cond = SqlCondition.begin()
+                       .andPrepareVars("CAMPAIGNCOST.CAMPAIGN_ID", "$field.CAMPAIGN_ID");
+
+if (vars.get("$field.CAMPAIGNSTEP_ID"))
+    cond.andPrepareVars("CAMPAIGNCOST.CAMPAIGNSTEP_ID", "$field.CAMPAIGNSTEP_ID");
+else
+    cond.and("CAMPAIGNCOST.CAMPAIGNSTEP_ID is null")
+    
+if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW)
+    cond.andPrepareVars("CAMPAIGNCOST.CAMPAIGNCOSTID", "$field.CAMPAIGNCOSTID", "# <> ?");
+
+result.string(db.translateStatement(cond.buildSql("select CATEGORY from CAMPAIGNCOST", "1=2", "group by CATEGORY")));
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/netperparticipant/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/netperparticipant/valueProcess.js
index 21c35016923..f3dedbcae4b 100644
--- a/entity/CampaignCost_entitiy/entityfields/netperparticipant/valueProcess.js
+++ b/entity/CampaignCost_entitiy/entityfields/netperparticipant/valueProcess.js
@@ -5,7 +5,7 @@ import("system.eMath");
 var netto = parseFloat(vars.get("$field.NET"));
 var countParticipants = parseFloat(vars.get("$field.countParticipants"));
 
-if (countParticipants > 0)
+if (netto && countParticipants &&countParticipants > 0)
     result.string(eMath.roundDec(netto / countParticipants, 2, eMath.ROUND_HALF_UP));
 else
     result.string(0);
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/CampaignStep_entity.aod b/entity/CampaignStep_entity/CampaignStep_entity.aod
index 96cb0aedca3..19cea84b443 100644
--- a/entity/CampaignStep_entity/CampaignStep_entity.aod
+++ b/entity/CampaignStep_entity/CampaignStep_entity.aod
@@ -218,6 +218,12 @@
         </entityParameter>
       </children>
     </entityConsumer>
+    <entityField>
+      <name>COST</name>
+      <title>Cost</title>
+      <contentType>NUMBER</contentType>
+      <outputFormat>#,##0.00</outputFormat>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -295,6 +301,10 @@
           <name>DESCRIPTION.value</name>
           <recordfield>CAMPAIGNSTEP.DESCRIPTION</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>COST.value</name>
+          <expression>%aditoprj%/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/cost.value/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/cost.value/expression.js b/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/cost.value/expression.js
new file mode 100644
index 00000000000..90244a5bfed
--- /dev/null
+++ b/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/cost.value/expression.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("(select sum(NET) from CAMPAIGNCOST where CAMPAIGNCOST.CAMPAIGN_ID = CAMPAIGNSTEP.CAMPAIGN_ID and CAMPAIGNCOST.CAMPAIGNSTEP_ID = CAMPAIGNSTEP.CAMPAIGNSTEPID)")
\ No newline at end of file
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index 61a86af519a..6f3c591388a 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -445,6 +445,12 @@
         </entityParameter>
       </children>
     </entityConsumer>
+    <entityParameter>
+      <name>ExcludedKeyIdsSubquery_param</name>
+      <expose v="true" />
+      <documentation>%aditoprj%/entity/KeywordEntry_entity/entityfields/excludedkeyidssubquery_param/documentation.adoc</documentation>
+      <description>PARAMETER</description>
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/KeywordEntry_entity/entityfields/excludedkeyidssubquery_param/documentation.adoc b/entity/KeywordEntry_entity/entityfields/excludedkeyidssubquery_param/documentation.adoc
new file mode 100644
index 00000000000..5eb6c62c6b9
--- /dev/null
+++ b/entity/KeywordEntry_entity/entityfields/excludedkeyidssubquery_param/documentation.adoc
@@ -0,0 +1,2 @@
+Can be filled with a subquery-string, which delivers KeyIds to exclude.
+The subquery is used insade a "KEYID not in(...)" 
\ No newline at end of file
diff --git a/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js b/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js
index 4fb1ef2f327..e027aee8210 100644
--- a/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js
@@ -1,3 +1,4 @@
+import("system.logging");
 import("system.vars");
 import("system.db");
 import("system.result");
@@ -10,5 +11,8 @@ if (vars.get("$param.OnlyActives_param") == "true")
     cond.andPrepare("AB_KEYWORD_ENTRY.ISACTIVE", "1");
 }
 
+if (vars.exists("$param.ExcludedKeyIdsSubquery_param") && vars.get("$param.ExcludedKeyIdsSubquery_param"))
+    cond.and("AB_KEYWORD_ENTRY.KEYID not in (" + vars.get("$param.ExcludedKeyIdsSubquery_param") + ")");
+
 var condStr = db.translateCondition(cond.build("1 = 1"));
 result.string(condStr);
\ No newline at end of file
diff --git a/neonView/CampaignStepPreview_view/CampaignStepPreview_view.aod b/neonView/CampaignStepPreview_view/CampaignStepPreview_view.aod
index cbf63b52c35..d9ab350b2ee 100644
--- a/neonView/CampaignStepPreview_view/CampaignStepPreview_view.aod
+++ b/neonView/CampaignStepPreview_view/CampaignStepPreview_view.aod
@@ -35,6 +35,10 @@
           <name>88fbd366-0107-44b7-8d9c-f4fee89c0637</name>
           <entityField>CampaignStatus</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>27558e2a-a377-4126-a29d-422d2d5a44b4</name>
+          <entityField>COST</entityField>
+        </entityFieldLink>
       </fields>
     </genericViewTemplate>
   </children>
-- 
GitLab