diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py
index ba652d9ce48..8b7522afa61 100644
--- a/addons/mail/models/mail_thread.py
+++ b/addons/mail/models/mail_thread.py
@@ -63,7 +63,8 @@ class MailThread(models.AbstractModel):
_mail_post_access = 'write' # access required on the document to post on it
_mail_mass_mailing = False # enable mass mailing on this model
- message_is_follower = fields.Boolean('Is Follower', compute='_compute_is_follower')
+ message_is_follower = fields.Boolean(
+ 'Is Follower', compute='_compute_is_follower', search='_search_is_follower')
message_follower_ids = fields.One2many(
'mail.followers', 'res_id', string='Followers',
domain=lambda self: [('res_model', '=', self._name)])
@@ -135,6 +136,18 @@ class MailThread(models.AbstractModel):
for record in self:
record.message_is_follower = record.id in following_ids
+ @api.model
+ def _search_is_follower(self, operator, operand):
+ followers = self.env['mail.followers'].sudo().search([
+ ('res_model', '=', self._name),
+ ('partner_id', '=', self.env.user.partner_id.id),
+ ])
+ # Cases ('message_is_follower', '=', True) or ('message_is_follower', '!=', False)
+ if (operator == '=' and operand) or (operator == '!=' and not operand):
+ return [('id', 'in', followers.mapped('res_id'))]
+ else:
+ return [('id', 'not in', followers.mapped('res_id'))]
+
@api.multi
def _get_message_unread(self):
res = dict((res_id, 0) for res_id in self.ids)
diff --git a/addons/mail/tests/test_mail_followers.py b/addons/mail/tests/test_mail_followers.py
index 3342dcced8b..d987feb59e7 100644
--- a/addons/mail/tests/test_mail_followers.py
+++ b/addons/mail/tests/test_mail_followers.py
@@ -57,9 +57,12 @@ class TestMailFollowers(TestMail):
self.assertEqual(set(specific[self.group_public.id][0][2]['subtype_ids'][0][2]), set([self.mt_mg_nodef.id]))
def test_message_is_follower(self):
+ qty_followed_before = len(self.group_pigs.sudo(self.user_employee).search([('message_is_follower', '=', True)]))
self.assertFalse(self.group_pigs.sudo(self.user_employee).message_is_follower)
self.group_pigs.message_subscribe_users(user_ids=[self.user_employee.id])
+ qty_followed_after = len(self.group_pigs.sudo(self.user_employee).search([('message_is_follower', '=', True)]))
self.assertTrue(self.group_pigs.sudo(self.user_employee).message_is_follower)
+ self.assertEqual(qty_followed_before + 1, qty_followed_after)
def test_followers_subtypes_default(self):
self.group_pigs.message_subscribe_users(user_ids=[self.user_employee.id])
diff --git a/addons/project/project.py b/addons/project/project.py
index 5df4a247037..bfd4d1d679a 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -326,13 +326,6 @@ class project(osv.osv):
tasks.write({'active': vals['active']})
return res
- def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False):
- context = dict(context or {})
- if context.get('message_is_follower', False):
- res = super(project, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count)
- return [proj.id for proj in self.browse(cr, uid, res, context=context) if proj.message_is_follower]
- return super(project, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count)
-
class task(osv.osv):
_name = "project.task"
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index a0d7ffb96fb..fb1f242e853 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -162,7 +162,7 @@
-
+