diff options
| author | jvm-odoo <jvm@odoo.com> | 2020-02-21 13:04:55 +0000 |
|---|---|---|
| committer | jvm-odoo <jvm@odoo.com> | 2020-03-11 09:49:02 +0000 |
| commit | 06dee038ddd0e2344c45d4f20e79c28fc78407de (patch) | |
| tree | ea92fab6b3d55769bb0c2d8a2ffad7d4cbf78e8a /addons | |
| parent | 4aa7e101a90f2281e581389e7c24909dd35fb00f (diff) | |
[FIX] mail: attachments in the message when marking activity as done
Fine tuning of 1e411e3a6d
- It moves the attachment in the message when we mark an activity as
done.
- It adds a test
OPW-2196668
closes odoo/odoo#47349
X-original-commit: 2033066426a6af6eed5f80f1bcde6e650e998f0d
Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com>
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/mail/models/mail_activity.py | 27 | ||||
| -rw-r--r-- | addons/test_mail/tests/test_mail_activity.py | 44 | ||||
| -rw-r--r-- | addons/test_mail/tests/test_performance.py | 4 |
3 files changed, 72 insertions, 3 deletions
diff --git a/addons/mail/models/mail_activity.py b/addons/mail/models/mail_activity.py index 19d488c501f..1f735e1b1f2 100644 --- a/addons/mail/models/mail_activity.py +++ b/addons/mail/models/mail_activity.py @@ -464,6 +464,19 @@ class MailActivity(models.Model): # marking as 'done' messages = self.env['mail.message'] next_activities_values = [] + + # Search for all attachments linked to the activities we are about to unlink. This way, we + # can link them to the message posted and prevent their deletion. + attachments = self.env['ir.attachment'].search_read([ + ('res_model', '=', self._name), + ('res_id', 'in', self.ids), + ], ['id', 'res_id']) + + activity_attachments = defaultdict(list) + for attachment in attachments: + activity_id = attachment['res_id'] + activity_attachments[activity_id].append(attachment['id']) + for activity in self: # extract value to generate next activities if activity.force_next: @@ -494,7 +507,19 @@ class MailActivity(models.Model): mail_activity_type_id=activity.activity_type_id.id, attachment_ids=[(4, attachment_id) for attachment_id in attachment_ids] if attachment_ids else [], ) - messages |= record.message_ids[0] + + # Moving the attachments in the message + # TODO: Fix void res_id on attachment when you create an activity with an image + # directly, see route /web_editor/attachment/add + activity_message = record.message_ids[0] + message_attachments = self.env['ir.attachment'].browse(activity_attachments[activity.id]) + if message_attachments: + message_attachments.write({ + 'res_id': activity_message.id, + 'res_model': activity_message._name, + }) + activity_message.attachment_ids = message_attachments + messages |= activity_message next_activities = self.env['mail.activity'].create(next_activities_values) self.unlink() # will unlink activity, dont access `self` after that diff --git a/addons/test_mail/tests/test_mail_activity.py b/addons/test_mail/tests/test_mail_activity.py index 7fe7ba51981..b75a9b960cc 100644 --- a/addons/test_mail/tests/test_mail_activity.py +++ b/addons/test_mail/tests/test_mail_activity.py @@ -148,6 +148,50 @@ class TestActivityFlow(TestActivityCommon): activity.with_user(self.user_admin).write({'user_id': self.user_employee.id}) self.assertEqual(activity.user_id, self.user_employee) + def test_action_feedback_attachment(self): + Partner = self.env['res.partner'] + Activity = self.env['mail.activity'] + Attachment = self.env['ir.attachment'] + Message = self.env['mail.message'] + + partner = self.env['res.partner'].create({ + 'name': 'Tester', + }) + + activity = Activity.create({ + 'summary': 'Test', + 'activity_type_id': 1, + 'res_model_id': self.env.ref('base.model_res_partner').id, + 'res_id': partner.id, + }) + + attachments = Attachment + attachments += Attachment.create({ + 'name': 'test', + 'res_name': 'test', + 'res_model': 'mail.activity', + 'res_id': activity.id, + 'datas': 'test', + }) + attachments += Attachment.create({ + 'name': 'test2', + 'res_name': 'test', + 'res_model': 'mail.activity', + 'res_id': activity.id, + 'datas': 'testtest', + }) + + # Adding the attachments to the activity + activity.attachment_ids = attachments + + # Checking if the attachment has been forwarded to the message + # when marking an activity as "Done" + activity.action_feedback() + activity_message = Message.search([], order='id desc', limit=1) + self.assertEqual(set(activity_message.attachment_ids.ids), set(attachments.ids)) + for attachment in attachments: + self.assertEqual(attachment.res_id, activity_message.id) + self.assertEqual(attachment.res_model, activity_message._name) @tests.tagged('mail_activity') class TestActivityMixin(TestActivityCommon): diff --git a/addons/test_mail/tests/test_performance.py b/addons/test_mail/tests/test_performance.py index b952fe73388..85b1f24980f 100644 --- a/addons/test_mail/tests/test_performance.py +++ b/addons/test_mail/tests/test_performance.py @@ -229,7 +229,7 @@ class TestMailAPIPerformance(BaseMailPerformance): #voip module read activity_type during create leading to one less query in enterprise on action_feedback category = activity.activity_type_id.category - with self.assertQueryCount(__system__=17, emp=21): + with self.assertQueryCount(__system__=18, emp=22): activity.action_feedback(feedback='Zizisse Done !') @users('__system__', 'emp') @@ -246,7 +246,7 @@ class TestMailAPIPerformance(BaseMailPerformance): record.write({'name': 'Dupe write'}) - with self.assertQueryCount(__system__=18, emp=21): + with self.assertQueryCount(__system__=19, emp=22): record.action_close('Dupe feedback') self.assertEqual(record.activity_ids, self.env['mail.activity']) |
