diff --git a/mail_activity_done/__init__.py b/mail_activity_done/__init__.py index 320b63a4c..5540bf58b 100644 --- a/mail_activity_done/__init__.py +++ b/mail_activity_done/__init__.py @@ -1,2 +1,2 @@ from . import models -from .hooks import post_load_hook, pre_init_hook, uninstall_hook +from .hooks import pre_init_hook, uninstall_hook diff --git a/mail_activity_done/__manifest__.py b/mail_activity_done/__manifest__.py index 68ad76d05..a4f07f23c 100644 --- a/mail_activity_done/__manifest__.py +++ b/mail_activity_done/__manifest__.py @@ -15,6 +15,5 @@ ], }, "pre_init_hook": "pre_init_hook", - "post_load": "post_load_hook", "uninstall_hook": "uninstall_hook", } diff --git a/mail_activity_done/hooks.py b/mail_activity_done/hooks.py index 5320fc92d..8dc678dde 100644 --- a/mail_activity_done/hooks.py +++ b/mail_activity_done/hooks.py @@ -1,9 +1,6 @@ # Copyright 2018-22 ForgeFlow # Copyright 2018 Odoo, S.A. # License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). -from odoo import Command, fields - -from odoo.addons.mail.models.mail_activity import MailActivity def pre_init_hook(cr): @@ -31,57 +28,6 @@ def pre_init_hook(cr): ) -def post_load_hook(): - def _new_action_done(self, feedback=False, attachment_ids=None): - """Overwritten method""" - if "done" not in self._fields: - return self._action_done_original( - feedback=feedback, attachment_ids=attachment_ids - ) - # marking as 'done' - messages = self.env["mail.message"] - next_activities_values = [] - for activity in self: - # extract value to generate next activities - if activity.chaining_type == "trigger": - vals = activity.with_context( - activity_previous_deadline=activity.date_deadline - )._prepare_next_activity_values() - next_activities_values.append(vals) - - # post message on activity, before deleting it - record = self.env[activity.res_model].browse(activity.res_id) - activity.done = True - activity.active = False - activity.date_done = fields.Date.today() - record.message_post_with_view( - "mail.message_activity_done", - values={ - "activity": activity, - "feedback": feedback, - "display_assignee": activity.user_id != self.env.user, - }, - subtype_id=self.env["ir.model.data"]._xmlid_to_res_id( - "mail.mt_activities" - ), - mail_activity_type_id=activity.activity_type_id.id, - attachment_ids=[ - Command.link(attachment_id) for attachment_id in attachment_ids - ] - if attachment_ids - else [], - ) - messages |= record.message_ids[0] - - next_activities = self.env["mail.activity"].create(next_activities_values) - - return messages, next_activities - - if not hasattr(MailActivity, "_action_done_original"): - MailActivity._action_done_original = MailActivity._action_done - MailActivity._action_done = _new_action_done - - def uninstall_hook(cr, registry): """The objective of this hook is to remove all activities that are done upon module uninstall diff --git a/mail_activity_done/models/mail_activity.py b/mail_activity_done/models/mail_activity.py index 1e10bd9c0..9d29c7fac 100644 --- a/mail_activity_done/models/mail_activity.py +++ b/mail_activity_done/models/mail_activity.py @@ -2,6 +2,8 @@ # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). from odoo import api, fields, models +delete_sentinel = object() + class MailActivity(models.Model): @@ -61,6 +63,19 @@ class MailActivity(models.Model): ("done", "=", True), ] + def unlink(self): + """Don't unlink if we're asked not to""" + if self.env.context.get("mail_activity_done") != delete_sentinel: + return super().unlink() + + def _action_done(self, feedback=False, attachment_ids=None): + """Ask super not to delete the activity and set it to done""" + self.write({"done": True, "active": False, "date_done": fields.Date.today()}) + return super( + MailActivity, + self.with_context(mail_activity_done=delete_sentinel), + )._action_done(feedback=feedback, attachment_ids=attachment_ids) + class MailActivityMixin(models.AbstractModel): diff --git a/mail_activity_done/tests/test_mail_activity_done.py b/mail_activity_done/tests/test_mail_activity_done.py index f3e0cc191..2168503d9 100644 --- a/mail_activity_done/tests/test_mail_activity_done.py +++ b/mail_activity_done/tests/test_mail_activity_done.py @@ -32,7 +32,8 @@ class TestMailActivityDoneMethods(TransactionCase): ) def test_mail_activity_done(self): - self.act1.done = True + self.act1._action_done() + self.assertTrue(self.act1.exists()) self.assertEqual(self.act1.state, "done") def test_systray_get_activities(self):