diff --git a/mail_activity_team/models/mail_activity.py b/mail_activity_team/models/mail_activity.py index 3f2e9640b5..d0a11e68dc 100644 --- a/mail_activity_team/models/mail_activity.py +++ b/mail_activity_team/models/mail_activity.py @@ -27,6 +27,24 @@ def _get_default_team_id(self, user_id=None): comodel_name="mail.activity.team", default=lambda s: s._get_default_team_id() ) + @api.model_create_multi + def create(self, vals_list): + vals_list = [ + # ensure that the built-in user_id field value is in sync with our field + # team_user_id before triggering create + ( + dict(vals, user_id=vals["team_user_id"]) + if ( + "user_id" in vals + and "team_user_id" in vals + and vals["user_id"] != vals["team_user_id"] + ) + else vals + ) + for vals in vals_list + ] + return super(MailActivity, self).create(vals_list) + @api.onchange("user_id") def _onchange_user_id(self): if not self.user_id or ( @@ -67,7 +85,7 @@ def _check_team_and_user(self): @api.onchange("activity_type_id") def _onchange_activity_type_id(self): - super(MailActivity, self)._onchange_activity_type_id() + super()._onchange_activity_type_id() if self.activity_type_id.default_team_id: self.team_id = self.activity_type_id.default_team_id members = self.activity_type_id.default_team_id.member_ids diff --git a/mail_activity_team/tests/test_mail_activity_team.py b/mail_activity_team/tests/test_mail_activity_team.py index 91fbbff43a..4bc51ae880 100644 --- a/mail_activity_team/tests/test_mail_activity_team.py +++ b/mail_activity_team/tests/test_mail_activity_team.py @@ -313,3 +313,35 @@ def test_activity_schedule_next(self): self.assertTrue(next_activities) self.assertEqual(next_activities.team_id, self.team2) self.assertEqual(next_activities.user_id, self.employee2) + + def test_user_sync(self): + messages_domain = [ + ("res_id", "=", self.partner_client.id), + ("model", "=", self.partner_ir_model.model), + ] + messages_ids = self.env["mail.message"].search(messages_domain) + self.assertFalse(messages_ids) + # create a new activity + activity_form = Form(self.env["mail.activity"].with_user(self.employee)) + # ensure default values are set + self.assertEqual(activity_form.team_id, self.team1) + self.assertEqual(activity_form.user_id, self.employee) + # assign new activity values + activity_form.activity_type_id = self.activity2 + activity_form.res_model_id = self.partner_ir_model + activity_form.res_id = self.partner_client + # set another user (the `user_id` field is hidden and replaced with + # `team_user_id` when this module is installed) + activity_form.team_user_id = self.employee2 + activity_form.team_id = self.team2 + activity_id = activity_form.save() + # check right values + self.assertEqual(activity_id.user_id, self.employee2) + self.assertEqual(activity_id.team_user_id, self.employee2) + self.assertEqual(activity_id.team_id, self.team2) + # ensure that one and only one notification has been created + messages_id = self.env["mail.message"].search(messages_domain) + self.assertEqual(len(messages_id), 1) + self.assertEqual(messages_id.email_from, '"Employee" ') + self.assertEqual(messages_id.partner_ids, self.employee2.partner_id) + self.assertRegex(messages_id.body, r"Employee.*assigned you an activity")