[IMP] mass mailing: update reply_to_mode keys

Propagate reply_to radio keys (update and new) to mass mailing in order to have
a coherent naming (was thread and email). This naming is also coherent with
gateway naming (message_update and message_new).

LINKS

Task ID-2117639
COM PR odoo/odoo#40931
ENT PR odoo/enterprise#17941
UPG PR odoo/upgrade#2419
This commit is contained in:
Thibault Delavallée
2021-04-26 14:18:33 +00:00
parent e4cace7115
commit c8aabac87d
11 changed files with 31 additions and 31 deletions
+1 -1
View File
@@ -5,7 +5,7 @@
'name': 'Email Marketing',
'summary': 'Design, send and track emails',
'description': "",
'version': '2.3',
'version': '2.4',
'sequence': 60,
'website': 'https://www.odoo.com/page/mailing',
'category': 'Marketing/Email Marketing',
@@ -83,7 +83,7 @@
<field name="source_id" ref="mass_mailing.utm_source_0"/>
<field name="mailing_model_id" ref="base.model_res_partner"/>
<field name="mailing_domain" eval="[('parent_id', '=', ref('base.res_partner_4'))]"/>
<field name="reply_to_mode">email</field>
<field name="reply_to_mode">new</field>
<field name="reply_to">Info &lt;info@yourcompany.example.com&gt;</field>
<field name="body_html" type="html">
<div class="o_layout o_default_theme">
+7 -7
View File
@@ -113,7 +113,7 @@ class MassMailing(models.Model):
# mailing options
mailing_type = fields.Selection([('mail', 'Email')], string="Mailing Type", default="mail", required=True)
reply_to_mode = fields.Selection([
('thread', 'Recipient Followers'), ('email', 'Specified Email Address')],
('update', 'Recipient Followers'), ('new', 'Specified Email Address')],
string='Reply-To Mode', compute='_compute_reply_to_mode',
readonly=False, store=True,
help='Thread: replies go to target document. Email: replies are routed to a given email.')
@@ -252,16 +252,16 @@ class MassMailing(models.Model):
def _compute_reply_to_mode(self):
for mailing in self:
if mailing.mailing_model_real in ['res.partner', 'mailing.contact']:
mailing.reply_to_mode = 'email'
mailing.reply_to_mode = 'new'
else:
mailing.reply_to_mode = 'thread'
mailing.reply_to_mode = 'update'
@api.depends('reply_to_mode')
def _compute_reply_to(self):
for mailing in self:
if mailing.reply_to_mode == 'email' and not mailing.reply_to:
if mailing.reply_to_mode == 'new' and not mailing.reply_to:
mailing.reply_to = self.env.user.email_formatted
elif mailing.reply_to_mode == 'thread':
elif mailing.reply_to_mode == 'update':
mailing.reply_to = False
@api.depends('mailing_model_name', 'contact_list_ids')
@@ -631,11 +631,11 @@ class MassMailing(models.Model):
'composition_mode': 'mass_mail',
'mass_mailing_id': mailing.id,
'mailing_list_ids': [(4, l.id) for l in mailing.contact_list_ids],
'reply_to_force_new': mailing.reply_to_mode != 'thread',
'reply_to_force_new': mailing.reply_to_mode == 'new',
'template_id': None,
'mail_server_id': mailing.mail_server_id.id,
}
if mailing.reply_to_mode == 'email':
if mailing.reply_to_mode == 'new':
composer_values['reply_to'] = mailing.reply_to
composer = self.env['mail.compose.message'].with_context(active_ids=res_ids).create(composer_values)
@@ -72,7 +72,7 @@ class TestMassMailValues(MassMailCommon):
self.assertEqual(mailing.medium_id, self.env.ref('utm.utm_medium_email'))
self.assertEqual(mailing.mailing_model_name, 'res.partner')
self.assertEqual(mailing.mailing_model_real, 'res.partner')
self.assertEqual(mailing.reply_to_mode, 'email')
self.assertEqual(mailing.reply_to_mode, 'new')
self.assertEqual(mailing.reply_to, self.user_marketing.email_formatted)
# default for partner: remove blacklisted
self.assertEqual(literal_eval(mailing.mailing_domain), [('is_blacklisted', '=', False)])
@@ -89,7 +89,7 @@ class TestMassMailValues(MassMailCommon):
})
self.assertEqual(mailing.mailing_model_name, 'mailing.list')
self.assertEqual(mailing.mailing_model_real, 'mailing.contact')
self.assertEqual(mailing.reply_to_mode, 'email')
self.assertEqual(mailing.reply_to_mode, 'new')
self.assertEqual(mailing.reply_to, self.email_reply_to)
# default for mailing list: depends upon contact_list_ids
self.assertEqual(literal_eval(mailing.mailing_domain), [])
@@ -104,7 +104,7 @@ class TestMassMailValues(MassMailCommon):
})
self.assertEqual(mailing.mailing_model_name, 'mail.channel')
self.assertEqual(mailing.mailing_model_real, 'mail.channel')
self.assertEqual(mailing.reply_to_mode, 'thread')
self.assertEqual(mailing.reply_to_mode, 'update')
self.assertFalse(mailing.reply_to)
@users('user_marketing')
@@ -225,7 +225,7 @@ class TestMassMailFeatures(MassMailCommon, CronMixinCase):
'mailing_model_id': self.env['ir.model']._get('mailing.list').id,
'contact_list_ids': [(6, 0, self.mailing_list_1.ids)],
'keep_archives': True,
'reply_to_mode': 'email',
'reply_to_mode': 'new',
'reply_to': self.email_reply_to,
})
self.assertEqual(self.mailing_list_1.contact_ids.message_ids, self.env['mail.message'])
@@ -241,7 +241,7 @@ class TestMassMailFeatures(MassMailCommon, CronMixinCase):
self.mailing_list_1.contact_ids.message_ids.unlink()
mailing = mailing.copy()
mailing.write({
'reply_to_mode': 'thread',
'reply_to_mode': 'update',
})
self.assertEqual(self.mailing_list_1.contact_ids.message_ids, self.env['mail.message'])
@@ -257,7 +257,7 @@ class TestMassMailFeatures(MassMailCommon, CronMixinCase):
mailing = mailing.copy()
mailing.write({
'keep_archives': False,
'reply_to_mode': 'email',
'reply_to_mode': 'new',
'reply_to': self.email_reply_to,
})
self.assertEqual(self.mailing_list_1.contact_ids.message_ids, self.env['mail.message'])
@@ -275,7 +275,7 @@ class TestMassMailFeatures(MassMailCommon, CronMixinCase):
mailing = mailing.copy()
mailing.write({
'keep_archives': False,
'reply_to_mode': 'thread',
'reply_to_mode': 'update',
})
self.assertEqual(self.mailing_list_1.contact_ids.message_ids, self.env['mail.message'])
@@ -335,7 +335,7 @@ Website3: <a id="url3" href="${httpurl}">${httpurl}</a>
External1: <a id="url4" href="https://www.example.com/foo/bar?baz=qux">Youpie</a>
Email: <a id="url5" href="mailto:test@odoo.com">test@odoo.com</a></div>""",
'mailing_model_id': self.env['ir.model']._get('mailing.list').id,
'reply_to_mode': 'email',
'reply_to_mode': 'new',
'reply_to': self.email_reply_to,
'contact_list_ids': [(6, 0, self.mailing_list_1.ids)],
'keep_archives': True,
@@ -241,14 +241,14 @@
}"/>
<field name="reply_to"
attrs="{
'required': [('reply_to_mode', '=', 'email')],
'invisible': [('reply_to_mode', '=', 'thread')],
'required': [('reply_to_mode', '=', 'new')],
'invisible': [('reply_to_mode', '=', 'update')],
'readonly': [('state', 'in', ('sending', 'done'))]
}"/>
<div style="margin-top:-5px">
<small class="oe_edit_only text-muted mb-2"
style="font-size:74%"
attrs="{'invisible': ['|', ('reply_to_mode', '=', 'thread'), ('mailing_model_name', 'in', ['mailing.contact', 'res.partner', 'mailing.list'])],}">
attrs="{'invisible': ['|', ('reply_to_mode', '=', 'update'), ('mailing_model_name', 'in', ['mailing.contact', 'res.partner', 'mailing.list'])],}">
To track replies, this address must belong to this database.
</small>
</div>
@@ -31,7 +31,7 @@ class MailComposeMessage(models.TransientModel):
'subject': self.subject,
'state': 'done',
'reply_to_mode': self.reply_to_mode,
'reply_to': self.reply_to if self.reply_to_mode == 'email' else False,
'reply_to': self.reply_to if self.reply_to_mode == 'new' else False,
'sent_date': fields.Datetime.now(),
'body_html': self.body,
'mailing_model_id': self.env['ir.model']._get(self.model).id,
@@ -85,7 +85,7 @@ class MailComposeMessage(models.TransientModel):
'mailing_id': mass_mailing.id,
'mailing_trace_ids': [(0, 0, trace_vals)],
# email-mode: keep original message for routing
'notification': mass_mailing.reply_to_mode == 'thread',
'notification': mass_mailing.reply_to_mode == 'update',
'auto_delete': not mass_mailing.keep_archives,
})
return res
@@ -11,7 +11,7 @@
<field name="source_id" ref="utm.utm_source_mailing"/>
<field name="mailing_model_id" ref="crm.model_crm_lead"/>
<field name="mailing_domain">[]</field>
<field name="reply_to_mode">email</field>
<field name="reply_to_mode">new</field>
<field name="reply_to">${object.company_id.email}</field>
<field name="body_html" type="html">
<table border="0" cellpadding="0" cellspacing="0" style="padding-top: 16px; background-color: #F1F1F1; font-family:Verdana, Arial,sans-serif; color: #454748; width: 100%; border-collapse:separate;"><tr><td align="center">
@@ -11,7 +11,7 @@
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
<field name="mailing_model_id" ref="sale.model_sale_order"/>
<field name="mailing_domain">[]</field>
<field name="reply_to_mode">email</field>
<field name="reply_to_mode">new</field>
<field name="reply_to">${object.company_id.email}</field>
<field name="body_html" type="html">
<table border="0" cellpadding="0" cellspacing="0" style="padding-top: 16px; background-color: #F1F1F1; font-family:Verdana, Arial,sans-serif; color: #454748; width: 100%; border-collapse:separate;"><tr><td align="center">
+1 -1
View File
@@ -39,7 +39,7 @@ class TestMassMailCommon(MassMailCommon, TestMailCommon):
</div>""",
'mailing_type': 'mail',
'mailing_model_id': cls.env['ir.model']._get('mailing.test.blacklist').id,
'reply_to_mode': 'thread',
'reply_to_mode': 'update',
})
@classmethod
@@ -29,7 +29,7 @@ class TestMassMailing(TestMassMailCommon):
'name': 'TestName',
'subject': 'TestSubject',
'body_html': 'Hello ${object.name}',
'reply_to_mode': 'email',
'reply_to_mode': 'new',
'reply_to': '%s@%s' % (self.test_alias.alias_name, self.test_alias.alias_domain),
'keep_archives': True,
'mailing_model_id': self.env['ir.model']._get('res.partner').id,
@@ -129,7 +129,7 @@ class TestMassMailing(TestMassMailCommon):
mailing.write({
'mailing_domain': [('id', 'in', recipients.ids)],
'keep_archives': False,
'reply_to_mode': 'email',
'reply_to_mode': 'new',
'reply_to': self.test_alias.display_name,
})
@@ -155,7 +155,7 @@ class TestMassMailing(TestMassMailCommon):
mailing.write({
'mailing_domain': [('id', 'in', recipients.ids)],
'keep_archives': False,
'reply_to_mode': 'thread',
'reply_to_mode': 'update',
'reply_to': self.test_alias.display_name,
})
@@ -191,7 +191,7 @@ class TestMassMailing(TestMassMailCommon):
'name': 'UTMTest',
'subject': subject,
'body_html': '<p>Hello ${object.name}</p>',
'reply_to_mode': 'email',
'reply_to_mode': 'new',
'reply_to': '%s@%s' % (self.test_alias.alias_name, self.test_alias.alias_domain),
'keep_archives': True,
'mailing_model_id': self.env['ir.model']._get('mailing.list').id,
@@ -45,7 +45,7 @@ class TestMassMailPerformance(TestMassMailPerformanceBase):
'name': 'Test',
'subject': 'Test',
'body_html': '<p>Hello <a role="button" href="https://www.example.com/foo/bar?baz=qux">quux</a><a role="button" href="/unsubscribe_from_list">Unsubscribe</a></p>',
'reply_to_mode': 'email',
'reply_to_mode': 'new',
'mailing_model_id': self.ref('test_mass_mailing.model_mailing_performance'),
'mailing_domain': [('id', 'in', self.mm_recs.ids)],
})
@@ -85,7 +85,7 @@ class TestMassMailBlPerformance(TestMassMailPerformanceBase):
'name': 'Test',
'subject': 'Test',
'body_html': '<p>Hello <a role="button" href="https://www.example.com/foo/bar?baz=qux">quux</a><a role="button" href="/unsubscribe_from_list">Unsubscribe</a></p>',
'reply_to_mode': 'email',
'reply_to_mode': 'new',
'mailing_model_id': self.ref('test_mass_mailing.model_mailing_performance_blacklist'),
'mailing_domain': [('id', 'in', self.mm_recs.ids)],
})