[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.
This commit is contained in:
Prakash Prajapati
2018-08-10 15:36:04 +02:00
committed by Thibault Delavallée
parent c7d9ddf68f
commit 36854d3bda
2 changed files with 32 additions and 5 deletions
+12 -5
View File
@@ -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):
@@ -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)