From 36854d3bda807b82aff0c2123a2e82baf288de11 Mon Sep 17 00:00:00 2001 From: Prakash Prajapati Date: Fri, 20 Jul 2018 17:55:47 +0530 Subject: [PATCH] [IMP] mail: allow to reschedule assigned user on automated activities Purpose of this commit is to add possibility of rescheduling the assigned user on automated activities. Currently rescheduling is limited to updating the deadline. In some cases we want to be able to update the assigned user of an automated activity. Tests are added to avoid regression. This commit is linked to task ID 1838956 and PR #25899. --- addons/mail/models/mail_activity.py | 17 ++++++++++++----- addons/test_mail/tests/test_mail_activity.py | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/addons/mail/models/mail_activity.py b/addons/mail/models/mail_activity.py index a1eb827db98..4f760baad73 100644 --- a/addons/mail/models/mail_activity.py +++ b/addons/mail/models/mail_activity.py @@ -602,10 +602,14 @@ class MailActivityMixin(models.AbstractModel): activities |= self.env['mail.activity'].create(create_vals) return activities - def activity_reschedule(self, act_type_xmlids, user_id=None, date_deadline=None): + def activity_reschedule(self, act_type_xmlids, user_id=None, date_deadline=None, new_user_id=None): """ Reschedule some automated activities. Activities to reschedule are selected based on type xml ids and optionally by user. Purpose is to be - able to change the deadline, not anything else currently. """ + able to + + * update the deadline to date_deadline; + * update the responsible to new_user_id; + """ if self.env.context.get('mail_activity_automation_skip'): return False @@ -622,9 +626,12 @@ class MailActivityMixin(models.AbstractModel): domain = ['&'] + domain + [('user_id', '=', user_id)] activities = self.env['mail.activity'].search(domain) if activities: - activities.write({ - 'date_deadline': date_deadline, - }) + write_vals = {} + if date_deadline: + write_vals['date_deadline'] = date_deadline + if new_user_id: + write_vals['user_id'] = new_user_id + activities.write(write_vals) return activities def activity_feedback(self, act_type_xmlids, user_id=None, feedback=None): diff --git a/addons/test_mail/tests/test_mail_activity.py b/addons/test_mail/tests/test_mail_activity.py index 7ac2fb5fe95..b29fa7a465b 100644 --- a/addons/test_mail/tests/test_mail_activity.py +++ b/addons/test_mail/tests/test_mail_activity.py @@ -157,6 +157,26 @@ class TestMailActivity(BaseFunctionalTest): self.assertEqual(rec.active, True) self.assertEqual(rec.activity_ids, self.env['mail.activity']) + def test_activity_mixin_reschedule_user(self): + rec = self.test_record.sudo(self.user_employee) + rec.activity_schedule( + 'test_mail.mail_act_test_todo', + user_id=self.user_admin.id) + self.assertEqual(rec.activity_ids[0].user_id, self.user_admin) + + # reschedule its own should not alter other's activities + rec.activity_reschedule( + ['test_mail.mail_act_test_todo'], + user_id=self.user_employee.id, + new_user_id=self.user_employee.id) + self.assertEqual(rec.activity_ids[0].user_id, self.user_admin) + + rec.activity_reschedule( + ['test_mail.mail_act_test_todo'], + user_id=self.user_admin.id, + new_user_id=self.user_employee.id) + self.assertEqual(rec.activity_ids[0].user_id, self.user_employee) + def test_activity_notify_other_user(self): self.user_admin.notification_type = 'email' rec = self.test_record.sudo(self.user_employee)