From 305af13279f002185c39a216d51d4e5aeaa449ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 4 Dec 2020 08:12:17 +0000 Subject: [PATCH] [REF] mail, note, test_mail: remove now unused message_channel_ids field on MailThread RATIONALE Channel model is a mail.thread enabled model behaving strangely with followers, notifications and discuss. Its code should however be simplified to be more self contained and avoid unwanted side effects on other models. SPECIFICATIONS Remove ``message_channel_ids`` field from ``mail.thread``. As we removed support of (un)subscribing channel-based followers there is no need anymore to have a field to access them. We can now safely remove this field as it has no use anymore. LINKS Task ID-2070632 (main task) Task ID-2419762 (followup task) COM PR odoo/odoo#62859 ENT PR odoo/enterprise#15172 UPG PR odoo/upgrade#2005 --- addons/mail/models/mail_thread.py | 19 ------------------- addons/mail/models/models.py | 5 ++--- addons/mail/tests/test_mail_channel.py | 4 ---- addons/mail/wizard/invite.py | 1 - addons/note/models/note.py | 4 ---- addons/test_mail/tests/test_ir_actions.py | 1 - addons/test_mail/tests/test_mail_followers.py | 4 ---- 7 files changed, 2 insertions(+), 36 deletions(-) diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index 0acfe152f3c..4a24ed6ed69 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -85,10 +85,6 @@ class MailThread(models.AbstractModel): comodel_name='res.partner', string='Followers (Partners)', compute='_get_followers', search='_search_follower_partners', groups='base.group_user') - message_channel_ids = fields.Many2many( - comodel_name='mail.channel', string='Followers (Channels)', - compute='_get_followers', search='_search_follower_channels', - groups='base.group_user') message_ids = fields.One2many( 'mail.message', 'res_id', string='Messages', domain=lambda self: [('message_type', '!=', 'user_notification')], auto_join=True) @@ -117,7 +113,6 @@ class MailThread(models.AbstractModel): def _get_followers(self): for thread in self: thread.message_partner_ids = thread.message_follower_ids.mapped('partner_id') - thread.message_channel_ids = thread.message_follower_ids.mapped('channel_id') @api.model def _search_follower_partners(self, operator, operand): @@ -133,20 +128,6 @@ class MailThread(models.AbstractModel): # using read() below is much faster than followers.mapped('res_id') return [('id', 'in', [res['res_id'] for res in followers.read(['res_id'])])] - @api.model - def _search_follower_channels(self, operator, operand): - """Search function for message_follower_ids - - Do not use with operator 'not in'. Use instead message_is_followers - """ - # TOFIX make it work with not in - assert operator != "not in", "Do not search message_follower_ids with 'not in'" - followers = self.env['mail.followers'].sudo().search([ - ('res_model', '=', self._name), - ('channel_id', operator, operand)]) - # using read() below is much faster than followers.mapped('res_id') - return [('id', 'in', [res['res_id'] for res in followers.read(['res_id'])])] - @api.depends('message_follower_ids') def _compute_is_follower(self): followers = self.env['mail.followers'].sudo().search([ diff --git a/addons/mail/models/models.py b/addons/mail/models/models.py index 947100de01a..2c9aea4f144 100644 --- a/addons/mail/models/models.py +++ b/addons/mail/models/models.py @@ -163,10 +163,9 @@ class BaseModel(models.AbstractModel): if alias.alias_contact == 'followers': if not self.ids: return _('incorrectly configured alias (unknown reference record)') - if not hasattr(self, "message_partner_ids") or not hasattr(self, "message_channel_ids"): + if not hasattr(self, "message_partner_ids"): return _('incorrectly configured alias') - accepted_partner_ids = self.message_partner_ids | self.message_channel_ids.mapped('channel_partner_ids') - if not author or author not in accepted_partner_ids: + if not author or author not in self.message_partner_ids: return _('restricted to followers') elif alias.alias_contact == 'partners' and not author: return _('restricted to known authors') diff --git a/addons/mail/tests/test_mail_channel.py b/addons/mail/tests/test_mail_channel.py index aa68635a6e0..e36272c1a50 100644 --- a/addons/mail/tests/test_mail_channel.py +++ b/addons/mail/tests/test_mail_channel.py @@ -182,22 +182,18 @@ class TestChannelInternals(MailCommon): @users('employee') def test_channel_members(self): channel = self.env['mail.channel'].browse(self.test_channel.ids) - self.assertEqual(channel.message_channel_ids, self.env['mail.channel']) self.assertEqual(channel.message_partner_ids, self.env['res.partner']) self.assertEqual(channel.channel_partner_ids, self.env['res.partner']) channel._action_add_members(self.test_partner) - self.assertEqual(channel.message_channel_ids, self.env['mail.channel']) self.assertEqual(channel.message_partner_ids, self.env['res.partner']) self.assertEqual(channel.channel_partner_ids, self.test_partner) channel._action_remove_members(self.test_partner) - self.assertEqual(channel.message_channel_ids, self.env['mail.channel']) self.assertEqual(channel.message_partner_ids, self.env['res.partner']) self.assertEqual(channel.channel_partner_ids, self.env['res.partner']) channel.message_post(body='Test', message_type='comment', subtype_xmlid='mail.mt_comment') - self.assertEqual(channel.message_channel_ids, self.env['mail.channel']) self.assertEqual(channel.message_partner_ids, self.env['res.partner']) self.assertEqual(channel.channel_partner_ids, self.env['res.partner']) diff --git a/addons/mail/wizard/invite.py b/addons/mail/wizard/invite.py index 0f50030d76b..28741997df6 100644 --- a/addons/mail/wizard/invite.py +++ b/addons/mail/wizard/invite.py @@ -57,7 +57,6 @@ class Invite(models.TransientModel): # filter partner_ids to get the new followers, to avoid sending email to already following partners new_partners = wizard.partner_ids - document.sudo().message_partner_ids - new_channels = wizard.channel_ids - document.message_channel_ids document.message_subscribe(partner_ids=new_partners.ids) model_name = self.env['ir.model']._get(wizard.res_model).display_name diff --git a/addons/note/models/note.py b/addons/note/models/note.py index 5578104c468..c88b01a0ff1 100644 --- a/addons/note/models/note.py +++ b/addons/note/models/note.py @@ -56,10 +56,6 @@ class Note(models.Model): comodel_name='res.partner', string='Followers (Partners)', compute='_get_followers', search='_search_follower_partners', compute_sudo=True) - message_channel_ids = fields.Many2many( - comodel_name='mail.channel', string='Followers (Channels)', - compute='_get_followers', search='_search_follower_channels', - compute_sudo=True) @api.depends('memo') def _compute_name(self): diff --git a/addons/test_mail/tests/test_ir_actions.py b/addons/test_mail/tests/test_ir_actions.py index f36867c224a..5330b736150 100644 --- a/addons/test_mail/tests/test_ir_actions.py +++ b/addons/test_mail/tests/test_ir_actions.py @@ -23,7 +23,6 @@ class TestServerActionsEmail(TestMailCommon, TestServerActionsBase): self.action.write({ 'state': 'followers', 'partner_ids': [(4, self.env.ref('base.partner_admin').id), (4, random_partner.id)], - 'channel_ids': [(4, self.env.ref('mail.channel_all_employees').id)] }) self.action.with_context(self.context).run() self.assertEqual(self.test_partner.message_partner_ids, self.env.ref('base.partner_admin') | random_partner) diff --git a/addons/test_mail/tests/test_mail_followers.py b/addons/test_mail/tests/test_mail_followers.py index b072a0b0350..b2b8f152299 100644 --- a/addons/test_mail/tests/test_mail_followers.py +++ b/addons/test_mail/tests/test_mail_followers.py @@ -91,12 +91,10 @@ class BaseFollowersTest(TestMailCommon): test_record.message_subscribe(partner_ids=[self.user_admin.partner_id.id], subtype_ids=[self.mt_mg_nodef.id]) self.assertEqual(test_record.message_partner_ids, self.user_admin.partner_id) - self.assertEqual(test_record.message_channel_ids, self.env['mail.channel']) self.assertEqual(test_record.message_follower_ids.subtype_ids, self.mt_mg_nodef) test_record.message_subscribe(partner_ids=[self.user_admin.partner_id.id], subtype_ids=[self.mt_mg_nodef.id, self.mt_al_nodef.id]) self.assertEqual(test_record.message_partner_ids, self.user_admin.partner_id) - self.assertEqual(test_record.message_channel_ids, self.env['mail.channel']) self.assertEqual(test_record.message_follower_ids.subtype_ids, self.mt_mg_nodef | self.mt_al_nodef) def test_followers_multiple_subscription_noforce(self): @@ -105,13 +103,11 @@ class BaseFollowersTest(TestMailCommon): test_record.message_subscribe(partner_ids=[self.user_admin.partner_id.id], subtype_ids=[self.mt_mg_nodef.id, self.mt_al_nodef.id]) self.assertEqual(test_record.message_partner_ids, self.user_admin.partner_id) - self.assertEqual(test_record.message_channel_ids, self.env['mail.channel']) self.assertEqual(test_record.message_follower_ids.subtype_ids, self.mt_mg_nodef | self.mt_al_nodef) # set new subtypes with force=False, meaning no rewriting of the subscription is done -> result should not change test_record.message_subscribe(partner_ids=[self.user_admin.partner_id.id]) self.assertEqual(test_record.message_partner_ids, self.user_admin.partner_id) - self.assertEqual(test_record.message_channel_ids, self.env['mail.channel']) self.assertEqual(test_record.message_follower_ids.subtype_ids, self.mt_mg_nodef | self.mt_al_nodef) def test_followers_multiple_subscription_update(self):