From e1dc5d9c145c8d8e586051cd70e61ffa6ce620c2 Mon Sep 17 00:00:00 2001 From: david Date: Wed, 14 Apr 2021 12:43:32 +0200 Subject: [PATCH] [FIX] mail_activity_team: scheduled activity When an activity is scheduled due to automatic processes the onchanges won't adapt the proper user team, so we could have a mismatch that provokes an exceptions due to the designed constaints --- mail_activity_team/README.rst | 3 ++ .../i18n/mail_activity_team.pot | 5 +++ mail_activity_team/models/__init__.py | 1 + .../models/mail_activity_mixin.py | 32 +++++++++++++++++++ mail_activity_team/readme/CONTRIBUTORS.rst | 3 ++ .../static/description/index.html | 4 +++ .../tests/test_mail_activity_team.py | 10 ++++++ 7 files changed, 58 insertions(+) create mode 100644 mail_activity_team/models/mail_activity_mixin.py diff --git a/mail_activity_team/README.rst b/mail_activity_team/README.rst index 3233735ca..15d829c8a 100644 --- a/mail_activity_team/README.rst +++ b/mail_activity_team/README.rst @@ -79,6 +79,9 @@ Contributors * Jordi Ballester Alomar (jordi.ballester@forgeflow.com) * Miquel Raïch (miquel.raich@forgeflow.com) * Pedro Gonzalez (pedro.gonzalez@pesol.es) +* `Tecnativa `_: + + * David Vidal Maintainers ~~~~~~~~~~~ diff --git a/mail_activity_team/i18n/mail_activity_team.pot b/mail_activity_team/i18n/mail_activity_team.pot index f073a58fe..430dcec2a 100644 --- a/mail_activity_team/i18n/mail_activity_team.pot +++ b/mail_activity_team/i18n/mail_activity_team.pot @@ -23,6 +23,11 @@ msgstr "" msgid "Activity" msgstr "" +#. module: mail_activity_team +#: model:ir.model,name:mail_activity_team.model_mail_activity_mixin +msgid "Activity Mixin" +msgstr "" + #. module: mail_activity_team #: model_terms:ir.ui.view,arch_db:mail_activity_team.mail_activity_team_view_form msgid "Activity Team" diff --git a/mail_activity_team/models/__init__.py b/mail_activity_team/models/__init__.py index 2f37e6ccd..a3143d508 100644 --- a/mail_activity_team/models/__init__.py +++ b/mail_activity_team/models/__init__.py @@ -1,3 +1,4 @@ from . import mail_activity_team from . import mail_activity +from . import mail_activity_mixin from . import res_users diff --git a/mail_activity_team/models/mail_activity_mixin.py b/mail_activity_team/models/mail_activity_mixin.py new file mode 100644 index 000000000..cf25f4a43 --- /dev/null +++ b/mail_activity_team/models/mail_activity_mixin.py @@ -0,0 +1,32 @@ +# Copyright 2021 Tecnativa - David Vidal +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import models + + +class MailActivityMixin(models.AbstractModel): + _inherit = "mail.activity.mixin" + + def activity_schedule( + self, act_type_xmlid="", date_deadline=None, summary="", note="", **act_values + ): + """With automatic activities, the user onchange won't act so we must + ensure the right group is set and no exceptions are raised due to + user-team missmatch. We can hook onto `act_values` dict as it's passed + to the create activity method. + """ + user_id = act_values.get("user_id") + if user_id: + team = ( + self.env["mail.activity"] + .with_context(default_res_model=self._name,) + ._get_default_team_id(user_id=user_id) + ) + if team: + act_values.update({"team_id": team.id}) + return super().activity_schedule( + act_type_xmlid=act_type_xmlid, + date_deadline=date_deadline, + summary=summary, + note=note, + **act_values + ) diff --git a/mail_activity_team/readme/CONTRIBUTORS.rst b/mail_activity_team/readme/CONTRIBUTORS.rst index 1d602f07b..692e142c5 100644 --- a/mail_activity_team/readme/CONTRIBUTORS.rst +++ b/mail_activity_team/readme/CONTRIBUTORS.rst @@ -3,3 +3,6 @@ * Jordi Ballester Alomar (jordi.ballester@forgeflow.com) * Miquel Raïch (miquel.raich@forgeflow.com) * Pedro Gonzalez (pedro.gonzalez@pesol.es) +* `Tecnativa `_: + + * David Vidal diff --git a/mail_activity_team/static/description/index.html b/mail_activity_team/static/description/index.html index 1510a6ccc..4b495c111 100644 --- a/mail_activity_team/static/description/index.html +++ b/mail_activity_team/static/description/index.html @@ -425,6 +425,10 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
  • Pedro Gonzalez (pedro.gonzalez@pesol.es)
  • +
  • Tecnativa:
      +
    • David Vidal
    • +
    +
  • diff --git a/mail_activity_team/tests/test_mail_activity_team.py b/mail_activity_team/tests/test_mail_activity_team.py index dd45c4277..82faedd72 100644 --- a/mail_activity_team/tests/test_mail_activity_team.py +++ b/mail_activity_team/tests/test_mail_activity_team.py @@ -179,3 +179,13 @@ class TestMailActivityTeam(TransactionCase): self.act2.team_id = self.team2 self.team2.member_ids = [(3, self.act2.user_id.id)] self.act2._onchange_team_id() + + def test_schedule_activity(self): + """Correctly assign teams to auto scheduled activities. Those won't + trigger onchanges and could raise constraints and team missmatches""" + partner_record = self.employee.partner_id.sudo(self.employee.id) + activity = partner_record.activity_schedule( + user_id=self.employee2.id, + activity_type_id=self.env.ref("mail.mail_activity_data_call").id, + ) + self.assertEqual(activity.team_id, self.team2)