From 225b487a3c8689a62b35d3b23783aaf01c2222f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 9 Jun 2022 08:40:59 +0000 Subject: [PATCH] [IMP] mass_mailing: add helper field when targeting mailing lists Currently there are several checks on mailed model directly in code due to mailing list specific behavior. In order to be easier to manipulate and a bit less low leve, a computed field is introduced for that purpose. Indeed there are some behavior changes when the mailing runs on mailing lists instead of directly on records. There are notably some changes in display (choose mailing lists but mail contact is the real contact model), and in subscription page (directly unsubscribe from mailing lists). Task-2710804 (Mail: Clean MailThread API) Prepares Task-2150462 (Mass Mailing: Unsubscribe flow refactoring) Part-of: odoo/odoo#106568 --- addons/mass_mailing/__manifest__.py | 2 +- addons/mass_mailing/models/mailing.py | 11 ++++++++++- .../views/mailing_mailing_views.xml | 19 ++++++++++--------- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/addons/mass_mailing/__manifest__.py b/addons/mass_mailing/__manifest__.py index 5dd136c88a4..36abfb83f75 100644 --- a/addons/mass_mailing/__manifest__.py +++ b/addons/mass_mailing/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Email Marketing', 'summary': 'Design, send and track emails', - 'version': '2.5', + 'version': '2.6', 'sequence': 60, 'website': 'https://www.odoo.com/app/email-marketing', 'category': 'Marketing/Email Marketing', diff --git a/addons/mass_mailing/models/mailing.py b/addons/mass_mailing/models/mailing.py index d95f295c1b3..00ccf892457 100644 --- a/addons/mass_mailing/models/mailing.py +++ b/addons/mass_mailing/models/mailing.py @@ -53,7 +53,7 @@ class MassMailing(models.Model): }) if 'contact_list_ids' in fields_list and not vals.get('contact_list_ids') and vals.get('mailing_model_id'): - if vals.get('mailing_model_id') == self.env['ir.model']._get('mailing.list').id: + if vals.get('mailing_model_id') == self.env['ir.model']._get_id('mailing.list'): mailing_list = self.env['mailing.list'].search([], limit=2) if len(mailing_list) == 1: vals['contact_list_ids'] = [(6, 0, [mailing_list.id])] @@ -154,6 +154,9 @@ class MassMailing(models.Model): mailing_model_name = fields.Char( string='Recipients Model Name', related='mailing_model_id.model', readonly=True, related_sudo=True) + mailing_on_mailing_list = fields.Boolean( + string='Based on Mailing Lists', + compute='_compute_mailing_on_mailing_list') mailing_domain = fields.Char( string='Domain', compute='_compute_mailing_domain', readonly=False, store=True) @@ -383,6 +386,12 @@ class MassMailing(models.Model): for mailing in self: mailing.mailing_model_real = 'mailing.contact' if mailing.mailing_model_id.model == 'mailing.list' else mailing.mailing_model_id.model + @api.depends('mailing_model_id') + def _compute_mailing_on_mailing_list(self): + mailing_list_model_id = self.env['ir.model']._get('mailing.list') + self.mailing_on_mailing_list = False + self.filtered(lambda m: m.mailing_model_id == mailing_list_model_id).mailing_on_mailing_list = True + @api.depends('mailing_model_id', 'contact_list_ids', 'mailing_type', 'mailing_filter_id') def _compute_mailing_domain(self): for mailing in self: diff --git a/addons/mass_mailing/views/mailing_mailing_views.xml b/addons/mass_mailing/views/mailing_mailing_views.xml index a1af5512eee..1a43b40e0a7 100644 --- a/addons/mass_mailing/views/mailing_mailing_views.xml +++ b/addons/mass_mailing/views/mailing_mailing_views.xml @@ -194,14 +194,14 @@ -
+
-
+
+ -
+
@@ -483,7 +484,7 @@ - + @@ -536,8 +537,8 @@
/ Delivered to - - Mailing Contact + + Mailing Contact
@@ -567,8 +568,8 @@ - - Mailing Contact + + Mailing Contact