summaryrefslogtreecommitdiff
path: root/addons/mail/models/mail_message.py
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2017-11-09 16:49:41 +0100
committerChristophe Simonis <chs@odoo.com>2017-11-09 16:49:41 +0100
commit90ca8720717bdfd670a887bb01efbbb4be7afa2f (patch)
treed21b7bccaa7528ca1f780e2ff70e6c3617a75ead /addons/mail/models/mail_message.py
parentdb4886d511417dd2d74bd679792c6eba337917fc (diff)
parentd171f282c37e7313e9714cd58a811bd8c5d9ec0d (diff)
[MERGE] forward port branch saas-14 up to d171f282c37
Diffstat (limited to 'addons/mail/models/mail_message.py')
-rw-r--r--addons/mail/models/mail_message.py35
1 files changed, 22 insertions, 13 deletions
diff --git a/addons/mail/models/mail_message.py b/addons/mail/models/mail_message.py
index ac2183d767a..611da587de9 100644
--- a/addons/mail/models/mail_message.py
+++ b/addons/mail/models/mail_message.py
@@ -96,6 +96,7 @@ class Message(models.Model):
tracking_value_ids = fields.One2many(
'mail.tracking.value', 'mail_message_id',
string='Tracking values',
+ groups="base.group_no_one",
help='Tracked values are stored in a separate model. This field allow to reconstruct '
'the tracking and to generate statistics on the model.')
# mail gateway
@@ -279,7 +280,7 @@ class Message(models.Model):
# 1. Aggregate partners (author_id and partner_ids), attachments and tracking values
partners = self.env['res.partner'].sudo()
attachments = self.env['ir.attachment']
- trackings = self.env['mail.tracking.value']
+ message_ids = message_tree.keys()
for key, message in message_tree.iteritems():
if message.author_id:
partners |= message.author_id
@@ -291,8 +292,6 @@ class Message(models.Model):
partners |= message.needaction_partner_ids
if message.attachment_ids:
attachments |= message.attachment_ids
- if message.tracking_value_ids:
- trackings |= message.tracking_value_ids
# Read partners as SUPERUSER -> message being browsed as SUPERUSER it is already the case
partners_names = partners.name_get()
partner_tree = dict((partner[0], partner) for partner in partners_names)
@@ -307,13 +306,18 @@ class Message(models.Model):
}) for attachment in attachments_data)
# 3. Tracking values
- tracking_tree = dict((tracking.id, {
- 'id': tracking.id,
- 'changed_field': tracking.field_desc,
- 'old_value': tracking.get_old_display_value()[0],
- 'new_value': tracking.get_new_display_value()[0],
- 'field_type': tracking.field_type,
- }) for tracking in trackings)
+ tracking_values = self.env['mail.tracking.value'].sudo().search([('mail_message_id', 'in', message_ids)])
+ message_to_tracking = dict()
+ tracking_tree = dict.fromkeys(tracking_values.ids, False)
+ for tracking in tracking_values:
+ message_to_tracking.setdefault(tracking.mail_message_id.id, list()).append(tracking.id)
+ tracking_tree[tracking.id] = {
+ 'id': tracking.id,
+ 'changed_field': tracking.field_desc,
+ 'old_value': tracking.get_old_display_value()[0],
+ 'new_value': tracking.get_new_display_value()[0],
+ 'field_type': tracking.field_type,
+ }
# 4. Update message dictionaries
for message_dict in messages:
@@ -340,9 +344,9 @@ class Message(models.Model):
if attachment.id in attachments_tree:
attachment_ids.append(attachments_tree[attachment.id])
tracking_value_ids = []
- for tracking_value in message.tracking_value_ids:
- if tracking_value.id in tracking_tree:
- tracking_value_ids.append(tracking_tree[tracking_value.id])
+ for tracking_value_id in message_to_tracking.get(message_id, list()):
+ if tracking_value_id in tracking_tree:
+ tracking_value_ids.append(tracking_tree[tracking_value_id])
message_dict.update({
'author_id': author,
@@ -721,7 +725,12 @@ class Message(models.Model):
if 'record_name' not in values and 'default_record_name' not in self.env.context:
values['record_name'] = self._get_record_name(values)
+ # delegate creation of tracking after the create as sudo to avoid access rights issues
+ tracking_values_cmd = values.pop('tracking_value_ids', False)
message = super(Message, self).create(values)
+ if tracking_values_cmd:
+ message.sudo().write({'tracking_value_ids': tracking_values_cmd})
+
message._invalidate_documents()
if not self.env.context.get('message_create_from_mail_mail'):