[MIG] mail_tracking_mass_mailing: Migration to 13.0

* Change references to mail_mail_statistics model with mail_trace
* Change references to mail.mass_mailing model with mailing.mailing
* Change reference to statistics_ids field with mailing_trace_ids
* Change reference to send_mail method with action_send_mail
* Replace mailing.mailing name for required subject field
* fix view reference not_blacklisted with filter_not_email_bl
* fix not-stored compute, set value for all the records
pull/550/head
Katherine Zaoral 2020-06-09 10:10:35 -03:00
parent d3426a13d5
commit 2c2ead4486
12 changed files with 40 additions and 43 deletions

View File

@ -7,7 +7,7 @@
{
"name": "Mail tracking for mass mailing",
"summary": "Improve mass mailing email tracking",
"version": "12.0.1.0.0",
"version": "13.0.1.0.0",
"category": "Social Network",
"website": "https://github.com/OCA/social",
"author": "Tecnativa, " "Odoo Community Association (OCA)",
@ -18,9 +18,9 @@
"depends": ["mass_mailing", "mail_tracking"],
"data": [
"views/mail_tracking_email_view.xml",
"views/mail_mail_statistics_view.xml",
"views/mail_trace_view.xml",
"views/mail_mass_mailing_view.xml",
"views/mail_mass_mailing_contact_view.xml",
"views/mailing_contact_view.xml",
],
"pre_init_hook": "pre_init_hook",
}

View File

@ -14,7 +14,7 @@ _logger = logging.getLogger(__name__)
def pre_init_hook(cr):
if column_add_with_value:
_logger.info("Creating mail.mass_mailing.contact.email_score column " "with value 50.0")
_logger.info("Creating mailing_contact.email_score column " "with value 50.0")
column_add_with_value(
cr, "mail_mass_mailing_contact", "email_score", "double precision", 50.0
cr, "mailing_contact", "email_score", "double precision", 50.0
)

View File

@ -5,5 +5,5 @@
from . import mail_mail
from . import mail_tracking_email
from . import mail_tracking_event
from . import mail_mail_statistics
from . import mail_mass_mailing_contact
from . import mailing_trace
from . import mailing_contact

View File

@ -14,7 +14,7 @@ class MailMail(models.Model):
res["mail_id_int"] = self.id
res["mass_mailing_id"] = self.mailing_id.id
res["mail_stats_id"] = (
self.statistics_ids[:1].id if self.statistics_ids else False
self.mailing_trace_ids[:1].id if self.mailing_trace_ids else False
)
return res

View File

@ -9,16 +9,16 @@ class MailTrackingEmail(models.Model):
_inherit = "mail.tracking.email"
mass_mailing_id = fields.Many2one(
string="Mass mailing", comodel_name="mail.mass_mailing", readonly=True
string="Mass mailing", comodel_name="mailing.mailing", readonly=True
)
mail_stats_id = fields.Many2one(
string="Mail statistics", comodel_name="mail.mail.statistics", readonly=True
string="Mail statistics", comodel_name="mailing.trace", readonly=True
)
mail_id_int = fields.Integer(string="Mail ID", readonly=True)
@api.model
def _statistics_link_prepare(self, tracking):
"""Inherit this method to link other object to mail.mail.statistics"""
"""Inherit this method to link other object to mailing.trace"""
return {"mail_tracking_id": tracking.id}
@api.model
@ -29,7 +29,6 @@ class MailTrackingEmail(models.Model):
tracking.mail_stats_id.write(self._statistics_link_prepare(tracking))
return tracking
@api.multi
def _contacts_email_bounced_set(self, reason, event=None):
recipients = []
if event and event.recipient_address:
@ -37,11 +36,10 @@ class MailTrackingEmail(models.Model):
else:
recipients = list(filter(None, self.mapped("recipient_address")))
for recipient in recipients:
self.env["mail.mass_mailing.contact"].search(
self.env["mailing.contact"].search(
[("email", "=ilike", recipient)]
).email_bounced_set(self, reason, event=event)
@api.multi
def smtp_error(self, mail_server, smtp_server, exception):
res = super(MailTrackingEmail, self).smtp_error(
mail_server, smtp_server, exception
@ -49,7 +47,6 @@ class MailTrackingEmail(models.Model):
self._contacts_email_bounced_set("error")
return res
@api.multi
def event_create(self, event_type, metadata):
res = super(MailTrackingEmail, self).event_create(event_type, metadata)
if event_type in {"hard_bounce", "spam", "reject"}:

View File

@ -10,7 +10,7 @@ class MailTrackingEvent(models.Model):
mass_mailing_id = fields.Many2one(
string="Mass mailing",
comodel_name="mail.mass_mailing",
comodel_name="mailing.mailing",
readonly=True,
related="tracking_email_id.mass_mailing_id",
store=True,
@ -19,12 +19,12 @@ class MailTrackingEvent(models.Model):
@api.model
def process_open(self, tracking_email, metadata):
res = super(MailTrackingEvent, self).process_open(tracking_email, metadata)
mail_mail_stats = self.sudo().env["mail.mail.statistics"]
mail_mail_stats = self.sudo().env["mailing.trace"]
mail_mail_stats.set_opened(mail_mail_ids=[tracking_email.mail_id_int])
return res
def _tracking_set_bounce(self, tracking_email, metadata):
mail_mail_stats = self.sudo().env["mail.mail.statistics"]
mail_mail_stats = self.sudo().env["mailing.trace"]
mail_mail_stats.set_bounced(mail_mail_ids=[tracking_email.mail_id_int])
@api.model

View File

@ -6,17 +6,19 @@ from odoo import api, fields, models
class MailMassMailingContact(models.Model):
_name = "mail.mass_mailing.contact"
_inherit = ["mail.mass_mailing.contact", "mail.bounced.mixin"]
_name = "mailing.contact"
_inherit = ["mailing.contact", "mail.bounced.mixin"]
email_score = fields.Float(
string="Email score", readonly=True, store=False, compute="_compute_email_score"
)
@api.multi
@api.depends("email")
def _compute_email_score(self):
for contact in self.filtered("email"):
with_email = self.filtered("email")
for contact in with_email:
contact.email_score = self.env[
"mail.tracking.email"
].email_score_from_email(contact.email)
remaining = self - with_email
remaining.email_score = 0.0

View File

@ -5,8 +5,8 @@
from odoo import fields, models
class MailMailStatistics(models.Model):
_inherit = "mail.mail.statistics"
class MailTrace(models.Model):
_inherit = "mailing.trace"
mail_tracking_id = fields.Many2one(
string="Mail tracking", comodel_name="mail.tracking.email", readonly=True

View File

@ -17,21 +17,21 @@ mock_send_email = "odoo.addons.base.models.ir_mail_server." "IrMailServer.send_e
class TestMassMailing(TransactionCase):
def setUp(self, *args, **kwargs):
super(TestMassMailing, self).setUp(*args, **kwargs)
self.list = self.env["mail.mass_mailing.list"].create({"name": "Test mail tracking"})
self.list = self.env["mailing.list"].create({"name": "Test mail tracking"})
self.list.name = "{} #{}".format(self.list.name, self.list.id)
self.contact_a = self.env["mail.mass_mailing.contact"].create(
self.contact_a = self.env["mailing.contact"].create(
{
"list_ids": [(6, 0, self.list.ids)],
"name": "Test contact A",
"email": "contact_a@example.com",
}
)
self.mailing = self.env["mail.mass_mailing"].create(
self.mailing = self.env["mailing.mailing"].create(
{
"name": "Test subject",
"subject": "Test subject",
"email_from": "from@example.com",
"mailing_model_id": self.env.ref(
"mass_mailing.model_mail_mass_mailing_contact"
"mass_mailing.model_mailing_contact"
).id,
"mailing_domain": "[('list_ids', 'in', %d)]" % self.list.id,
"contact_list_ids": [(6, False, [self.list.id])],
@ -44,8 +44,8 @@ class TestMassMailing(TransactionCase):
def test_smtp_error(self):
with mock.patch(mock_send_email) as mock_func:
mock_func.side_effect = Warning("Mock test error")
self.mailing.send_mail()
for stat in self.mailing.statistics_ids:
self.mailing.action_send_mail()
for stat in self.mailing.mailing_trace_ids:
if stat.mail_mail_id:
stat.mail_mail_id.send()
tracking = self.env["mail.tracking.email"].search(
@ -58,8 +58,8 @@ class TestMassMailing(TransactionCase):
self.assertTrue(self.contact_a.email_bounced)
def test_tracking_email_link(self):
self.mailing.send_mail()
for stat in self.mailing.statistics_ids:
self.mailing.action_send_mail()
for stat in self.mailing.mailing_trace_ids:
if stat.mail_mail_id:
stat.mail_mail_id.send()
tracking_email = self.env["mail.tracking.email"].search(
@ -80,8 +80,8 @@ class TestMassMailing(TransactionCase):
self.assertTrue(stat.opened)
def _tracking_email_bounce(self, event_type, state):
self.mailing.send_mail()
for stat in self.mailing.statistics_ids:
self.mailing.action_send_mail()
for stat in self.mailing.mailing_trace_ids:
if stat.mail_mail_id:
stat.mail_mail_id.send()
tracking_email = self.env["mail.tracking.email"].search(

View File

@ -8,7 +8,6 @@
<record model="ir.actions.act_window" id="action_view_mail_tracking_email">
<field name="name">Mail tracking emails</field>
<field name="res_model">mail.tracking.email</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('mass_mailing_id', '!=', False)]</field>
</record>
@ -16,7 +15,6 @@
<record model="ir.actions.act_window" id="action_view_mail_tracking_event">
<field name="name">Mail tracking events</field>
<field name="res_model">mail.tracking.event</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('mass_mailing_id', '!=', False)]</field>
</record>

View File

@ -4,10 +4,10 @@
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -->
<odoo>
<record model="ir.ui.view" id="view_mail_mail_statistics_form">
<record model="ir.ui.view" id="mailing_trace_view_form">
<field name="name">Add tracking email info</field>
<field name="model">mail.mail.statistics</field>
<field name="inherit_id" ref="mass_mailing.view_mail_mail_statistics_form"/>
<field name="model">mailing.trace</field>
<field name="inherit_id" ref="mass_mailing.mailing_trace_view_form"/>
<field name="arch" type="xml">
<xpath expr="//form/sheet" position="inside">
<group>

View File

@ -6,7 +6,7 @@
<record model="ir.ui.view" id="view_mail_mass_mailing_contact_tree">
<field name="name">Add email score and stars</field>
<field name="model">mail.mass_mailing.contact</field>
<field name="model">mailing.contact</field>
<field name="inherit_id" ref="mass_mailing.view_mail_mass_mailing_contact_tree"/>
<field name="arch" type="xml">
<field name="is_blacklisted" position="after">
@ -18,10 +18,10 @@
<record model="ir.ui.view" id="view_mail_mass_mailing_contact_search">
<field name="name">Filter bounced contacts</field>
<field name="model">mail.mass_mailing.contact</field>
<field name="model">mailing.contact</field>
<field name="inherit_id" ref="mass_mailing.view_mail_mass_mailing_contact_search"/>
<field name="arch" type="xml">
<filter name="not_blacklisted" position="after">
<filter name="filter_not_email_bl" position="after">
<filter string="Email bounced" name="email_bounced"
domain="[('email_bounced', '=', True)]"/>
</filter>