From e5f6925c971e74826bd269bb247a12606bc71992 Mon Sep 17 00:00:00 2001
From: "d.buechler" <d.buechler@adito.de>
Date: Thu, 23 May 2019 11:30:53 +0200
Subject: [PATCH] =?UTF-8?q?Es=20wurde=20das=20"CampaignCost=5Fentitiy"=20i?=
 =?UTF-8?q?n=20"CampaignCost=5Fentity"=20umbenannt.=20Dadurch=20wurde=20di?=
 =?UTF-8?q?ese=20ganzen=20Dateien=20wie=20im=20Commit=20zu=20sehen=20als?=
 =?UTF-8?q?=20gel=C3=B6scht=20und=20angepasst.=20Sollte=20das=20hier=20zu?=
 =?UTF-8?q?=20fehler=20f=C3=BChren=20muss=20der=20Commit=20R=C3=BCckg?=
 =?UTF-8?q?=C3=A4ngig=20gemacht=20werden?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../CampaignCost_entity.aod                   | 310 ++++++++++++++++++
 .../afterOperatingState.js                    |   7 +
 .../alter/children/edit/onActionProcess.js    |   7 +
 .../campaign_id/displayValueProcess.js        |   9 +
 .../entityfields/campaign_id/valueProcess.js  |   8 +
 .../campaigncostid/valueProcess.js            |   7 +
 .../campaignsteps_param/valueProcess.js       |   2 +
 .../campaignstep_id/displayValueProcess.js    |  20 ++
 .../campaignstep_id/mandatoryProcess.js       |   7 +
 .../campaignstep_id/onValueChange.js          |   3 +
 .../campaignstep_id/stateProcess.js           |  13 +
 .../campaignstep_id/valueProcess.js           |   8 +
 .../children/campaignid_param/valueProcess.js |   4 +
 .../campaignsteps_param/documentation.adoc    |   2 +
 .../category/displayValueProcess.js           |   6 +
 .../countparticipants/valueProcess.js         |  12 +
 .../entityfields/date_edit/valueProcess.js    |   7 +
 .../entityfields/date_new/valueProcess.js     |   7 +
 .../containername_param/valueProcess.js       |   4 +
 .../valueProcess.js                           |  18 +
 .../netperparticipant/titleProcess.js         |   4 +
 .../netperparticipant/valueProcess.js         |  11 +
 .../campaignsteps_param/valueProcess.js       |   3 +
 .../entityfields/user_edit/valueProcess.js    |   7 +
 .../entityfields/user_new/valueProcess.js     |   7 +
 .../recordcontainers/db/conditionProcess.js   |  22 ++
 .../recordcontainers/db/fromClauseProcess.js  |   3 +
 .../recordcontainers/db/orderClauseProcess.js |   4 +
 .../category.displayvalue/expression.js       |   6 +
 .../CampaignStep_entity.aod                   |   4 +-
 entity/Campaign_entity/Campaign_entity.aod    |   6 +-
 .../KeywordEntry_entity.aod                   |   2 +-
 neonContext/CampaignCost/CampaignCost.aod     |   2 +-
 33 files changed, 535 insertions(+), 7 deletions(-)
 create mode 100644 entity/CampaignCost_entity/CampaignCost_entity.aod
 create mode 100644 entity/CampaignCost_entity/afterOperatingState.js
 create mode 100644 entity/CampaignCost_entity/entityfields/alter/children/edit/onActionProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/campaign_id/displayValueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/campaign_id/valueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/campaigncostid/valueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/campaigncosts/children/campaignsteps_param/valueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/campaignstep_id/displayValueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/campaignstep_id/mandatoryProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/campaignstep_id/onValueChange.js
 create mode 100644 entity/CampaignCost_entity/entityfields/campaignstep_id/stateProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/campaignstep_id/valueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/campaignsteps/children/campaignid_param/valueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/campaignsteps_param/documentation.adoc
 create mode 100644 entity/CampaignCost_entity/entityfields/category/displayValueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/countparticipants/valueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/date_edit/valueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/date_new/valueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/containername_param/valueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/netperparticipant/titleProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/netperparticipant/valueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/stepcosts/children/campaignsteps_param/valueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/user_edit/valueProcess.js
 create mode 100644 entity/CampaignCost_entity/entityfields/user_new/valueProcess.js
 create mode 100644 entity/CampaignCost_entity/recordcontainers/db/conditionProcess.js
 create mode 100644 entity/CampaignCost_entity/recordcontainers/db/fromClauseProcess.js
 create mode 100644 entity/CampaignCost_entity/recordcontainers/db/orderClauseProcess.js
 create mode 100644 entity/CampaignCost_entity/recordcontainers/db/recordfieldmappings/category.displayvalue/expression.js

diff --git a/entity/CampaignCost_entity/CampaignCost_entity.aod b/entity/CampaignCost_entity/CampaignCost_entity.aod
new file mode 100644
index 0000000000..e6b0411599
--- /dev/null
+++ b/entity/CampaignCost_entity/CampaignCost_entity.aod
@@ -0,0 +1,310 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.5" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.5">
+  <name>CampaignCost_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <afterOperatingState>%aditoprj%/entity/CampaignCost_entity/afterOperatingState.js</afterOperatingState>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>CAMPAIGNCOSTID</name>
+      <mandatory v="true" />
+      <searchable v="false" />
+      <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/campaigncostid/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>CAMPAIGN_ID</name>
+      <title>Campaign</title>
+      <consumer>Campaigns</consumer>
+      <mandatory v="true" />
+      <groupable v="true" />
+      <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/campaign_id/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/campaign_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>CAMPAIGNSTEP_ID</name>
+      <title>Campaign Step</title>
+      <consumer>CampaignSteps</consumer>
+      <mandatoryProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/campaignstep_id/mandatoryProcess.js</mandatoryProcess>
+      <groupable v="true" />
+      <stateProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/campaignstep_id/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/campaignstep_id/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/campaignstep_id/displayValueProcess.js</displayValueProcess>
+      <onValueChange>%aditoprj%/entity/CampaignCost_entity/entityfields/campaignstep_id/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+      </onValueChangeTypes>
+    </entityField>
+    <entityField>
+      <name>CATEGORY</name>
+      <title>Category</title>
+      <consumer>KeywordCampaignManagementCostCategory</consumer>
+      <mandatory v="true" />
+      <groupable v="true" />
+      <displayValueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/category/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>NET</name>
+      <title>Cost</title>
+      <contentType>NUMBER</contentType>
+      <outputFormat>#,##0.00</outputFormat>
+      <inputFormat>#,##0.00</inputFormat>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>USER_NEW</name>
+      <mandatory v="true" />
+      <searchable v="false" />
+      <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/user_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+      <mandatory v="true" />
+      <searchable v="false" />
+      <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/date_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_EDIT</name>
+      <searchable v="false" />
+      <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/user_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_EDIT</name>
+      <searchable v="false" />
+      <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/date_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityProvider>
+      <name>CampaignCosts</name>
+      <fieldType>DEPENDENCY_IN</fieldType>
+      <dependencies>
+        <entityDependency>
+          <name>7131288b-af5c-4914-96f5-c5d70217fc23</name>
+          <entityName>Campaign_entity</entityName>
+          <fieldName>CampaignCosts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+      <children>
+        <entityParameter>
+          <name>CampaignStepId_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>Uid_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>CampaignId_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>CampaignSteps_param</name>
+          <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/campaigncosts/children/campaignsteps_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
+    </entityProvider>
+    <entityProvider>
+      <name>StepCosts</name>
+      <fieldType>DEPENDENCY_IN</fieldType>
+      <dependencies>
+        <entityDependency>
+          <name>af147f3e-a1bd-4eb0-9ac8-325dbdaba17d</name>
+          <entityName>CampaignStep_entity</entityName>
+          <fieldName>CampaignStepCosts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>2a92b738-c0bb-4c14-9915-aff9e18effaf</name>
+          <entityName>Campaign_entity</entityName>
+          <fieldName>CampaignStepCosts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+      <children>
+        <entityParameter>
+          <name>CampaignStepId_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>Uid_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>CampaignId_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>CampaignSteps_param</name>
+          <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/stepcosts/children/campaignsteps_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
+    </entityProvider>
+    <entityConsumer>
+      <name>Campaigns</name>
+      <fieldType>DEPENDENCY_OUT</fieldType>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Campaign_entity</entityName>
+        <fieldName>Campaigns</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>CampaignSteps</name>
+      <fieldType>DEPENDENCY_OUT</fieldType>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CampaignStep_entity</entityName>
+        <fieldName>CampaignSteps</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>campaignId_param</name>
+          <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/campaignsteps/children/campaignid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordCampaignManagementCostCategory</name>
+      <fieldType>DEPENDENCY_OUT</fieldType>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ExcludedKeyIdsSubquery_param</name>
+          <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityActionGroup>
+      <name>alter</name>
+      <children>
+        <entityActionField>
+          <name>edit</name>
+          <fieldType>ACTION</fieldType>
+          <onActionProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/alter/children/edit/onActionProcess.js</onActionProcess>
+          <isSelectionAction v="true" />
+          <iconId>NEON:PENCIL</iconId>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityParameter>
+      <name>CampaignId_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+      <description>PARAMETER</description>
+    </entityParameter>
+    <entityParameter>
+      <name>CampaignStepId_param</name>
+      <expose v="true" />
+      <description>PARAMETER</description>
+    </entityParameter>
+    <entityParameter>
+      <name>Uid_param</name>
+      <expose v="true" />
+      <description>PARAMETER</description>
+    </entityParameter>
+    <entityField>
+      <name>netPerParticipant</name>
+      <contentType>NUMBER</contentType>
+      <outputFormat>#,##0.00</outputFormat>
+      <inputFormat>#,##0.00</inputFormat>
+      <state>READONLY</state>
+      <titleProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/netperparticipant/titleProcess.js</titleProcess>
+      <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/netperparticipant/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>countParticipants</name>
+      <title>Participants</title>
+      <contentType>NUMBER</contentType>
+      <outputFormat>#0</outputFormat>
+      <inputFormat>#0</inputFormat>
+      <state>READONLY</state>
+      <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/countparticipants/valueProcess.js</valueProcess>
+    </entityField>
+    <entityParameter>
+      <name>CampaignSteps_param</name>
+      <title></title>
+      <expose v="true" />
+      <documentation>%aditoprj%/entity/CampaignCost_entity/entityfields/campaignsteps_param/documentation.adoc</documentation>
+      <description>PARAMETER</description>
+    </entityParameter>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <alias>Data_alias</alias>
+      <fromClauseProcess>%aditoprj%/entity/CampaignCost_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
+      <conditionProcess>%aditoprj%/entity/CampaignCost_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <orderClauseProcess>%aditoprj%/entity/CampaignCost_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
+      <linkInformation>
+        <linkInformation>
+          <name>70c2db20-0695-4189-92cb-7da585bff401</name>
+          <tableName>CAMPAIGNCOST</tableName>
+          <primaryKey>CAMPAIGNCOSTID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+        <linkInformation>
+          <name>b97b7f67-86ea-4d0a-8303-abc05863ed66</name>
+          <tableName>CAMPAIGNSTEP</tableName>
+          <primaryKey>CAMPAIGNSTEPID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+      </linkInformation>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>CAMPAIGN_ID.value</name>
+          <recordfield>CAMPAIGNCOST.CAMPAIGN_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CAMPAIGNCOSTID.value</name>
+          <recordfield>CAMPAIGNCOST.CAMPAIGNCOSTID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CAMPAIGNSTEP_ID.value</name>
+          <recordfield>CAMPAIGNCOST.CAMPAIGNSTEP_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CATEGORY.value</name>
+          <recordfield>CAMPAIGNCOST.CATEGORY</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_EDIT.value</name>
+          <recordfield>CAMPAIGNCOST.DATE_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>CAMPAIGNCOST.DATE_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>NET.value</name>
+          <recordfield>CAMPAIGNCOST.NET</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_EDIT.value</name>
+          <recordfield>CAMPAIGNCOST.USER_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_NEW.value</name>
+          <recordfield>CAMPAIGNCOST.USER_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CATEGORY.displayValue</name>
+          <expression>%aditoprj%/entity/CampaignCost_entity/recordcontainers/db/recordfieldmappings/category.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/CampaignCost_entity/afterOperatingState.js b/entity/CampaignCost_entity/afterOperatingState.js
new file mode 100644
index 0000000000..d393364023
--- /dev/null
+++ b/entity/CampaignCost_entity/afterOperatingState.js
@@ -0,0 +1,7 @@
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW) 
+{
+    neon.refreshAll();
+}
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/alter/children/edit/onActionProcess.js b/entity/CampaignCost_entity/entityfields/alter/children/edit/onActionProcess.js
new file mode 100644
index 0000000000..2f19601f3e
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/alter/children/edit/onActionProcess.js
@@ -0,0 +1,7 @@
+import("system.neon");
+import("system.vars");
+
+var params = {
+    "Uid_param" : vars.get("$sys.uid")
+}
+neon.openContext("CampaignCost", "CampaignCostEdit_view", null, neon.OPERATINGSTATE_EDIT, params);
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/campaign_id/displayValueProcess.js b/entity/CampaignCost_entity/entityfields/campaign_id/displayValueProcess.js
new file mode 100644
index 0000000000..12ea2ba316
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/campaign_id/displayValueProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("system.db");
+import("system.vars");
+import("Campaign_lib");
+
+var campaignId = vars.get("$field.CAMPAIGN_ID");
+var campaignName = CampaignUtils.getCampaignNameById(campaignId);
+
+result.string(campaignName);
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/campaign_id/valueProcess.js b/entity/CampaignCost_entity/entityfields/campaign_id/valueProcess.js
new file mode 100644
index 0000000000..aae29913f6
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/campaign_id/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.CampaignId_param") && vars.get("$param.CampaignId_param"))
+{
+    result.string(vars.get("$param.CampaignId_param"));
+}
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/campaigncostid/valueProcess.js b/entity/CampaignCost_entity/entityfields/campaigncostid/valueProcess.js
new file mode 100644
index 0000000000..f6b9da922b
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/campaigncostid/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.neon");
+import("system.util");
+import("system.vars");
+import("system.result");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(util.getNewUUID());
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/campaigncosts/children/campaignsteps_param/valueProcess.js b/entity/CampaignCost_entity/entityfields/campaigncosts/children/campaignsteps_param/valueProcess.js
new file mode 100644
index 0000000000..742074b164
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/campaigncosts/children/campaignsteps_param/valueProcess.js
@@ -0,0 +1,2 @@
+import("system.result");
+result.string(0)
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/campaignstep_id/displayValueProcess.js b/entity/CampaignCost_entity/entityfields/campaignstep_id/displayValueProcess.js
new file mode 100644
index 0000000000..ee615b672f
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/campaignstep_id/displayValueProcess.js
@@ -0,0 +1,20 @@
+import("system.neon");
+import("system.translate");
+import("system.result");
+import("system.db");
+import("system.vars");
+import("Campaign_lib");
+
+if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW)
+{
+    var campaignStepId = vars.get("$field.CAMPAIGNSTEP_ID");
+    if (campaignStepId)
+    {
+        var campaignStepName = CampaignUtils.getCampaignStepNameById(campaignStepId);
+        result.string(translate.text("Step") + ": " + campaignStepName);
+    }
+    else
+    {
+            result.string(translate.text("Fix cost"));    
+    }
+}
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/campaignstep_id/mandatoryProcess.js b/entity/CampaignCost_entity/entityfields/campaignstep_id/mandatoryProcess.js
new file mode 100644
index 0000000000..39c2cd139e
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/campaignstep_id/mandatoryProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+result.object((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW &&
+                vars.exists("$param.CampaignSteps_param") && vars.get("$param.CampaignSteps_param") == "1" &&
+                vars.exists("$param.CampaignStepId_param") && !vars.get("$param.CampaignStepId_param")));
diff --git a/entity/CampaignCost_entity/entityfields/campaignstep_id/onValueChange.js b/entity/CampaignCost_entity/entityfields/campaignstep_id/onValueChange.js
new file mode 100644
index 0000000000..a7827c48e4
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/campaignstep_id/onValueChange.js
@@ -0,0 +1,3 @@
+import("system.neon");
+
+neon.setFieldValue("$field.CATEGORY", "");
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/campaignstep_id/stateProcess.js b/entity/CampaignCost_entity/entityfields/campaignstep_id/stateProcess.js
new file mode 100644
index 0000000000..93d98b6e6e
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/campaignstep_id/stateProcess.js
@@ -0,0 +1,13 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW &&
+    vars.exists("$param.CampaignSteps_param") && vars.get("$param.CampaignSteps_param") == "1" &&
+    vars.exists("$param.CampaignStepId_param") && !vars.get("$param.CampaignStepId_param"))
+{
+    result.string(neon.COMPONENTSTATE_AUTO);
+}
+else
+{
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/campaignstep_id/valueProcess.js b/entity/CampaignCost_entity/entityfields/campaignstep_id/valueProcess.js
new file mode 100644
index 0000000000..f4a91495ca
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/campaignstep_id/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.CampaignStepId_param") && vars.get("$param.CampaignStepId_param"))
+{
+    result.string(vars.get("$param.CampaignStepId_param"));
+}
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/campaignsteps/children/campaignid_param/valueProcess.js b/entity/CampaignCost_entity/entityfields/campaignsteps/children/campaignid_param/valueProcess.js
new file mode 100644
index 0000000000..dc855dd051
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/campaignsteps/children/campaignid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$param.CampaignId_param"))
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/campaignsteps_param/documentation.adoc b/entity/CampaignCost_entity/entityfields/campaignsteps_param/documentation.adoc
new file mode 100644
index 0000000000..e7434a04e7
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/campaignsteps_param/documentation.adoc
@@ -0,0 +1,2 @@
+if 0: show only fix costs
+if 1: show only campaign steps
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/category/displayValueProcess.js b/entity/CampaignCost_entity/entityfields/category/displayValueProcess.js
new file mode 100644
index 0000000000..96536279ef
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/category/displayValueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.vars");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+result.string(KeywordUtils.getViewValue($KeywordRegistry.campaignStepCostCategory(), vars.get("$this.value")));
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/countparticipants/valueProcess.js b/entity/CampaignCost_entity/entityfields/countparticipants/valueProcess.js
new file mode 100644
index 0000000000..6952bc19fb
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/countparticipants/valueProcess.js
@@ -0,0 +1,12 @@
+import("system.result");
+import("system.vars");
+import("Campaign_lib");
+
+if (vars.get("$field.CAMPAIGNSTEP_ID"))
+{
+    result.string(CampaignUtils.getParticipantCountForStep(vars.get("$field.CAMPAIGNSTEP_ID")));
+}
+else
+{
+    result.string(CampaignUtils.getParticipantCount(vars.get("$field.CAMPAIGN_ID")));
+}
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/date_edit/valueProcess.js b/entity/CampaignCost_entity/entityfields/date_edit/valueProcess.js
new file mode 100644
index 0000000000..5e6ef05973
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/date_edit/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.util");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+    result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/date_new/valueProcess.js b/entity/CampaignCost_entity/entityfields/date_new/valueProcess.js
new file mode 100644
index 0000000000..a72892783b
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/date_new/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.util");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/containername_param/valueProcess.js b/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000..7a66c85298
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("KeywordRegistry_basic");
+
+result.string($KeywordRegistry.campaignStepCostCategory());
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js b/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js
new file mode 100644
index 0000000000..f9fdcc7295
--- /dev/null
+++ b/entity/CampaignCost_entity/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_entity/entityfields/netperparticipant/titleProcess.js b/entity/CampaignCost_entity/entityfields/netperparticipant/titleProcess.js
new file mode 100644
index 0000000000..fc36199cca
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/netperparticipant/titleProcess.js
@@ -0,0 +1,4 @@
+import("system.translate");
+import("system.result");
+
+result.string(translate.text("Cost") +  " " + translate.text("per") + " "  + translate.text("Participant"));
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/netperparticipant/valueProcess.js b/entity/CampaignCost_entity/entityfields/netperparticipant/valueProcess.js
new file mode 100644
index 0000000000..f3dedbcae4
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/netperparticipant/valueProcess.js
@@ -0,0 +1,11 @@
+import("system.vars");
+import("system.result");
+import("system.eMath");
+
+var netto = parseFloat(vars.get("$field.NET"));
+var countParticipants = parseFloat(vars.get("$field.countParticipants"));
+
+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/CampaignCost_entity/entityfields/stepcosts/children/campaignsteps_param/valueProcess.js b/entity/CampaignCost_entity/entityfields/stepcosts/children/campaignsteps_param/valueProcess.js
new file mode 100644
index 0000000000..0488a23572
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/stepcosts/children/campaignsteps_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(1);
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/user_edit/valueProcess.js b/entity/CampaignCost_entity/entityfields/user_edit/valueProcess.js
new file mode 100644
index 0000000000..6af880ae3e
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/user_edit/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.util");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+    result.string(vars.get("$sys.user"));
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/user_new/valueProcess.js b/entity/CampaignCost_entity/entityfields/user_new/valueProcess.js
new file mode 100644
index 0000000000..e518bc75a9
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/user_new/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.util");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(vars.get("$sys.user"));
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/recordcontainers/db/conditionProcess.js b/entity/CampaignCost_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000..ff7f94167b
--- /dev/null
+++ b/entity/CampaignCost_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,22 @@
+import("system.vars");
+import("system.db");
+import("system.result");
+import("Sql_lib");
+
+var cond = SqlCondition.begin()
+                       .andPrepareVars("CAMPAIGNCOST.CAMPAIGNCOSTID", "$param.Uid_param")
+                       .andPrepareVars("CAMPAIGNCOST.CAMPAIGN_ID", "$param.CampaignId_param")
+                       .andPrepareVars("CAMPAIGNCOST.CAMPAIGNSTEP_ID", "$param.CampaignStepId_param");
+                       
+if (vars.exists("$param.CampaignSteps_param") && vars.get("$param.CampaignSteps_param") == "1")
+{
+    // only step costs
+    cond.and("CAMPAIGNCOST.CAMPAIGNSTEP_ID is not null");
+}
+else
+{
+    // only fix costs
+    cond.and("CAMPAIGNCOST.CAMPAIGNSTEP_ID is null");
+}
+
+result.string(db.translateCondition(cond.build("1=2")));
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/recordcontainers/db/fromClauseProcess.js b/entity/CampaignCost_entity/recordcontainers/db/fromClauseProcess.js
new file mode 100644
index 0000000000..4d95079d7c
--- /dev/null
+++ b/entity/CampaignCost_entity/recordcontainers/db/fromClauseProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("CAMPAIGNCOST left join CAMPAIGNSTEP on CAMPAIGNCOST.CAMPAIGNSTEP_ID = CAMPAIGNSTEP.CAMPAIGNSTEPID")
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/recordcontainers/db/orderClauseProcess.js b/entity/CampaignCost_entity/recordcontainers/db/orderClauseProcess.js
new file mode 100644
index 0000000000..8538a702d1
--- /dev/null
+++ b/entity/CampaignCost_entity/recordcontainers/db/orderClauseProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.db");
+
+result.object({"CAMPAIGNSTEP.SORTING": db.ASCENDING});
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/recordcontainers/db/recordfieldmappings/category.displayvalue/expression.js b/entity/CampaignCost_entity/recordcontainers/db/recordfieldmappings/category.displayvalue/expression.js
new file mode 100644
index 0000000000..3aa7368fd4
--- /dev/null
+++ b/entity/CampaignCost_entity/recordcontainers/db/recordfieldmappings/category.displayvalue/expression.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.campaignStepCostCategory(), "CAMPAIGNCOST.CATEGORY");
+result.string(sql);
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/CampaignStep_entity.aod b/entity/CampaignStep_entity/CampaignStep_entity.aod
index 972daa9374..10c9826fa0 100644
--- a/entity/CampaignStep_entity/CampaignStep_entity.aod
+++ b/entity/CampaignStep_entity/CampaignStep_entity.aod
@@ -124,7 +124,7 @@
         </entityDependency>
         <entityDependency>
           <name>ad4ee503-95b9-4add-a0ef-e833db008349</name>
-          <entityName>CampaignCost_entitiy</entityName>
+          <entityName>CampaignCost_entity</entityName>
           <fieldName>CampaignSteps</fieldName>
           <isConsumer v="false" />
         </entityDependency>
@@ -229,7 +229,7 @@
       <fieldType>DEPENDENCY_OUT</fieldType>
       <dependency>
         <name>dependency</name>
-        <entityName>CampaignCost_entitiy</entityName>
+        <entityName>CampaignCost_entity</entityName>
         <fieldName>StepCosts</fieldName>
       </dependency>
       <children>
diff --git a/entity/Campaign_entity/Campaign_entity.aod b/entity/Campaign_entity/Campaign_entity.aod
index 87e2fba10c..7865abaefa 100644
--- a/entity/Campaign_entity/Campaign_entity.aod
+++ b/entity/Campaign_entity/Campaign_entity.aod
@@ -146,7 +146,7 @@
         </entityDependency>
         <entityDependency>
           <name>d238b02c-75e7-4cf4-b90c-bb36d41ae90f</name>
-          <entityName>CampaignCost_entitiy</entityName>
+          <entityName>CampaignCost_entity</entityName>
           <fieldName>Campaigns</fieldName>
           <isConsumer v="false" />
         </entityDependency>
@@ -197,7 +197,7 @@
       <fieldType>DEPENDENCY_OUT</fieldType>
       <dependency>
         <name>dependency</name>
-        <entityName>CampaignCost_entitiy</entityName>
+        <entityName>CampaignCost_entity</entityName>
         <fieldName>CampaignCosts</fieldName>
       </dependency>
       <children>
@@ -219,7 +219,7 @@
       <fieldType>DEPENDENCY_OUT</fieldType>
       <dependency>
         <name>dependency</name>
-        <entityName>CampaignCost_entitiy</entityName>
+        <entityName>CampaignCost_entity</entityName>
         <fieldName>StepCosts</fieldName>
       </dependency>
       <children>
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index f7dacc6889..b4b9660d0b 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -382,7 +382,7 @@
         </entityDependency>
         <entityDependency>
           <name>13d739cb-2b97-44a0-bed0-b6868b0e579e</name>
-          <entityName>CampaignCost_entitiy</entityName>
+          <entityName>CampaignCost_entity</entityName>
           <fieldName>KeywordCampaignManagementCostCategory</fieldName>
           <isConsumer v="false" />
         </entityDependency>
diff --git a/neonContext/CampaignCost/CampaignCost.aod b/neonContext/CampaignCost/CampaignCost.aod
index 0e1a072149..9c38b9368d 100644
--- a/neonContext/CampaignCost/CampaignCost.aod
+++ b/neonContext/CampaignCost/CampaignCost.aod
@@ -4,7 +4,7 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterview>CampaignCostFilter_view</filterview>
   <editview>CampaignCostEdit_view</editview>
-  <entity>CampaignCost_entitiy</entity>
+  <entity>CampaignCost_entity</entity>
   <references>
     <neonViewReference>
       <name>fa4ac7f7-4f30-42ba-86b2-99e86597734f</name>
-- 
GitLab