[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
This commit is contained in:
@@ -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([
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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'])
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user