summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
Diffstat (limited to 'addons')
-rw-r--r--addons/mail/models/mail_thread.py20
-rw-r--r--addons/mail/tests/test_mail_features.py2
2 files changed, 16 insertions, 6 deletions
diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py
index d08158750dd..8f3e752bccc 100644
--- a/addons/mail/models/mail_thread.py
+++ b/addons/mail/models/mail_thread.py
@@ -1180,7 +1180,7 @@ class MailThread(models.AbstractModel):
def message_route_process(self, message, message_dict, routes):
self = self.with_context(attachments_mime_plainxml=True) # import XML attachments as text
# postpone setting message_dict.partner_ids after message_post, to avoid double notifications
- partner_ids = message_dict.pop('partner_ids', [])
+ original_partner_ids = message_dict.pop('partner_ids', [])
thread_id = False
for model, thread_id, custom_values, user_id, alias in routes or ():
if model:
@@ -1206,13 +1206,23 @@ class MailThread(models.AbstractModel):
Model = self.env['mail.thread']
if not hasattr(Model, 'message_post'):
Model = self.env['mail.thread'].with_context(thread_model=model)
- internal = message_dict.pop('internal', False)
- new_msg = Model.browse(thread_id).message_post(subtype=internal and 'mail.mt_note' or 'mail.mt_comment', **message_dict)
- if partner_ids:
+ # replies to internal message are considered as notes, but parent message
+ # author is added in recipients to ensure he is notified of a private answer
+ partner_ids = []
+ if message_dict.pop('internal', False):
+ subtype = 'mail.mt_note'
+ if message_dict.get('parent_id'):
+ parent_message = self.env['mail.message'].sudo().browse(message_dict['parent_id'])
+ partner_ids = [(4, parent_message.author_id.id)]
+ else:
+ subtype = 'mail.mt_comment'
+ new_msg = Model.browse(thread_id).message_post(subtype=subtype, partner_ids=partner_ids, **message_dict)
+
+ if original_partner_ids:
# postponed after message_post, because this is an external message and we don't want to create
# duplicate emails due to notifications
- new_msg.write({'partner_ids': partner_ids})
+ new_msg.write({'partner_ids': original_partner_ids})
return thread_id
@api.model
diff --git a/addons/mail/tests/test_mail_features.py b/addons/mail/tests/test_mail_features.py
index 942196ff6d3..3141644846d 100644
--- a/addons/mail/tests/test_mail_features.py
+++ b/addons/mail/tests/test_mail_features.py
@@ -202,7 +202,7 @@ class TestMessagePost(TestMail):
reply = self.group_pigs.message_ids - msg
self.assertTrue(reply)
self.assertEqual(reply.subtype_id, self.env.ref('mail.mt_note'))
- self.assertEqual(reply.needaction_partner_ids, self.env['res.partner'])
+ self.assertEqual(reply.needaction_partner_ids, self.user_employee.partner_id)
@mute_logger('odoo.addons.mail.models.mail_mail')
def test_message_compose(self):