summaryrefslogtreecommitdiff
path: root/addons/mass_mailing
diff options
context:
space:
mode:
authorqdc <qdc@openerp.com>2014-08-21 12:53:47 +0200
committerThibault Delavallée <tde@openerp.com>2014-08-26 11:56:49 +0200
commitf57787e07ee48268015cd088bfc3dafef7001558 (patch)
tree5de5a170aefd5434f90fa0a1e5fb9726f8590b83 /addons/mass_mailing
parent20d366595c303df29f72cc2016de5341d8827720 (diff)
[IMP] Cleaning of reporting (group_by, filters), adding new favourites and default views, some renaming (py and xml files)
Diffstat (limited to 'addons/mass_mailing')
-rw-r--r--addons/mass_mailing/__openerp__.py1
-rw-r--r--addons/mass_mailing/models/__init__.py1
-rw-r--r--addons/mass_mailing/models/mass_mailing.py1
-rw-r--r--addons/mass_mailing/models/mass_mailing_report.py52
-rw-r--r--addons/mass_mailing/security/ir.model.access.csv3
-rw-r--r--addons/mass_mailing/views/mass_mailing.xml22
-rw-r--r--addons/mass_mailing/views/mass_mailing_report.xml61
-rw-r--r--addons/mass_mailing/wizard/test_mailing.py12
8 files changed, 145 insertions, 8 deletions
diff --git a/addons/mass_mailing/__openerp__.py b/addons/mass_mailing/__openerp__.py
index e0a8ab041fe..397c04e82e4 100644
--- a/addons/mass_mailing/__openerp__.py
+++ b/addons/mass_mailing/__openerp__.py
@@ -44,6 +44,7 @@ professional emails and reuse templates in a few clicks.
'data/mass_mailing_data.xml',
'wizard/mail_compose_message_view.xml',
'wizard/test_mailing.xml',
+ 'views/mass_mailing_report.xml',
'views/mass_mailing.xml',
'views/res_config.xml',
'views/res_partner.xml',
diff --git a/addons/mass_mailing/models/__init__.py b/addons/mass_mailing/models/__init__.py
index 2cffe48642b..702da268d84 100644
--- a/addons/mass_mailing/models/__init__.py
+++ b/addons/mass_mailing/models/__init__.py
@@ -5,3 +5,4 @@ import mass_mailing_stats
import mail_mail
import mail_thread
import res_config
+import mass_mailing_report
diff --git a/addons/mass_mailing/models/mass_mailing.py b/addons/mass_mailing/models/mass_mailing.py
index 17731500d3c..bee3e8528f9 100644
--- a/addons/mass_mailing/models/mass_mailing.py
+++ b/addons/mass_mailing/models/mass_mailing.py
@@ -30,6 +30,7 @@ class MassMailingContact(osv.Model):
be able to deal with large contact list to email without bloating the partner
base."""
_name = 'mail.mass_mailing.contact'
+ _inherit = 'mail.thread'
_description = 'Mass Mailing Contact'
_order = 'email'
_rec_name = 'email'
diff --git a/addons/mass_mailing/models/mass_mailing_report.py b/addons/mass_mailing/models/mass_mailing_report.py
new file mode 100644
index 00000000000..9d91be2759f
--- /dev/null
+++ b/addons/mass_mailing/models/mass_mailing_report.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+
+from openerp.osv import fields, osv
+from openerp import tools
+
+
+class MassMailingReport(osv.Model):
+ _name = 'mail.statistics.report'
+ _auto = False
+ _description = 'Mass Mailing Statistics'
+
+ _columns = {
+ 'scheduled_date': fields.datetime('Scheduled Date', readonly=True),
+ 'name': fields.char('Mass Mail', readonly=True),
+ 'campaign': fields.char('Mass Mail Campaign', readonly=True),
+ 'sent': fields.integer('Sent', readonly=True),
+ 'delivered': fields.integer('Delivered', readonly=True),
+ 'opened': fields.integer('Opened', readonly=True),
+ 'bounced': fields.integer('Bounced', readonly=True),
+ 'replied': fields.integer('Replied', readonly=True),
+ 'state': fields.selection(
+ [('draft', 'Draft'), ('test', 'Tested'), ('done', 'Sent')],
+ string='Status', readonly=True,
+ ),
+ 'email_from': fields.char('From', readonly=True),
+ }
+
+ def init(self, cr):
+ """Mass Mail Statistical Report: based on mail.mail.statistics that models the various
+ statistics collected for each mailing, and mail.mass_mailing model that models the
+ various mailing performed. """
+ tools.drop_view_if_exists(cr, 'mail_statistics_report')
+ cr.execute("""
+ CREATE OR REPLACE VIEW mail_statistics_report AS (
+ SELECT
+ min(ms.id) as id,
+ ms.scheduled as scheduled_date,
+ mm.name as name,
+ mc.name as campaign,
+ count(ms.bounced) as bounced,
+ count(ms.sent) as sent,
+ (count(ms.sent) - count(ms.bounced)) as delivered,
+ count(ms.opened) as opened,
+ count(ms.replied) as replied,
+ mm.state,
+ mm.email_from
+ FROM
+ mail_mail_statistics as ms
+ left join mail_mass_mailing as mm ON (ms.mass_mailing_id=mm.id)
+ left join mail_mass_mailing_campaign as mc ON (ms.mass_mailing_campaign_id=mc.id)
+ GROUP BY ms.scheduled, mm.name, mc.name, mm.state, mm.email_from
+ )""")
diff --git a/addons/mass_mailing/security/ir.model.access.csv b/addons/mass_mailing/security/ir.model.access.csv
index d5c76b9f69d..5aac6639fbd 100644
--- a/addons/mass_mailing/security/ir.model.access.csv
+++ b/addons/mass_mailing/security/ir.model.access.csv
@@ -7,4 +7,5 @@ access_mass_mailing_campaign,mail.mass_mailing.campaign,model_mail_mass_mailing_
access_mass_mailing_campaign_system,mail.mass_mailing.campaign.system,model_mail_mass_mailing_campaign,base.group_system,1,1,1,1
access_mass_mailing,mail.mass_mailing,model_mail_mass_mailing,base.group_user,1,1,1,0
access_mass_mailing_system,mail.mass_mailing.system,model_mail_mass_mailing,base.group_system,1,1,1,1
-access_mail_mail_statistics,mail.mail.statistics,model_mail_mail_statistics,base.group_user,1,1,1,1 \ No newline at end of file
+access_mail_mail_statistics,mail.mail.statistics,model_mail_mail_statistics,base.group_user,1,1,1,1
+access_mail_statistics_report,mail.statistics.report,model_mail_statistics_report,base.group_user,1,1,1,1
diff --git a/addons/mass_mailing/views/mass_mailing.xml b/addons/mass_mailing/views/mass_mailing.xml
index 559bcbf7d95..f1ed063d221 100644
--- a/addons/mass_mailing/views/mass_mailing.xml
+++ b/addons/mass_mailing/views/mass_mailing.xml
@@ -228,11 +228,16 @@
<field name="name" string="Mailings"/>
<field name="mass_mailing_campaign_id"/>
<group expand="0" string="Group By">
- <filter string="State" name="group_state"
- context="{'group_by': 'state'}"/>
<filter string="Campaign" name="group_mass_mailing_campaign_id"
groups="mass_mailing.group_mass_mailing_campaign"
context="{'group_by': 'mass_mailing_campaign_id'}"/>
+ <filter string="State" name="group_state"
+ context="{'group_by': 'state'}"/>
+ <filter string="Sent By" domain="[]"
+ context="{'group_by':'email_from'}"/>
+ <separator/>
+ <filter string="Sent Month"
+ domain="[]" context="{'group_by':'sent_date:month'}"/>
</group>
</search>
</field>
@@ -419,6 +424,17 @@
</field>
</record>
+ <record id="view_mail_mass_mailing_graph" model="ir.ui.view">
+ <field name="name">mail.mass_mailing.graph</field>
+ <field name="model">mail.mass_mailing</field>
+ <field name="arch" type="xml">
+ <graph string="Mass Mailing" type="bar" stacked="True">
+ <field name="mass_mailing_campaign_id" type="row"/>
+ <field name="sent_date" interval="month" type="col"/>
+ </graph>
+ </field>
+ </record>
+
<record id="action_view_mass_mailings" model="ir.actions.act_window">
<field name="name">Mass Mailings</field>
<field name="res_model">mail.mass_mailing</field>
@@ -438,7 +454,7 @@
<field name="view_type">form</field>
<field name="view_mode">kanban,tree,form</field>
<field name="context">{
- 'search_default_mass_mailing_campaign_id': [active_id],
+ 'search_default_mass_mailing_campaign_id': [active_id],
'default_mass_mailing_campaign_id': active_id,
}
</field>
diff --git a/addons/mass_mailing/views/mass_mailing_report.xml b/addons/mass_mailing/views/mass_mailing_report.xml
new file mode 100644
index 00000000000..e52a6f7e0a2
--- /dev/null
+++ b/addons/mass_mailing/views/mass_mailing_report.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <record id="view_mail_statistics_report_graph" model="ir.ui.view">
+ <field name="name">mail.statistics.report.graph</field>
+ <field name="model">mail.statistics.report</field>
+ <field name="arch" type="xml">
+ <graph string="Mass Mailing Statistics" type="pivot" stacked="True">
+ <field name="campaign" type="row"/>
+ <field name="sent" type="measure"/>
+ <field name="delivered" type="measure"/>
+ <field name="opened" type="measure"/>
+ <field name="bounced" type="measure"/>
+ <field name="replied" type="measure"/>
+ </graph>
+ </field>
+ </record>
+
+ <record id="view_mail_statistics_report_search" model="ir.ui.view">
+ <field name="name">mail.statistics.report.search</field>
+ <field name="model">mail.statistics.report</field>
+ <field name="arch" type="xml">
+ <search string="Mass Mailing Statistics">
+ <group expand="0" string="Extended Filters...">
+ <field name="scheduled_date"/>
+ </group>
+ <group expand="1" string="Group By...">
+ <filter string="Mass Mailing Campaign"
+ domain="[]" context="{'group_by':'campaign'}"/>
+ <filter string="State" domain="[]"
+ context="{'group_by':'state'}"/>
+ <filter string="Sent By" domain="[]"
+ context="{'group_by':'email_from'}"/>
+ <separator/>
+ <filter string="Scheduled Month"
+ domain="[]" context="{'group_by':'scheduled_date:month'}"/>
+ </group>
+ </search>
+ </field>
+ </record>
+
+ <!-- Actions and Menuitems -->
+ <record id="action_mail_statistics_report" model="ir.actions.act_window">
+ <field name="name">Mass Mailing Analysis</field>
+ <field name="res_model">mail.statistics.report</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">graph</field>
+ <field name="help">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.</field>
+ </record>
+ <record id="action_mail_mass_mailing_report_graph" model="ir.actions.act_window.view">
+ <field name="view_mode">graph</field>
+ <field name="view_id" ref="view_mail_statistics_report_graph"/>
+ <field name="act_window_id" ref="action_mail_statistics_report"/>
+ </record>
+
+ <menuitem name="Mass Mailing Analysis" id="menu_mass_mailing_report" sequence="1"
+ parent="base.marketing_reporting_menu" action="action_mail_statistics_report"/>
+
+ </data>
+</openerp>
diff --git a/addons/mass_mailing/wizard/test_mailing.py b/addons/mass_mailing/wizard/test_mailing.py
index bd1124a8cdc..80b84de3deb 100644
--- a/addons/mass_mailing/wizard/test_mailing.py
+++ b/addons/mass_mailing/wizard/test_mailing.py
@@ -30,11 +30,15 @@ class TestMassMailing(osv.TransientModel):
'reply_to': mailing.reply_to,
'email_to': test_mail,
'subject': mailing.name,
- 'body_html': mailing.body_html,
- 'auto_delete': True,
- 'mailing_id': wizard.mass_mailing_id.id,
+ 'body_html': '',
+ 'notification': True,
+ 'mailing_id': mailing.id,
}
- mail_ids.append(Mail.create(cr, uid, mail_values, context=context))
+ mail_mail_obj = Mail.browse(cr, uid, Mail.create(cr, uid, mail_values, context=context), context=context)
+ unsubscribe_url = Mail._get_unsubscribe_url(cr, uid, mail_mail_obj, test_mail, context=context)
+ body = tools.append_content_to_html(mailing.body_html, unsubscribe_url, plaintext=False, container_tag='p')
+ Mail.write(cr, uid, mail_mail_obj.id, {'body_html': mailing.body_html}, context=context)
+ mail_ids.append(mail_mail_obj.id)
Mail.send(cr, uid, mail_ids, context=context)
self.pool['mail.mass_mailing'].write(cr, uid, [mailing.id], {'state': 'test'}, context=context)
return True