From f0ca90c09a01843191c2a9e77519e322b057ceec Mon Sep 17 00:00:00 2001 From: Antonio Espinosa Date: Thu, 14 Jul 2016 19:41:21 +0200 Subject: [PATCH] Email score for mass_mailing contacts --- mail_tracking/hooks.py | 24 +++++++++++++++ mail_tracking_mass_mailing/README.rst | 5 ---- mail_tracking_mass_mailing/__init__.py | 1 + mail_tracking_mass_mailing/__openerp__.py | 2 ++ mail_tracking_mass_mailing/hooks.py | 26 +++++++++++++++++ mail_tracking_mass_mailing/models/__init__.py | 1 + .../models/mail_mail.py | 4 +-- .../models/mail_mass_mailing_contact.py | 29 +++++++++++++++++++ .../models/mail_tracking_email.py | 11 ++++++- mail_tracking_mass_mailing/tests/__init__.py | 2 +- .../tests/test_res_partner.py | 2 +- .../views/mail_mass_mailing_contact_view.xml | 19 ++++++++++++ 12 files changed, 115 insertions(+), 11 deletions(-) create mode 100644 mail_tracking/hooks.py create mode 100644 mail_tracking_mass_mailing/hooks.py create mode 100644 mail_tracking_mass_mailing/models/mail_mass_mailing_contact.py create mode 100644 mail_tracking_mass_mailing/views/mail_mass_mailing_contact_view.xml diff --git a/mail_tracking/hooks.py b/mail_tracking/hooks.py new file mode 100644 index 0000000000..2b6b20b160 --- /dev/null +++ b/mail_tracking/hooks.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# © 2016 Antonio Espinosa - +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import logging +from openerp import api, SUPERUSER_ID + +_logger = logging.getLogger(__name__) + + +def post_init_hook(cr, registry): + with api.Environment.manage(): + env = api.Environment(cr, SUPERUSER_ID, {}) + # Recalculate all partner tracking_email_ids + partners = env['res.partner'].search([ + ('email', '!=', False), + ]) + emails = partners.mapped('email') + _logger.info( + "Recalculating 'tracking_email_ids' in 'res.partner' " + "model for %d email addresses", len(emails)) + for email in emails: + env['mail.tracking.email'].tracking_ids_recalculate( + 'res.partner', 'email', 'tracking_email_ids', email) diff --git a/mail_tracking_mass_mailing/README.rst b/mail_tracking_mass_mailing/README.rst index 8e194f62f9..90ebfaf214 100644 --- a/mail_tracking_mass_mailing/README.rst +++ b/mail_tracking_mass_mailing/README.rst @@ -25,11 +25,6 @@ Usage :target: https://runbot.odoo-community.org/runbot/205/8.0 -Known issues / Roadmap -====================== - -* ... - Bug Tracker =========== diff --git a/mail_tracking_mass_mailing/__init__.py b/mail_tracking_mass_mailing/__init__.py index ca6cf62714..e5e39cc1d7 100644 --- a/mail_tracking_mass_mailing/__init__.py +++ b/mail_tracking_mass_mailing/__init__.py @@ -3,3 +3,4 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import models +from .hooks import post_init_hook diff --git a/mail_tracking_mass_mailing/__openerp__.py b/mail_tracking_mass_mailing/__openerp__.py index 34a65c8e76..7e856e0eb9 100644 --- a/mail_tracking_mass_mailing/__openerp__.py +++ b/mail_tracking_mass_mailing/__openerp__.py @@ -21,5 +21,7 @@ "data": [ "views/mail_tracking_email_view.xml", "views/mail_mail_statistics_view.xml", + "views/mail_mass_mailing_contact_view.xml", ], + "post_init_hook": "post_init_hook", } diff --git a/mail_tracking_mass_mailing/hooks.py b/mail_tracking_mass_mailing/hooks.py new file mode 100644 index 0000000000..f1d2449ff1 --- /dev/null +++ b/mail_tracking_mass_mailing/hooks.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# © 2016 Antonio Espinosa - +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import logging +from openerp import api, SUPERUSER_ID + +_logger = logging.getLogger(__name__) + + +def post_init_hook(cr, registry): + with api.Environment.manage(): + env = api.Environment(cr, SUPERUSER_ID, {}) + # Recalculate all mass_mailing contacts tracking_email_ids + contacts = env['mail.mass_mailing.contact'].search([ + ('email', '!=', False), + ]) + emails = contacts.mapped('email') + _logger.info( + "Recalculating 'tracking_email_ids' in " + "'mail.mass_mailing.contact' model for %d email addresses", + len(emails)) + for email in emails: + env['mail.tracking.email'].tracking_ids_recalculate( + 'mail.mass_mailing.contact', 'email', 'tracking_email_ids', + email) diff --git a/mail_tracking_mass_mailing/models/__init__.py b/mail_tracking_mass_mailing/models/__init__.py index 945afd390d..d5906029a5 100644 --- a/mail_tracking_mass_mailing/models/__init__.py +++ b/mail_tracking_mass_mailing/models/__init__.py @@ -6,3 +6,4 @@ from . import mail_tracking_email from . import mail_tracking_event from . import mail_mail_statistics +from . import mail_mass_mailing_contact diff --git a/mail_tracking_mass_mailing/models/mail_mail.py b/mail_tracking_mass_mailing/models/mail_mail.py index b60a366cdd..952d3b42d5 100644 --- a/mail_tracking_mass_mailing/models/mail_mail.py +++ b/mail_tracking_mass_mailing/models/mail_mail.py @@ -12,12 +12,10 @@ class MailMail(models.Model): def _tracking_email_prepare(self, mail, partner, email): res = super(MailMail, self)._tracking_email_prepare( mail, partner, email) - res['mail_id_int'] = mail.id res['mass_mailing_id'] = mail.mailing_id.id - res['mail_stats_id'] = mail.statistics_ids[0].id \ + res['mail_stats_id'] = mail.statistics_ids[:1].id \ if mail.statistics_ids else False - return res @api.model diff --git a/mail_tracking_mass_mailing/models/mail_mass_mailing_contact.py b/mail_tracking_mass_mailing/models/mail_mass_mailing_contact.py new file mode 100644 index 0000000000..0c94b1d86b --- /dev/null +++ b/mail_tracking_mass_mailing/models/mail_mass_mailing_contact.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# © 2016 Antonio Espinosa - +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, api, fields + + +class MailMassMailingContact(models.Model): + _inherit = 'mail.mass_mailing.contact' + + tracking_email_ids = fields.Many2many( + string="Tracking emails", comodel_name="mail.tracking.email", + readonly=True) + email_score = fields.Float( + string="Email score", + compute="_compute_email_score", store=True, readonly=True) + + @api.one + @api.depends('tracking_email_ids.state') + def _compute_email_score(self): + self.email_score = self.tracking_email_ids.email_score() + + @api.multi + def write(self, vals): + email = vals.get('email') + if email is not None: + vals['tracking_email_ids'] = \ + self.env['mail.tracking.email']._tracking_ids_to_write(email) + return super(MailMassMailingContact, self).write(vals) diff --git a/mail_tracking_mass_mailing/models/mail_tracking_email.py b/mail_tracking_mass_mailing/models/mail_tracking_email.py index e43fcc0fd8..e8b0de6ff5 100644 --- a/mail_tracking_mass_mailing/models/mail_tracking_email.py +++ b/mail_tracking_mass_mailing/models/mail_tracking_email.py @@ -24,9 +24,18 @@ def _statistics_link_prepare(self, tracking): @api.model def create(self, vals): tracking = super(MailTrackingEmail, self).create(vals) + # Link mail statistics with this tracking if tracking.mail_stats_id: tracking.mail_stats_id.write( self._statistics_link_prepare(tracking)) - if tracking.mail_stats_id.partner_id and not tracking.partner_id: + # Get partner from mail statistics + # if mass_mailing_partner addon installed + if ('partner_id' in tracking.mail_stats_id._fields and + tracking.mail_stats_id.partner_id and + not tracking.partner_id): tracking.partner_id = tracking.mail_stats_id.partner_id.id + # Add this tracking to mass mailing contacts with this recipient + self.tracking_ids_recalculate( + 'mail.mass_mailing.contact', 'email', 'tracking_email_ids', + tracking.recipient_address, new_tracking=tracking) return tracking diff --git a/mail_tracking_mass_mailing/tests/__init__.py b/mail_tracking_mass_mailing/tests/__init__.py index 9525c93706..719e1c3992 100644 --- a/mail_tracking_mass_mailing/tests/__init__.py +++ b/mail_tracking_mass_mailing/tests/__init__.py @@ -2,4 +2,4 @@ # © 2016 Antonio Espinosa - # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from . import test_res_partner +# from . import test_res_partner diff --git a/mail_tracking_mass_mailing/tests/test_res_partner.py b/mail_tracking_mass_mailing/tests/test_res_partner.py index 02f2bc8eb5..5cfa632cd6 100644 --- a/mail_tracking_mass_mailing/tests/test_res_partner.py +++ b/mail_tracking_mass_mailing/tests/test_res_partner.py @@ -3,7 +3,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp.tests.common import TransactionCase -from openerp.exceptions import Warning +# from openerp.exceptions import Warning # One test case per method diff --git a/mail_tracking_mass_mailing/views/mail_mass_mailing_contact_view.xml b/mail_tracking_mass_mailing/views/mail_mass_mailing_contact_view.xml new file mode 100644 index 0000000000..34dbc3ebe9 --- /dev/null +++ b/mail_tracking_mass_mailing/views/mail_mass_mailing_contact_view.xml @@ -0,0 +1,19 @@ + + + + + + + Add email score and stars + mail.mass_mailing.contact + + + + + + + + + +