[IMP] mass_mailing: improve mailing trace report
PURPOSE Improve user experience of report model build on mailing traces. SPECIFICATIONS Add scheduled count to reporting. Indeed we have number of sent and delivered traces but it lacks count of scheduled. Some traces are not sent for example when email or sms is missing or obviously wrong. Those are currently not counted in reporting, this is fixed. Views are also improved to add relevant metrics and measures. Notably add a list view on report model, allowing to see some metrics at a glance. Improve SMS related views, hiding opened / replied metrics as we do not track them currently in SMS. LINKS Task ID-2377974 Community PR odoo/odoo#61467 Enterprise PR odoo/enterprise#14633
This commit is contained in:
@@ -19,6 +19,7 @@ class MailingTraceReport(models.Model):
|
||||
string='Status', readonly=True)
|
||||
email_from = fields.Char('From', readonly=True)
|
||||
# traces
|
||||
scheduled = fields.Integer(readonly=True)
|
||||
sent = fields.Integer(readonly=True)
|
||||
delivered = fields.Integer(readonly=True)
|
||||
error = fields.Integer(readonly=True)
|
||||
@@ -57,11 +58,12 @@ class MailingTraceReport(models.Model):
|
||||
'trace.create_date as scheduled_date',
|
||||
'mailing.state',
|
||||
'mailing.email_from',
|
||||
"COUNT(trace.id) as scheduled",
|
||||
'COUNT(trace.sent_datetime) as sent',
|
||||
"(COUNT(trace.sent_datetime) - COUNT(trace.trace_status) FILTER (WHERE trace.trace_status IN ('error', 'bounce', 'cancel'))) as delivered",
|
||||
"(COUNT(trace.id) - COUNT(trace.trace_status) FILTER (WHERE trace.trace_status IN ('error', 'bounce', 'cancel'))) as delivered",
|
||||
"COUNT(trace.trace_status) FILTER (WHERE trace.trace_status = 'error') as error",
|
||||
"COUNT(trace.trace_status) FILTER (WHERE trace.trace_status = 'bounce') as bounced",
|
||||
"COUNT(trace.trace_status) FILTER (WHERE trace.trace_status = 'cancel') as cancel",
|
||||
"COUNT(trace.trace_status) FILTER (WHERE trace.trace_status = 'cancel') as canceled",
|
||||
"COUNT(trace.trace_status) FILTER (WHERE trace.trace_status = 'open') as opened",
|
||||
"COUNT(trace.trace_status) FILTER (WHERE trace.trace_status = 'reply') as replied",
|
||||
"COUNT(trace.links_click_datetime) as clicked",
|
||||
|
||||
@@ -1,17 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="mailing_trace_report_view_tree" model="ir.ui.view">
|
||||
<field name="name">mailing.trace.report.view.tree</field>
|
||||
<field name="model">mailing.trace.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Mass Mailing Statistics" sample="1">
|
||||
<field name="name"/>
|
||||
<field name="campaign" groups="mass_mailing.group_mass_mailing_campaign"/>
|
||||
<field name="mailing_type" invisible="1"/>
|
||||
<field name="state"/>
|
||||
<field name="scheduled"/>
|
||||
<field name="sent"/>
|
||||
<field name="delivered"/>
|
||||
<field name="opened"/>
|
||||
<field name="replied"/>
|
||||
<field name="clicked"/>
|
||||
<field name="canceled" optional="hide"/>
|
||||
<field name="error" optional="hide"/>
|
||||
<field name="bounced" optional="hide"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_trace_report_view_pivot" model="ir.ui.view">
|
||||
<field name="name">mailing.trace.report.view.pivot</field>
|
||||
<field name="model">mailing.trace.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Mass Mailing Statistics" disable_linking="True" sample="1">
|
||||
<pivot string="Mass Mailing Statistics" disable_linking="1" sample="1">
|
||||
<field name="name" type="row"/>
|
||||
<field name="sent" type="measure"/>
|
||||
<field name="scheduled" type="measure"/>
|
||||
<field name="delivered" type="measure"/>
|
||||
<field name="opened" type="measure"/>
|
||||
<field name="bounced" type="measure"/>
|
||||
<field name="replied" type="measure" invisible="0"/>
|
||||
<field name="replied" type="measure"/>
|
||||
<field name="clicked" type="measure"/>
|
||||
<field name="canceled"/>
|
||||
<field name="error"/>
|
||||
<field name="bounced"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
@@ -20,10 +45,11 @@
|
||||
<field name="name">mailing.trace.report.view.graph</field>
|
||||
<field name="model">mailing.trace.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Mass Mailing Statistics" sample="1" disable_linking="1">
|
||||
<graph string="Mass Mailing Statistics" disable_linking="1" sample="1">
|
||||
<field name="name"/>
|
||||
<field name="sent" type="measure"/>
|
||||
<field name="replied" invisible="0"/>
|
||||
<field name="replied"/>
|
||||
<field name="clicked"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
@@ -35,9 +61,9 @@
|
||||
<search string="Mass Mailing Statistics">
|
||||
<field name="name" string="Mailing"/>
|
||||
<field name="campaign" string="Campaign" groups="mass_mailing.group_mass_mailing_campaign"/>
|
||||
<filter name="filter_scheduled_date" date="scheduled_date"/>
|
||||
<filter name="filter_scheduled_date" date="scheduled"/>
|
||||
<group expand="0" string="Extended Filters...">
|
||||
<field name="scheduled_date"/>
|
||||
<field name="scheduled"/>
|
||||
</group>
|
||||
<group expand="1" string="Group By...">
|
||||
<filter string="Mass Mailing Campaign" domain="[]" name="mass_mailing_campaign"
|
||||
@@ -47,8 +73,8 @@
|
||||
<filter string="Sent By" domain="[]" name="sent_by"
|
||||
context="{'group_by':'email_from'}"/>
|
||||
<separator/>
|
||||
<filter string="Scheduled Period" name="scheduled_date"
|
||||
domain="[]" context="{'group_by':'scheduled_date'}"/>
|
||||
<filter string="Scheduled Period" name="scheduled"
|
||||
domain="[]" context="{'group_by':'scheduled'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
@@ -59,8 +85,14 @@
|
||||
<field name="name">Mass Mailing Analysis</field>
|
||||
<field name="res_model">mailing.trace.report</field>
|
||||
<field name="domain">[('mailing_type', '=', 'mail')]</field>
|
||||
<field name="view_mode">graph,pivot</field>
|
||||
<field name="help" type="html"><p>Mass Mailing Statistics allows you to check different mailing related information like number of bounced mails, opened mails, replied mails. You can sort out your analysis by different groups to get accurate grained analysis.</p></field>
|
||||
<field name="view_mode">graph,pivot,tree</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Mass Mailing Statistics allows you to check different mailing related information
|
||||
like number of bounced mails, opened mails, replied mails. You can sort out
|
||||
your analysis by different groups to get accurate grained analysis.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Reporting" id="menu_mass_mailing_report" sequence="99"
|
||||
|
||||
@@ -1,5 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="mailing_trace_report_sms_view_tree" model="ir.ui.view">
|
||||
<field name="name">mailing.sms.trace.report.view.tree</field>
|
||||
<field name="model">mailing.trace.report</field>
|
||||
<field name="inherit_id" ref="mass_mailing.mailing_trace_report_view_tree"/>
|
||||
<field name="priority" eval="50"/>
|
||||
<field name="mode">primary</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='opened']" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='replied']" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_trace_report_sms_view_pivot" model="ir.ui.view">
|
||||
<field name="name">mailing.sms.trace.report.view.pivot</field>
|
||||
<field name="model">mailing.trace.report</field>
|
||||
@@ -8,6 +25,9 @@
|
||||
<field name="mode">primary</field>
|
||||
<field name="type">pivot</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='opened']" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='replied']" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</xpath>
|
||||
@@ -32,7 +52,7 @@
|
||||
<record id="mailing_trace_report_action_sms" model="ir.actions.act_window">
|
||||
<field name="name">SMS Marketing Analysis</field>
|
||||
<field name="res_model">mailing.trace.report</field>
|
||||
<field name="view_mode">graph,pivot</field>
|
||||
<field name="view_mode">graph,pivot,tree</field>
|
||||
<field name="domain">[('mailing_type', '=', 'sms')]</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
@@ -56,6 +76,13 @@
|
||||
<field name="view_id" ref="mailing_trace_report_sms_view_pivot"/>
|
||||
</record>
|
||||
|
||||
<record id="mailing_trace_report_action_sms_view_tree" model="ir.actions.act_window.view">
|
||||
<field name="sequence">2</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="act_window_id" ref="mailing_trace_report_action_sms"/>
|
||||
<field name="view_id" ref="mailing_trace_report_sms_view_tree"/>
|
||||
</record>
|
||||
|
||||
<!-- SMS Marketing / Reporting -->
|
||||
<record id="mass_mailing_sms_menu_reporting" model="ir.ui.menu">
|
||||
<field name="action" ref="mailing_trace_report_action_sms"/>
|
||||
|
||||
Reference in New Issue
Block a user