From 618c42575efba2f2188cce58476161f8b258e36b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 27 Jul 2018 11:23:34 +0200 Subject: [PATCH] [IMP] mail: remove activities when archiving records When archiving records through the generic toggle_active methods we now remove ongoing activities. Purpose of this commit is to avoid having ongoing activities in the systray linked to archived records. As archiving records means we won't work on them anymore it makes no sense to keep related activities. --- addons/mail/models/mail_activity.py | 14 ++++++++++++++ addons/test_mail/tests/test_mail_activity.py | 13 +++++++++++++ 2 files changed, 27 insertions(+) diff --git a/addons/mail/models/mail_activity.py b/addons/mail/models/mail_activity.py index f09de56ed78..6241cd61083 100644 --- a/addons/mail/models/mail_activity.py +++ b/addons/mail/models/mail_activity.py @@ -453,6 +453,20 @@ class MailActivityMixin(models.AbstractModel): ).unlink() return result + @api.multi + def toggle_active(self): + """ Before archiving the record we should also remove its ongoing + activities. Otherwise they stay in the systray and concerning archived + records it makes no sense. """ + record_to_deactivate = self.filtered(lambda rec: rec.active) + if record_to_deactivate: + # use a sudo to bypass every access rights; all activities should be removed + self.env['mail.activity'].sudo().search([ + ('res_model', '=', self._name), + ('res_id', 'in', record_to_deactivate.ids) + ]).unlink() + return super(MailActivityMixin, self).toggle_active() + def activity_schedule(self, act_type_xmlid='', date_deadline=None, summary='', note='', **act_values): """ Schedule an activity on each record of the current record set. This method allow to provide as parameter act_type_xmlid. This is an diff --git a/addons/test_mail/tests/test_mail_activity.py b/addons/test_mail/tests/test_mail_activity.py index fd584bbb759..7ac2fb5fe95 100644 --- a/addons/test_mail/tests/test_mail_activity.py +++ b/addons/test_mail/tests/test_mail_activity.py @@ -144,6 +144,19 @@ class TestMailActivity(BaseFunctionalTest): self.assertEqual(self.test_record.activity_ids, self.env['mail.activity']) self.assertEqual(len(self.test_record.message_ids), 2) + def test_activity_mixin_archive(self): + rec = self.test_record.sudo(self.user_employee) + new_act = rec.activity_schedule( + 'test_mail.mail_act_test_todo', + user_id=self.user_admin.id) + self.assertEqual(rec.activity_ids, new_act) + rec.toggle_active() + self.assertEqual(rec.active, False) + self.assertEqual(rec.activity_ids, self.env['mail.activity']) + rec.toggle_active() + self.assertEqual(rec.active, True) + self.assertEqual(rec.activity_ids, self.env['mail.activity']) + def test_activity_notify_other_user(self): self.user_admin.notification_type = 'email' rec = self.test_record.sudo(self.user_employee)