applications/marketing/widget/sfa/AnalyticsScreens.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
This file is subject to the terms and conditions defined in the
files 'LICENSE' and 'NOTICE', which are part of this source
code package.
-->
<screens xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/widget-screen.xsd">
<!-- SCIPIO: Common actions, common to both find form and results -->
<screen name="CommonAnalyticsActions">
<actions>
<script lang="groovy"><![CDATA[
productStores = delegator.findByAnd("ProductStore", null, ["productStoreId", "storeName"], true);
context.productStores = productStores;
// Instead of listing all, we will list only those that can actually be converted...
//context.currencies = delegator.findByAnd("Uom", ["uomTypeId": "CURRENCY_MEASURE"], ["uomId"], true);
context.currencies = org.ofbiz.common.uom.UomWorker.getConvertibleUoms(delegator, dispatcher,
Boolean.TRUE, ["uomTypeId": "CURRENCY_MEASURE"], ["uomId"], true, null, true);
context.allowedOrderStatus = org.ofbiz.base.util.UtilMisc.toList("ORDER_APPROVED", "ORDER_SENT", "ORDER_COMPLETED")
]]></script>
</actions>
</screen>
<screen name="AnalyticsSales">
<section>
<actions>
<set field="titleProperty" value="MarketingAnalyticsSales"/>
<set field="activeSubMenuItem" value="AnalyticsSales"/>
<include-screen-actions name="CommonAnalyticsActions" />
<set field="chartIntervalScope" value="${parameters.intervalScope}" default-value="month"/> <!-- day|week|month|year -->
<set field="chartIntervalCount" value="6"/>
<entity-condition entity-name="Enumeration" list="salesChannelList">
<condition-expr field-name="enumTypeId" operator="equals" value="ORDER_SALES_CHANNEL"/>
</entity-condition>
<entity-condition entity-name="StatusItem" list="orderStatusList">
<condition-expr field-name="statusId" operator="in" from-field="allowedOrderStatus"/>
</entity-condition>
<!-- NOTE: we MUST run this early for any parameter processing -->
<include-screen-actions name="AnalyticsSalesStatsActions" />
</actions>
<widgets>
<decorator-screen name="CommonAnalyticsDecorator" location="${parameters.mainDecoratorLocation}">
<decorator-section name="body">
<container style="${styles.grid_row}">
<container style="${styles.grid_large}4 ${styles.grid_cell}">
<platform-specific><html><html-template location="component://marketing/webapp/sfa/analytics/FindAnalyticsSales.ftl"/></html></platform-specific>
</container>
<container style="${styles.grid_large}8 ${styles.grid_cell}">
<include-screen name="AnalyticsSalesStats"/>
</container>
</container>
</decorator-section>
</decorator-screen>
</widgets>
</section>
</screen>
<screen name="AnalyticsSalesStatsActions">
<actions>
<!-- double-include guard -->
<if>
<condition>
<not><if-true field="ranAnalyticsSalesStatsActions"/></not>
</condition>
<then>
<set field="chartType" value="line"/>
<set field="chartDatasets" value="1"/>
<set field="chartLibrary" value="chart"/>
<set field="chartIntervalScope" value="${parameters.intervalScope}" default-value="month"/> <!-- day|week|month|year -->
<script location="component://marketing/webapp/marketing/WEB-INF/actions/analytics/SalesChart.groovy"/>
<set field="ranAnalyticsSalesStatsActions" type="Boolean" value="true"/>
</then>
</if>
</actions>
</screen>
<screen name="AnalyticsSalesStats">
<section>
<actions>
<include-screen-actions name="AnalyticsSalesStatsActions" />
<!--
<set field="totalsDesc" value="${orderStats.totalOrderCount} ${uiLabelMap.OrderOrders}; ${orderStats.totalGrandTotal} ${currencyUomId}" />-->
<set field="totalsDesc" value="${uiLabelMap.OrderOrders}: ${orderStats.totalOrderCount}; ${uiLabelMap.OrderTotal}: ${orderStats.totalGrandTotal?currency(${context.currencyUomId})}" />
<if>
<condition>
<if-empty field="productStoreId"/>
</condition>
<then>
<set field="chartTitle" value="${totalsDesc}"/>
</then>
<else>
<set field="chartTitle" value="${productStoreId} ${totalsDesc}"/>
</else>
</if>
<set field="xlabel" value="${uiLabelMap.OrderGrandTotal} (${currencyUomId})"/><!-- ${uiLabelMap.ProductSales} -->
<set field="ylabel" value="${uiLabelMap.CommonWeek}"/>
<set field="label1" value="${uiLabelMap.OrderGrandTotal} (${currencyUomId})"/><!-- ${uiLabelMap.ProductProductsSold} -->
<set field="label2" value="${uiLabelMap.OrderOrders}"/>
</actions>
<widgets>
<platform-specific><html><html-template location="component://marketing/webapp/sfa/analytics/AnalyticsSalesChart.ftl"/></html></platform-specific>
</widgets>
</section>
</screen>
<screen name="AnalyticsTracking">
<section>
<actions>
<set field="titleProperty" value="MarketingAnalytics"/>
<set field="activeSubMenuItem" value="AnalyticsTracking"/>
<include-screen-actions name="CommonAnalyticsActions" />
<set field="chartIntervalScope" value="${parameters.intervalScope}" default-value="week"/> <!-- day|week|month|year -->
<set field="chartIntervalCount" value="6"/>
<!-- <script location="component://marketing/webapp/marketing/WEB-INF/actions/analytics/AnalyticsTracking.groovy"/> -->
<entity-condition list="marketingCampaignList" entity-name="MarketingCampaign" filter-by-date="true"/>
<entity-condition entity-name="TrackingCode" list="trackingCodeList">
<condition-expr field-name="marketingCampaignId" operator="equals" from-field="parameters.marketingCampaignId"/>
</entity-condition>
<!-- NOTE: we MUST run this early for any parameter processing -->
<include-screen-actions name="AnalyticsTrackingStatsActions" />
</actions>
<widgets>
<decorator-screen name="CommonAnalyticsDecorator" location="${parameters.mainDecoratorLocation}">
<decorator-section name="body">
<container style="${styles.grid_row}">
<container style="${styles.grid_large}4 ${styles.grid_cell}">
<platform-specific><html><html-template location="component://marketing/webapp/sfa/analytics/FindAnalyticsTracking.ftl"/></html></platform-specific>
</container>
<container style="${styles.grid_large}8 ${styles.grid_cell}">
<include-screen name="AnalyticsTrackingStats"/>
</container>
</container>
</decorator-section>
</decorator-screen>
</widgets>
</section>
</screen>
<screen name="AnalyticsTrackingStatsActions">
<actions>
<!-- double-include guard -->
<if>
<condition>
<not><if-true field="ranAnalyticsTrackingStatsActions"/></not>
</condition>
<then>
<set field="chartType" value="line"/>
<set field="chartData" value="week"/>
<set field="chartDatasets" value="2"/>
<set field="chartLibrary" value="chart"/>
<set field="chartIntervalScope" value="${parameters.intervalScope}" default-value="week"/> <!-- day|week|month|year -->
<script location="component://marketing/webapp/marketing/WEB-INF/actions/analytics/TrackingCodeChart.groovy"/>
<set field="ranAnalyticsTrackingStatsActions" type="Boolean" value="true"/>
</then>
</if>
</actions>
</screen>
<screen name="AnalyticsTrackingStats">
<section>
<actions>
<include-screen-actions name="AnalyticsTrackingStatsActions" />
<set field="totalsDesc" value="${uiLabelMap.OrderOrders}: ${trackingStats.totalOrders}; ${uiLabelMap.PartyVisits}: ${trackingStats.totalVisits}" />
<if>
<condition>
<if-empty field="productStoreId"/>
</condition>
<then>
<set field="chartTitle" value="${totalsDesc}"/>
</then>
<else>
<set field="chartTitle" value="${productStoreId} ${totalsDesc}"/>
</else>
</if>
<set field="xlabel" value="${uiLabelMap.ProductSales}"/>
<set field="ylabel" value="${uiLabelMap.CommonWeek}"/>
<set field="label1" value="${uiLabelMap.PartyVisits}"/>
<set field="label2" value="${uiLabelMap.OrderOrders}"/>
</actions>
<widgets>
<platform-specific><html><html-template location="component://marketing/webapp/sfa/analytics/AnalyticsTrackingChart.ftl"/></html></platform-specific>
</widgets>
</section>
</screen>
</screens>