Skip to content
Snippets Groups Projects
Commit 48f6d1b6 authored by Martin Groppe's avatar Martin Groppe Committed by Sebastian Listl
Browse files

M 2000554 dashboard erweiterung

parent 1a21b37d
No related branches found
No related tags found
No related merge requests found
Showing
with 260 additions and 11 deletions
......@@ -29,11 +29,37 @@
<name>BulkMailId_param</name>
<expose v="true" />
</entityParameter>
<entityConsumer>
<name>Contacts</name>
<dependency>
<name>dependency</name>
<entityName>AnyContact_entity</entityName>
<fieldName>#PROVIDER</fieldName>
</dependency>
</entityConsumer>
<entityConsumer>
<name>BulkMails</name>
<dependency>
<name>dependency</name>
<entityName>BulkMail_entity</entityName>
<fieldName>#PROVIDER</fieldName>
</dependency>
</entityConsumer>
<entityConsumer>
<name>Campaigns</name>
<dependency>
<name>dependency</name>
<entityName>Campaign_entity</entityName>
<fieldName>Campaigns</fieldName>
</dependency>
</entityConsumer>
</entityFields>
<recordContainers>
<jDitoRecordContainer>
<name>jDito</name>
<jDitoRecordAlias>Data_alias</jDitoRecordAlias>
<isFilterable v="true" />
<isSortable v="true" />
<contentProcess>%aditoprj%/entity/BulkMailAnalysisOpeningHourChart_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
<recordFieldMappings>
<jDitoRecordFieldMapping>
......@@ -55,6 +81,35 @@
<name>Y.value</name>
</jDitoRecordFieldMapping>
</recordFieldMappings>
<filterExtensions>
<filterExtension>
<name>SendDate_filter</name>
<title>Send Date</title>
<contentType>DATE</contentType>
<filtertype>BASIC</filtertype>
</filterExtension>
<filterExtension>
<name>Contact_filter</name>
<title>Contact</title>
<useConsumer v="true" />
<consumer>Contacts</consumer>
<filtertype>BASIC</filtertype>
</filterExtension>
<filterExtension>
<name>BulkMail_filter</name>
<title>Bulk Mail</title>
<useConsumer v="true" />
<consumer>BulkMails</consumer>
<filtertype>BASIC</filtertype>
</filterExtension>
<filterExtension>
<name>Campaign_filter</name>
<title>Campaign</title>
<useConsumer v="true" />
<consumer>Campaigns</consumer>
<filtertype>BASIC</filtertype>
</filterExtension>
</filterExtensions>
</jDitoRecordContainer>
</recordContainers>
</entity>
import("JditoFilter_lib");
import("system.translate");
import("system.result");
import("system.db");
......@@ -7,7 +8,7 @@ import("system.datetime");
var dataArray = new Array(24).fill(0);
newSelect("WEBLINK_CLICK.DATE_OPENED")
var sql = newSelect("WEBLINK_CLICK.DATE_OPENED")
.from("MAIL_RUN")
.join("MAIL_LOG","MAIL_LOG.MAIL_RUN_ID = MAIL_RUN.MAIL_RUNID")
.join("WEBLINK_CLICK","MAIL_LOG.OPENER_LINK_CLICK_ID = WEBLINK_CLICK.WEBLINK_CLICKID")
......@@ -15,7 +16,20 @@ newSelect("WEBLINK_CLICK.DATE_OPENED")
.and("MAIL_RUN.OBJECT_TYPE","bulkmail")
.and("MAIL_LOG.OPENER_LINK_CLICK_ID is not null")
.andIfSet("MAIL_RUN.OBJECT_ROWID", "$param.BulkMailId_param")
.arrayColumn()
var filter = vars.get("$local.filter");
if (filter.filter && !(new FilterConditionGroup(filter.filter).isEmpty()))
{
sql.leftJoin("BULKMAIL",newWhere("BULKMAIL.BULKMAILID = MAIL_RUN.OBJECT_ROWID").and("MAIL_RUN.OBJECT_TYPE","Bulkmail"));
sql.and(JditoFilterUtils.getSqlCondition(filter.filter, "MAIL_RUN", null, {
"#EXTENSION.BulkMail_filter.BulkMail_filter#TEXT": "BULKMAIL.BULKMAILID",
"#EXTENSION.Campaign_filter.Campaign_filter#TEXT": "BULKMAIL.CAMPAIGN_ID",
"#EXTENSION.Contact_filter.Contact_filter#TEXT": "MAIL_LOG.CONTACT_ID",
"#EXTENSION.SendDate_filter.SendDate_filter#DATE": "MAIL_LOG.DATE_SEND"
}));
}
sql.arrayColumn()
.forEach(function (pDate)
{
var hour = new Date(datetime.localTimestamp(pDate)).getHours();
......
......@@ -25,11 +25,36 @@
<name>BulkMailId_param</name>
<expose v="true" />
</entityParameter>
<entityConsumer>
<name>Contacts</name>
<dependency>
<name>dependency</name>
<entityName>AnyContact_entity</entityName>
<fieldName>#PROVIDER</fieldName>
</dependency>
</entityConsumer>
<entityConsumer>
<name>BulkMails</name>
<dependency>
<name>dependency</name>
<entityName>BulkMail_entity</entityName>
<fieldName>#PROVIDER</fieldName>
</dependency>
</entityConsumer>
<entityConsumer>
<name>Campaigns</name>
<dependency>
<name>dependency</name>
<entityName>Campaign_entity</entityName>
<fieldName>Campaigns</fieldName>
</dependency>
</entityConsumer>
</entityFields>
<recordContainers>
<jDitoRecordContainer>
<name>jDito</name>
<jDitoRecordAlias>Data_alias</jDitoRecordAlias>
<isFilterable v="true" />
<contentProcess>%aditoprj%/entity/BulkMailAnalysisStatusFunnelChart_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
<recordFieldMappings>
<jDitoRecordFieldMapping>
......@@ -42,6 +67,38 @@
<name>statusCount.value</name>
</jDitoRecordFieldMapping>
</recordFieldMappings>
<filterExtensions>
<filterExtension>
<name>SendDate_filter</name>
<title>Send Date</title>
<contentType>DATE</contentType>
<filtertype>BASIC</filtertype>
</filterExtension>
<filterExtension>
<name>Contact_filter</name>
<title>Contact</title>
<contentType>TEXT</contentType>
<useConsumer v="true" />
<consumer>Contacts</consumer>
<filtertype>BASIC</filtertype>
</filterExtension>
<filterExtension>
<name>BulkMail_filter</name>
<title>Bulk Mail</title>
<contentType>TEXT</contentType>
<useConsumer v="true" />
<consumer>BulkMails</consumer>
<filtertype>BASIC</filtertype>
</filterExtension>
<filterExtension>
<name>Campaign_filter</name>
<title>Campaign</title>
<contentType>TEXT</contentType>
<useConsumer v="true" />
<consumer>Campaigns</consumer>
<filtertype>BASIC</filtertype>
</filterExtension>
</filterExtensions>
</jDitoRecordContainer>
</recordContainers>
</entity>
......@@ -4,7 +4,8 @@ import("Sql_lib");
import("system.result");
import("system.vars");
import("KeywordRegistry_basic");
import("BulkmailAnalysis_lib")
import("BulkmailAnalysis_lib");
import("JditoFilter_lib");
var statusArray = ["Recipients","Received","Openers","Klicks","Unsubscribes"];
......@@ -18,15 +19,35 @@ var bulkMailAnalysisSql = new BulkMailAnalysisSql()
]);
if (vars.get("$param.BulkMailId_param"))
{
bulkMailAnalysisSql.bulkMailId(vars.get("$param.BulkMailId_param"));
}
var sql = bulkMailAnalysisSql.buildSelect();
var filter = vars.get("$local.filter");
if (filter.filter && !(new FilterConditionGroup(filter.filter).isEmpty()))
{
sql.leftJoin("BULKMAIL",newWhere("BULKMAIL.BULKMAILID = MAIL_RUN.OBJECT_ROWID").and("MAIL_RUN.OBJECT_TYPE","Bulkmail"));
sql.and(JditoFilterUtils.getSqlCondition(filter.filter, "MAIL_RUN", null, {
"#EXTENSION.BulkMail_filter.BulkMail_filter#TEXT": "BULKMAIL.BULKMAILID",
"#EXTENSION.Campaign_filter.Campaign_filter#TEXT": "BULKMAIL.CAMPAIGN_ID",
"#EXTENSION.Contact_filter.Contact_filter#TEXT": "MAIL_LOG.CONTACT_ID",
"#EXTENSION.SendDate_filter.SendDate_filter#DATE": "MAIL_LOG.DATE_SEND"
}));
}
var amounts = sql.arrayRow();
var res = statusArray.map(function(status, position){
return [status, translate.text(status), amounts[position]];
});
var amounts = bulkMailAnalysisSql.buildSelect().arrayRow();
var res = statusArray.map(function(status,position){
return [status,translate.text(status),amounts[position]]
var nonEmptyStatus = res.filter(function([pStatus, pDescription, pAmount])
{
return pAmount != 0;
});
if(nonEmptyStatus.length == 0)
{
res = [];
}
result.object(res);
\ No newline at end of file
......@@ -56,6 +56,10 @@
<name>BulkMailId_param</name>
<expose v="true" />
</entityParameter>
<entityActionField>
<name>openStatusFunnel</name>
<onActionProcess>%aditoprj%/entity/BulkMailAnalysis_entity/entityfields/openstatusfunnel/onActionProcess.js</onActionProcess>
</entityActionField>
</entityFields>
<recordContainers>
<jDitoRecordContainer>
......
import("system.neon");
neon.openContext("BulkMailAnalysisStatusFunnelChart", null, null, neon.OPERATINGSTATE_SEARCH, null);
\ No newline at end of file
......@@ -642,6 +642,19 @@
<name>OnlyActive_param</name>
<expose v="true" />
</entityParameter>
<entityParameter>
<name>OnlyCampaignsWithBulkmail_param</name>
<expose v="true" />
</entityParameter>
<entityProvider>
<name>CampaignsWithBulkMail</name>
<children>
<entityParameter>
<name>OnlyCampaignsWithBulkmail_param</name>
<valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/campaignswithbulkmail/children/showonlycampaignswithbulkmail_param/valueProcess.js</valueProcess>
</entityParameter>
</children>
</entityProvider>
</entityFields>
<recordContainers>
<dbRecordContainer>
......
import("system.result");
result.string(true);
\ No newline at end of file
......@@ -24,5 +24,9 @@ if(Utils.toBoolean(vars.get("$param.OnlyActive_param")))
.where("CAMPAIGNSTEP.CAMPAIGN_ID = CAMPAIGN.CAMPAIGNID")
,vars.get("$sys.date"),SqlBuilder.GREATER_OR_EQUAL(),SQLTYPES.DATE)
}
if(Utils.toBoolean(vars.get("$param.OnlyCampaignsWithBulkmail_param")))
{
cond.and(null, newSelect("BULKMAIL.BULKMAILID").from("BULKMAIL").where("BULKMAIL.CAMPAIGN_ID = CAMPAIGN.CAMPAIGNID"), SqlBuilder.EXISTS())
}
result.string(cond.toString());
\ No newline at end of file
......@@ -8,5 +8,9 @@
<name>41286619-75fb-43a8-b293-0a1c4d5d47f6</name>
<view>BulkMailAnalysisOpeningHourChart_view</view>
</neonViewReference>
<neonViewReference>
<name>ae50e992-b06a-4d1e-98d5-af3a51f1b9c1</name>
<view>BulkMailAnalysisFilterableOpeningHourChart_view</view>
</neonViewReference>
</references>
</neonContext>
......@@ -2,11 +2,16 @@
<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
<name>BulkMailAnalysisStatusFunnelChart</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<filterView>BulkMailAnalysisFilterableStatusFunnelChart_view</filterView>
<entity>BulkMailAnalysisStatusFunnelChart_entity</entity>
<references>
<neonViewReference>
<name>a0dfc680-e935-40cb-972d-fa8b758d2346</name>
<view>BulkMailAnalysisStatusFunnelChart_view</view>
</neonViewReference>
<neonViewReference>
<name>633d47ad-64fa-4521-b509-c28c8d7298ff</name>
<view>BulkMailAnalysisFilterableStatusFunnelChart_view</view>
</neonViewReference>
</references>
</neonContext>
<?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>BulkMailAnalysisFilterableOpeningHourChart_view</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<filterable v="true" />
<dashletConfigurations>
<neonDashletConfiguration>
<name>BulkMailOpeningHourChart</name>
<title>Bulk Mail Opening Hours</title>
<description>Shows the opening hours of bulk mail recipients.</description>
<fragment>BulkMailAnalysisOpeningHourChart/filter</fragment>
<singleton v="true" />
<storeRoles>
<element>PROJECT_Marketing</element>
</storeRoles>
<icon>VAADIN:CHART</icon>
<categories>
<neonDashletCategory>
<name>marketing</name>
<title>Marketing</title>
</neonDashletCategory>
</categories>
</neonDashletConfiguration>
</dashletConfigurations>
<layout>
<boxLayout>
<name>layout</name>
</boxLayout>
</layout>
<children>
<multiDataChartViewTemplate>
<name>MultiDataChart</name>
<chartType>AREA</chartType>
<xAxis>X</xAxis>
<yAxis>Y</yAxis>
<categoryField>CATEGORY</categoryField>
</multiDataChartViewTemplate>
</children>
</neonView>
<?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>BulkMailAnalysisFilterableStatusFunnelChart_view</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<filterable v="true" />
<layout>
<boxLayout>
<name>layout</name>
</boxLayout>
</layout>
<children>
<singleDataChartViewTemplate>
<name>statusFunnel</name>
<chartType>FUNNEL</chartType>
<xAxis>statusDescription</xAxis>
<yAxis>statusCount</yAxis>
</singleDataChartViewTemplate>
</children>
</neonView>
......@@ -2,7 +2,7 @@
<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>BulkMailAnalysisScoreCard_view</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<filterable v="true" />
<filterable v="false" />
<dashletConfigurations>
<neonDashletConfiguration>
<name>bulkMailKeyFigures</name>
......@@ -31,6 +31,14 @@
<children>
<scoreCardViewTemplate>
<name>scoreCard</name>
<fieldActions>
<element>openStatusFunnel</element>
<element>openStatusFunnel</element>
<element>openStatusFunnel</element>
<element>openStatusFunnel</element>
<element>openStatusFunnel</element>
<element>openStatusFunnel</element>
</fieldActions>
<fields>
<entityFieldLink>
<name>d07101f9-dd9a-4f92-a809-8e7e6113bdd6</name>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment