summaryrefslogtreecommitdiff
path: root/addons/mail
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2017-01-17 14:17:56 +0100
committerChristophe Simonis <chs@odoo.com>2017-01-17 14:17:56 +0100
commitecd03bec8aa8a84541e048667b92eb48786ed1f4 (patch)
tree00bd4168cf30ad63ce8c6c32b8c0d270438bf278 /addons/mail
parent4d619c221f4b2c7e5b8f22b65d2025b70bff6046 (diff)
parent8f1c2bfc9183d73549d3cf3a771edf2232eeeb12 (diff)
[MERGE] forward port branch 8.0 up to 8f1c2bfc918
Diffstat (limited to 'addons/mail')
-rw-r--r--addons/mail/mail_message.py17
-rw-r--r--addons/mail/tests/test_mail_message.py5
2 files changed, 22 insertions, 0 deletions
diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py
index ac552d1d004..01a50579dd3 100644
--- a/addons/mail/mail_message.py
+++ b/addons/mail/mail_message.py
@@ -802,6 +802,13 @@ class mail_message(osv.Model):
message_id = tools.generate_tracking_message_id('private')
return message_id
+ @api.multi
+ def _invalidate_documents(self):
+ """ Invalidate the cache of the documents followed by ``self``. """
+ for record in self:
+ if record.res_id:
+ self.env[record.model].invalidate_cache(ids=[record.res_id])
+
def create(self, cr, uid, values, context=None):
context = dict(context or {})
default_starred = context.pop('default_starred', False)
@@ -816,6 +823,7 @@ class mail_message(osv.Model):
values['record_name'] = self._get_record_name(cr, uid, values, context=context)
newid = super(mail_message, self).create(cr, uid, values, context)
+ self.browse(cr, uid, newid, context)._invalidate_documents()
self._notify(cr, uid, newid, context=context,
force_send=context.get('mail_notify_force_send', True),
@@ -837,6 +845,14 @@ class mail_message(osv.Model):
res = super(mail_message, self).read(cr, uid, ids, fields=fields, context=context, load=load)
return res
+ @api.multi
+ def write(self, vals):
+ if 'model' in vals or 'res_id' in vals:
+ self._invalidate_documents()
+ res = super(mail_message, self).write(vals)
+ self._invalidate_documents()
+ return res
+
def unlink(self, cr, uid, ids, context=None):
# cascade-delete attachments that are directly attached to the message (should only happen
# for mail.messages that act as parent for a standalone mail.mail record).
@@ -848,6 +864,7 @@ class mail_message(osv.Model):
attachments_to_delete.append(attach.id)
if attachments_to_delete:
self.pool.get('ir.attachment').unlink(cr, uid, attachments_to_delete, context=context)
+ self.browse(cr, uid, ids, context)._invalidate_documents()
return super(mail_message, self).unlink(cr, uid, ids, context=context)
#------------------------------------------------------
diff --git a/addons/mail/tests/test_mail_message.py b/addons/mail/tests/test_mail_message.py
index aceb90efa8b..5147d1e102c 100644
--- a/addons/mail/tests/test_mail_message.py
+++ b/addons/mail/tests/test_mail_message.py
@@ -444,3 +444,8 @@ class TestMailMessage(TestMail):
{'subject': 'Subject', 'body': 'Body text'},
{'default_composition_mode': 'comment', 'default_parent_id': pigs_msg_id})
mail_compose.send_mail(cr, user_raoul_id, [compose_id])
+
+ def test_60_cache_invalidation(self):
+ msg_cnt = len(self.group_pigs.message_ids)
+ self.group_pigs.message_post(body='Hi!', subject='test')
+ self.assertEqual(len(self.group_pigs.message_ids), msg_cnt + 1)