diff --git a/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod b/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod index 6f2dff01cc0a13523ca97825fcc799a762f3b274..a280adae7f0d34b12abf8c984b684e3b4e43e81a 100644 --- a/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod +++ b/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod @@ -185,6 +185,20 @@ <expose v="true" /> <description>PARAMETER</description> </entityParameter> + <entityField> + <name>netPerParticipant</name> + <contentType>NUMBER</contentType> + <outputFormat>#,##0.00</outputFormat> + <titleProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/netperparticipant/titleProcess.js</titleProcess> + <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/netperparticipant/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>countParticipants</name> + <title>Participants</title> + <contentType>NUMBER</contentType> + <outputFormat>#0</outputFormat> + <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/countparticipants/valueProcess.js</valueProcess> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/CampaignCost_entitiy/entityfields/countparticipants/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/countparticipants/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..6952bc19fb1c4532ee3588b899bb4be228e0dc60 --- /dev/null +++ b/entity/CampaignCost_entitiy/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_entitiy/entityfields/netperparticipant/titleProcess.js b/entity/CampaignCost_entitiy/entityfields/netperparticipant/titleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..fc36199cca341dd1e3923ebb223ab28f3efa5ccf --- /dev/null +++ b/entity/CampaignCost_entitiy/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_entitiy/entityfields/netperparticipant/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/netperparticipant/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..21c35016923a3ff94141e6d0d2e652764b35a41e --- /dev/null +++ b/entity/CampaignCost_entitiy/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 (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/titleProcess.js b/entity/CampaignStep_entity/titleProcess.js index 33f139bb3d446b844820ecaf7443db266043bc13..429260276f9d30b111be834373ee1613df1f7084 100644 --- a/entity/CampaignStep_entity/titleProcess.js +++ b/entity/CampaignStep_entity/titleProcess.js @@ -1,4 +1,5 @@ +import("Context_lib"); import("system.result"); import("system.vars"); -result.string(vars.getString("$field.NAME")); \ No newline at end of file +result.string(ContextUtils.prefixWithCurrentContextTitle(vars.getString("$field.NAME"))); \ No newline at end of file diff --git a/entity/Campaign_entity/Campaign_entity.aod b/entity/Campaign_entity/Campaign_entity.aod index 9ccbae20b89f4b4cac7548dd82705126b4083d1e..1fbad7abc97641cf3ae3ef095620b7d7661c3428 100644 --- a/entity/Campaign_entity/Campaign_entity.aod +++ b/entity/Campaign_entity/Campaign_entity.aod @@ -191,6 +191,12 @@ </entityParameter> </children> </entityConsumer> + <entityField> + <name>COST</name> + <title>Cost</title> + <contentType>NUMBER</contentType> + <outputFormat>#,##0.00</outputFormat> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> @@ -247,6 +253,10 @@ <name>CAMPAIGNID.value</name> <recordfield>CAMPAIGN.CAMPAIGNID</recordfield> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>COST.value</name> + <expression>%aditoprj%/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/cost.value/expression.js</expression> + </dbRecordFieldMapping> </recordFieldMappings> </dbRecordContainer> </recordContainers> diff --git a/entity/Campaign_entity/entityfields/date_end/displayValueProcess.js b/entity/Campaign_entity/entityfields/date_end/displayValueProcess.js index eeaf6b9c011a4bd31dc94c66eac81bfb1be3adb1..af009bc99321959dee737e4dd3c6bea039862e1c 100644 --- a/entity/Campaign_entity/entityfields/date_end/displayValueProcess.js +++ b/entity/Campaign_entity/entityfields/date_end/displayValueProcess.js @@ -6,7 +6,7 @@ if(vars.exists("$field.CAMPAIGNID") && vars.get("$field.CAMPAIGNID") != "" && vars.get("$field.CAMPAIGNID") != null) { var capmaignId = vars.get("$field.CAMPAIGNID"); - var campaignStepEndDate = getCampaignEndDate(capmaignId); + var campaignStepEndDate = CampaignUtils.getCampaignEndDate(capmaignId); result.string(campaignStepEndDate); } \ No newline at end of file diff --git a/entity/Campaign_entity/entityfields/date_start/displayValueProcess.js b/entity/Campaign_entity/entityfields/date_start/displayValueProcess.js index 2fa5058ade0a35fca709a2216383b090fa459a98..fd8b8586af122186de41ee63ab69db1c255434eb 100644 --- a/entity/Campaign_entity/entityfields/date_start/displayValueProcess.js +++ b/entity/Campaign_entity/entityfields/date_start/displayValueProcess.js @@ -6,7 +6,7 @@ if(vars.exists("$field.CAMPAIGNID") && vars.get("$field.CAMPAIGNID") != "" && vars.get("$field.CAMPAIGNID") != null) { var capmaignId = vars.get("$field.CAMPAIGNID"); - var campaignStepStartDate = getCampaignStartDate(capmaignId); + var campaignStepStartDate = CampaignUtils.getCampaignStartDate(capmaignId); result.string(campaignStepStartDate); } \ No newline at end of file diff --git a/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/cost.value/expression.js b/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/cost.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..cecf6e4f7c03f399083118f9c9b3413277c9204b --- /dev/null +++ b/entity/Campaign_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 = CAMPAIGN.CAMPAIGNID)") \ No newline at end of file diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 3df60c9058782f945cbb40a63fed8c119b8b1068..7d36afb0e90d471b736369839c52c5c941ce25c6 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -3084,6 +3084,9 @@ <entry> <key>Fix cost</key> </entry> + <entry> + <key>per</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 c53a7ea555bd35a6704f35cf3477e899ca332b9b..7ea7f1384150ef17c94609a66acc6f642c821c46 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -3893,6 +3893,7 @@ </entry> <entry> <key>Participant</key> + <value>Teilnehmer/in</value> </entry> <entry> <key>Printing costs</key> @@ -3928,9 +3929,15 @@ </entry> <entry> <key>Step</key> + <value>Stufe</value> </entry> <entry> <key>Fix cost</key> + <value>Fixkosten</value> + </entry> + <entry> + <key>per</key> + <value>pro</value> </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 7238483c5aec74d944d3e5f0f9c41a8388a18d82..dc64f28a583dd8f7d2fd02de288030e3467f387a 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -3119,19 +3119,7 @@ <value>Webservice not available. URL: %0 %1</value> </entry> <entry> - <key>file '%0' cannot be read</key> - </entry> - <entry> - <key>Importer</key> - </entry> - <entry> - <key>yyyy-MM-dd HH:mm:ss</key> - </entry> - <entry> - <key>file '%0' does not exist or you have got no permission on this file</key> - </entry> - <entry> - <key>Zip</key> + <key>per</key> </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> diff --git a/neonView/CampaignCostFilter_view/CampaignCostFilter_view.aod b/neonView/CampaignCostFilter_view/CampaignCostFilter_view.aod index b2e97e0bfd05c713d691f56c3b70da413bf79068..d3aa701691615ece48b9dc19340ab4754bf26c49 100644 --- a/neonView/CampaignCostFilter_view/CampaignCostFilter_view.aod +++ b/neonView/CampaignCostFilter_view/CampaignCostFilter_view.aod @@ -21,6 +21,14 @@ <name>457caff8-0403-425f-839c-62e5d05fe3a1</name> <entityField>CATEGORY</entityField> </neonTableColumn> + <neonTableColumn> + <name>f8c6439c-9536-477b-af19-26719902e12e</name> + <entityField>netPerParticipant</entityField> + </neonTableColumn> + <neonTableColumn> + <name>8239e81b-d69c-4ea9-b55d-83e79d1693cf</name> + <entityField>countParticipants</entityField> + </neonTableColumn> <neonTableColumn> <name>2adbd887-f1df-43ff-bde9-12c8273af7a9</name> <entityField>NET</entityField> diff --git a/neonView/CampaignPreview_view/CampaignPreview_view.aod b/neonView/CampaignPreview_view/CampaignPreview_view.aod index 8eee0f92715eae0704930c954bd54b7ac0fd6a6a..4ca3d91f4f741cdf90bb84670abdcf11649ed710 100644 --- a/neonView/CampaignPreview_view/CampaignPreview_view.aod +++ b/neonView/CampaignPreview_view/CampaignPreview_view.aod @@ -31,6 +31,10 @@ <name>a52607c9-da9c-4894-acc6-f31024510d6d</name> <entityField>DATE_END</entityField> </entityFieldLink> + <entityFieldLink> + <name>87b03a62-3508-4267-afd6-95428f0d1f8d</name> + <entityField>COST</entityField> + </entityFieldLink> </fields> </genericViewTemplate> </children> diff --git a/process/Campaign_lib/process.js b/process/Campaign_lib/process.js index ced1497caf426421c04ad6bb9c41923cf649b086..eb04a8ad3e000bb3f0933788586ea710f9db4828 100644 --- a/process/Campaign_lib/process.js +++ b/process/Campaign_lib/process.js @@ -70,6 +70,18 @@ CampaignUtils.getParticipantCountForStep = function(pCampaignStepId) return _CampaignUtils._loadSingleValueFromDb(selectQuery, conditionField, pCampaignStepId, defaultValue); } +/** + * todo + */ +CampaignUtils.getParticipantCount = function(pCampaignId) +{ + let selectQuery = "select count(*) from CAMPAIGNPARTICIPANT"; + let conditionField = "CAMPAIGNPARTICIPANT.CAMPAIGN_ID"; + let defaultValue = 0; + + return _CampaignUtils._loadSingleValueFromDb(selectQuery, conditionField, pCampaignId, defaultValue); +} + /** * todo */ @@ -114,7 +126,7 @@ CampaignUtils.createLogEntry = function(pCampaignId, pCampaignStepId, pContactId */ CampaignUtils.getParticipantLogInsertColumnNames = function() { - return new Array("CAMPAIGNPARTICIPANT_ID", "CAMPAIGN_ID", "CAMPAIGNSTEP_ID", "CAMPAIGNPARTICIPANTLOGID", "USER_NEW", "DATE_NEW"); + return ["CAMPAIGNPARTICIPANT_ID", "CAMPAIGN_ID", "CAMPAIGNSTEP_ID", "CAMPAIGNPARTICIPANTLOGID", "USER_NEW", "DATE_NEW"]; } /** @@ -148,6 +160,29 @@ CampaignUtils.getDefaultCampaignStep = function(pCampaignId) return db.cell(selectQuery) } +/** + * todo + */ +CampaignUtils.getCampaignStartDate = function(pCapmaignId) +{ + var campaignIdCondition = SqlCondition.begin() + .andPrepare("CAMPAIGNSTEP.CAMPAIGN_ID", pCapmaignId); + // TODO: Fetch first 1 rows only will not work with all dbms! Maybe just remove it, because db.cell always uses only the first row + return db.cell(campaignIdCondition.buildSql("SELECT DATE_START, SORTING FROM ADITO.CAMPAIGNSTEP", "1=2", "order by SORTING ASC FETCH FIRST 1 ROWS ONLY")); +} + +/** + * todo + */ +CampaignUtils.getCampaignEndDate = function(pCapmaignId) +{ + var campaignIdCondition = SqlCondition.begin() + .andPrepare("CAMPAIGNSTEP.CAMPAIGN_ID", pCapmaignId); + + // TODO: Fetch first 1 rows only will not work with all dbms! Maybe just remove it, because db.cell always uses only the first row + return db.cell(campaignIdCondition.buildSql("SELECT DATE_END, SORTING FROM CAMPAIGNSTEP", "1=2", "order by SORTING ASC FETCH FIRST 1 ROWS ONLY")); +} + /** * Methods for campaignmanagement. * Do not create an instance of this! @@ -186,29 +221,11 @@ _CampaignUtils._openAddParticipantContext = function(pContext, pRowIds, pEntityP _CampaignUtils._loadSingleValueFromDb = function(pSelectQuery, pConditionField, pConditionValue, pDefaultValue) { let res = pDefaultValue; - if (pConditionValue != null && pConditionValue != "null" && pConditionValue != "") + if (pConditionValue) { res = db.cell(SqlCondition.begin() .andPrepare(pConditionField, pConditionValue) .buildSql(pSelectQuery)); } return res; -} - -/** - * todo - */ -function getCampaignStartDate(pCapmaignId) -{ - var dateStartQuery = "SELECT DATE_START, SORTING FROM ADITO.CAMPAIGNSTEP where CAMPAIGN_ID = '"+ pCapmaignId +"' order by SORTING ASC FETCH FIRST 1 ROWS ONLY"; - return db.cell(dateStartQuery); -} - -/** - * todo - */ -function getCampaignEndDate(pCapmaignId) -{ - var dateEndQuery = "SELECT DATE_END, SORTING FROM ADITO.CAMPAIGNSTEP where CAMPAIGN_ID = '"+ pCapmaignId +"' order by SORTING DESC FETCH FIRST 1 ROWS ONLY"; - return db.cell(dateEndQuery); } \ No newline at end of file