diff options
| author | qdc <qdc@openerp.com> | 2014-08-21 12:53:47 +0200 |
|---|---|---|
| committer | Thibault Delavallée <tde@openerp.com> | 2014-08-26 11:56:49 +0200 |
| commit | f57787e07ee48268015cd088bfc3dafef7001558 (patch) | |
| tree | 5de5a170aefd5434f90fa0a1e5fb9726f8590b83 /addons/mass_mailing | |
| parent | 20d366595c303df29f72cc2016de5341d8827720 (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__.py | 1 | ||||
| -rw-r--r-- | addons/mass_mailing/models/__init__.py | 1 | ||||
| -rw-r--r-- | addons/mass_mailing/models/mass_mailing.py | 1 | ||||
| -rw-r--r-- | addons/mass_mailing/models/mass_mailing_report.py | 52 | ||||
| -rw-r--r-- | addons/mass_mailing/security/ir.model.access.csv | 3 | ||||
| -rw-r--r-- | addons/mass_mailing/views/mass_mailing.xml | 22 | ||||
| -rw-r--r-- | addons/mass_mailing/views/mass_mailing_report.xml | 61 | ||||
| -rw-r--r-- | addons/mass_mailing/wizard/test_mailing.py | 12 |
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 |
