mirror of https://github.com/OCA/social.git
[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 recordspull/550/head
parent
d3426a13d5
commit
2c2ead4486
|
@ -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",
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"}:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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(
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
Loading…
Reference in New Issue