diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index 35cd4068f61d3598e4123795f86688b23d151b7d..fc3aa7f965d1d2313c74cc6b18242a5d5e0c45e9 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -712,6 +712,29 @@ <readonly v="true" /> </linkInformation> </linkInformation> + <filterExtensions> + <filterExtension> + <name>Opener_Filter</name> + <title>Opener rate (in %)</title> + <contentType>NUMBER</contentType> + <filterConditionProcess>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/filterextensions/opener_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>ClickCount_Filter</name> + <title>Click rate (in %)</title> + <contentType>NUMBER</contentType> + <filterConditionProcess>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/filterextensions/clickcount_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>UniqueClickCount_Filter</name> + <title>Unique click rate (in %)</title> + <contentType>NUMBER</contentType> + <filterConditionProcess>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/filterextensions/uniqueclickcount_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + </filterExtensions> </dbRecordContainer> </recordContainers> </entity> diff --git a/entity/BulkMail_entity/recordcontainers/db/filterextensions/clickcount_filter/filterConditionProcess.js b/entity/BulkMail_entity/recordcontainers/db/filterextensions/clickcount_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..32b0843ef71a72911676bfd678b79cfb5d6842dc --- /dev/null +++ b/entity/BulkMail_entity/recordcontainers/db/filterextensions/clickcount_filter/filterConditionProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); +import("BulkmailAnalysis_lib"); + +result.string(BulkMailAnalysisUtils.getPercentageFilterCondition(BulkMailAnalysisSql.countSelects.CLICKCOUNT, vars.get("$local.rawvalue"), vars.get("$local.comparison"))); diff --git a/entity/BulkMail_entity/recordcontainers/db/filterextensions/opener_filter/filterConditionProcess.js b/entity/BulkMail_entity/recordcontainers/db/filterextensions/opener_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..550c2dae9aaf6bf94f6bd4da4164a69d4fcc129d --- /dev/null +++ b/entity/BulkMail_entity/recordcontainers/db/filterextensions/opener_filter/filterConditionProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); +import("BulkmailAnalysis_lib"); + +result.string(BulkMailAnalysisUtils.getPercentageFilterCondition(BulkMailAnalysisSql.countSelects.OPENERCOUNT, vars.get("$local.rawvalue"), vars.get("$local.comparison"))); diff --git a/entity/BulkMail_entity/recordcontainers/db/filterextensions/uniqueclickcount_filter/filterConditionProcess.js b/entity/BulkMail_entity/recordcontainers/db/filterextensions/uniqueclickcount_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4364b7085e552d643d8d58d372b5ca6fb0dc45ff --- /dev/null +++ b/entity/BulkMail_entity/recordcontainers/db/filterextensions/uniqueclickcount_filter/filterConditionProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); +import("BulkmailAnalysis_lib"); + +result.string(BulkMailAnalysisUtils.getPercentageFilterCondition(BulkMailAnalysisSql.countSelects.UNIQUECLICKCOUNT, vars.get("$local.rawvalue"), vars.get("$local.comparison"))); diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index fdd7e1d8744f91e6e29efe3e2d841e2365ca238b..6c831218bd57770c2bd7784a5c240fa4550140c6 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -54,6 +54,10 @@ <key>decrease priority</key> <value>Priorität verringern</value> </entry> + <entry> + <key>Click rate (in \%)</key> + <value>Klickrate in Prozent</value> + </entry> <entry> <key>Move selection up</key> <value>Auswahl nach oben verschieben</value> @@ -74,6 +78,10 @@ <key>Redirect needs a full URL with http/https</key> <value>Für die Weiterleitung wird eine vollständige URL mit http/https benötigt</value> </entry> + <entry> + <key>Opener rate (in \%)</key> + <value>Öffnungsrate in Prozent</value> + </entry> <entry> <key>My Bulkmails</key> <value>Meine Serienmails</value> @@ -2354,6 +2362,10 @@ <key>Contracts</key> <value>Verträge</value> </entry> + <entry> + <key>Unique click rate (in \%)</key> + <value>Unique Klickrate in Prozent</value> + </entry> <entry> <key>Contact Owner</key> <value>Besitzer</value> diff --git a/process/BulkmailAnalysis_lib/process.js b/process/BulkmailAnalysis_lib/process.js index 0831ae1ed2c62e0aecf47e21f97db5ebfebc901a..0f1c8d046252108c8659494b1a937ef6b7c52bd2 100644 --- a/process/BulkmailAnalysis_lib/process.js +++ b/process/BulkmailAnalysis_lib/process.js @@ -1,3 +1,4 @@ +import("system.SQLTYPES"); import("KeywordRegistry_basic"); import("Sql_lib"); @@ -106,8 +107,77 @@ BulkMailAnalysisSql.prototype.buildSelect = function() return sql } +/** + * a static Utility class for BulkMailAnalysis + * + * Do not create an instance of this! + * @class + */ +function BulkMailAnalysisUtils() {} + +/* + * returns a sql condition for a filterextension that evaluates the percentage of bulkmailanalysis counts compared to received mails + * + * @param {String} pCountSelect count from BulkMailAnalysisSql.countSelects that defines what gets counted + * @param {Number} pRawValue value that is filtered for + * @param {String} pComparison comparison operator + * @return {String} the resulting condition + */ + +BulkMailAnalysisUtils.getPercentageFilterCondition = function (pCountSelect, pRawValue, pComparison) +{ + pRawValue = pRawValue / 100; + var idcolumn = "BULKMAIL.BULKMAILID"; + var receivedCountSql = new BulkMailAnalysisSql() + .bulkMailIdField(idcolumn) + .setSelects(BulkMailAnalysisSql.countSelects.RECEIVEDCOUNT) + .buildSelect(); + + var bulkMailAnalysisSql = new BulkMailAnalysisSql() + .bulkMailIdField(idcolumn) + .setSelects(pCountSelect+"/"+BulkMailAnalysisSql.countSelects.RECEIVEDCOUNT) + .buildSelect(); + + var caseWhen = SqlBuilder.caseWhen(receivedCountSql, 0, SqlBuilder.NOT_EQUAL(), SQLTYPES.FLOAT) + .then(bulkMailAnalysisSql) + .elseValue(0) + .toString(); + + var resultSqlCond; + switch (pComparison) + { + case "EQUAL": + resultSqlCond = newWhere(caseWhen, pRawValue, SqlBuilder.EQUAL(), SQLTYPES.FLOAT); + break; + case "GREATER": + resultSqlCond = newWhere(caseWhen, pRawValue, SqlBuilder.GREATER(), SQLTYPES.FLOAT); + break; + case "LESS": + resultSqlCond = newWhere(caseWhen, pRawValue, SqlBuilder.LESS(), SQLTYPES.FLOAT); + break; + case "GREATER_OR_EQUAL": + resultSqlCond = newWhere(caseWhen, pRawValue, SqlBuilder.GREATER_OR_EQUAL(), SQLTYPES.FLOAT); + break; + case "LESS_OR_EQUAL": + resultSqlCond = newWhere(caseWhen, pRawValue, SqlBuilder.LESS_OR_EQUAL(), SQLTYPES.FLOAT); + break; + case "NOT_EQUAL": + resultSqlCond = newWhere(caseWhen, pRawValue, SqlBuilder.NOT_EQUAL(), SQLTYPES.FLOAT); + break; + case "ISNULL": + resultSqlCond = newWhere(caseWhen, 0, SqlBuilder.EQUAL(), SQLTYPES.FLOAT); + break; + case "ISNOTNULL": + resultSqlCond = newWhere(caseWhen, 0, SqlBuilder.NOT_EQUAL(), SQLTYPES.FLOAT); + break; + default: + resultSqlCond = "1=2"; + } + + return resultSqlCond; +} /* * Defines the subselects used for the bulkmailanalysiscounts *