Skip to content

Commit 1ebe578

Browse files
committed
[FIX] project: auto-subscribe recipients to project task on share and message
Before this commit, when a task was shared through the share wizard or when a message was sent to a customer via the chatter, the recipients were not added as followers of the task. As a result, they couldn't see the task in the portal. This commit ensures: - Recipients are now added as followers of the task when it is shared with them through the wizard. - A message to a customer in the chatter also adds them as a follower of the task. task-4781259 closes odoo#211169 Related: odoo/enterprise#86169 Signed-off-by: Vincent Larcin (vila) <vila@odoo.com>
1 parent 8784d1e commit 1ebe578

4 files changed

Lines changed: 49 additions & 20 deletions

File tree

addons/project/models/project_task.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ class ProjectTask(models.Model):
9292
'html.field.history.mixin',
9393
]
9494
_mail_post_access = 'read'
95+
_mail_thread_customer = True
9596
_order = "priority desc, sequence, date_deadline asc, id desc"
9697
_primary_email = 'email_from'
9798
_systray_view = 'activity'

addons/project/tests/test_project_mail_features.py

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from odoo.addons.test_mail.data.test_mail_data import MAIL_TEMPLATE
44
from odoo.tests import tagged, users
55
from odoo.tools import formataddr, mute_logger
6+
from odoo.fields import Command
67

78

89
@tagged('post_install', '-at_install', 'mail_flow', 'mail_tools')
@@ -209,12 +210,7 @@ def test_task_creation_notifies_author(self):
209210
self.assertEqual(task.project_id, self.project_followers)
210211
self.assertEqual(task.stage_id, self.project_followers.type_ids[0])
211212
# followers: email cc is added in followers at creation time, aka only recognized partners
212-
if not test_user:
213-
self.assertEqual(task.message_partner_ids, internal_followers + self.partner_1 + self.partner_2,
214-
'Note that author is not added by mailgateway, as he is external'
215-
'But project subscribe "current_partner" at create time.')
216-
else:
217-
self.assertEqual(task.message_partner_ids, internal_followers + author + self.partner_1 + self.partner_2)
213+
self.assertEqual(task.message_partner_ids, internal_followers + author + self.partner_1 + self.partner_2)
218214
# messages
219215
self.assertEqual(len(task.message_ids), 2)
220216
# first message: incoming email: sent to email followers
@@ -349,10 +345,7 @@ def test_task_creation_notifies_author(self):
349345
subject=f'Re: {task.name}',
350346
subtype_id=self.env.ref('mail.mt_comment').id,
351347
)
352-
if not test_user:
353-
self.assertEqual(task.message_partner_ids, internal_followers + self.partner_1 + self.partner_2)
354-
else:
355-
self.assertEqual(task.message_partner_ids, internal_followers + author + self.partner_1 + self.partner_2)
348+
self.assertEqual(task.message_partner_ids, internal_followers + author + self.partner_1 + self.partner_2)
356349

357350
external_partners = self.partner_1 + self.partner_2 + new_partner_cc + new_partner_customer
358351
self.assertMailNotifications(
@@ -422,16 +415,10 @@ def test_task_creation_notifies_author(self):
422415
'"Valid Poilvache" <valid.other@gmail.com>',
423416
'Updated with new Cc')
424417
self.assertEqual(len(task.message_ids), 4, 'Incoming email + acknowledgement + chatter reply + customer reply')
425-
if not test_user:
426-
self.assertEqual(
427-
task.message_partner_ids,
428-
internal_followers + self.partner_1 + self.partner_2 + self.partner_3 + new_partner_cc + new_partner_customer,
429-
'Project adds recognized recipients as followers')
430-
else:
431-
self.assertEqual(
432-
task.message_partner_ids,
433-
internal_followers + author + self.partner_1 + self.partner_2 + self.partner_3 + new_partner_cc + new_partner_customer,
434-
'Project adds recognized recipients as followers')
418+
self.assertEqual(
419+
task.message_partner_ids,
420+
internal_followers + author + self.partner_1 + self.partner_2 + self.partner_3 + new_partner_cc + new_partner_customer,
421+
'Project adds recognized recipients as followers')
435422

436423
self.assertMailNotifications(
437424
task.message_ids[0],
@@ -542,3 +529,28 @@ def test_task_notification_on_user_ids_update(self):
542529
self.flush_tracking()
543530
# check that no mail was received for the assignee of the task
544531
self.assertNotSentEmail(self.user_projectuser.email_formatted)
532+
533+
def test_task_portal_share_adds_followers(self):
534+
""" Test that sharing a task through the portal share wizard adds recipients as followers.
535+
536+
Test Cases:
537+
===========
538+
1) Verify that the portal user is not a follower of the task.
539+
2) Create and execute a portal share wizard to share the task with the portal user.
540+
3) Verify that the portal user has been added as a follower after sharing.
541+
"""
542+
543+
self.assertNotIn(self.user_portal.partner_id, self.task_1.message_partner_ids,
544+
"Portal user's partner should not be a follower initially")
545+
546+
share_wizard = self.env['portal.share'].create({
547+
'res_model': 'project.task',
548+
'res_id': self.task_1.id,
549+
'partner_ids': [Command.set(self.user_portal.partner_id.ids)]
550+
})
551+
552+
with self.mock_mail_gateway():
553+
share_wizard.action_send_mail()
554+
555+
self.assertIn(self.user_portal.partner_id, self.task_1.message_partner_ids,
556+
"Portal user's partner should be added as a follower after sharing")

addons/project/wizard/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
from . import project_task_type_delete
66
from . import project_share_wizard
77
from . import project_share_collaborator_wizard
8+
from . import portal_share
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from odoo import models
2+
3+
4+
class PortalShare(models.TransientModel):
5+
_inherit = 'portal.share'
6+
7+
def action_send_mail(self):
8+
# Extend portal share to subscribe partners when sharing project tasks.
9+
result = super().action_send_mail()
10+
11+
# Only subscribe partners if shared from project.task
12+
if self.res_model == 'project.task':
13+
self.resource_ref.message_subscribe(partner_ids=self.partner_ids.ids)
14+
15+
return result

0 commit comments

Comments
 (0)