Merge PR #1214 into 16.0

Signed-off-by hbrunn
pull/1231/head
OCA-git-bot 2023-09-29 16:46:23 +00:00
commit 52c71ba041
5 changed files with 18 additions and 57 deletions

View File

@ -1,2 +1,2 @@
from . import models from . import models
from .hooks import post_load_hook, pre_init_hook, uninstall_hook from .hooks import pre_init_hook, uninstall_hook

View File

@ -15,6 +15,5 @@
], ],
}, },
"pre_init_hook": "pre_init_hook", "pre_init_hook": "pre_init_hook",
"post_load": "post_load_hook",
"uninstall_hook": "uninstall_hook", "uninstall_hook": "uninstall_hook",
} }

View File

@ -1,9 +1,6 @@
# Copyright 2018-22 ForgeFlow <http://www.forgeflow.com> # Copyright 2018-22 ForgeFlow <http://www.forgeflow.com>
# Copyright 2018 Odoo, S.A. # Copyright 2018 Odoo, S.A.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). # 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): 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): def uninstall_hook(cr, registry):
"""The objective of this hook is to remove all activities that are done """The objective of this hook is to remove all activities that are done
upon module uninstall upon module uninstall

View File

@ -2,6 +2,8 @@
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
from odoo import api, fields, models from odoo import api, fields, models
delete_sentinel = object()
class MailActivity(models.Model): class MailActivity(models.Model):
@ -61,6 +63,19 @@ class MailActivity(models.Model):
("done", "=", True), ("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): class MailActivityMixin(models.AbstractModel):

View File

@ -32,7 +32,8 @@ class TestMailActivityDoneMethods(TransactionCase):
) )
def test_mail_activity_done(self): 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") self.assertEqual(self.act1.state, "done")
def test_systray_get_activities(self): def test_systray_get_activities(self):