From b0ab807e0ab071eae884cf6e2cf81f9f2ad1bae8 Mon Sep 17 00:00:00 2001 From: Rob Coekaerts Date: Fri, 16 Sep 2022 13:03:13 +0000 Subject: [PATCH] [FIX] hr_skill_slides: log course notifications on correct chatter Since https://github.com/odoo/odoo/pull/94876 every call to _action_add_member (or _remove_membership) in hr_skill_slides is wrongly logged on the chatter of the calling employee. With this commit, it is now logged on the affected employee. The method is now also supported to be used in batch. task-2980912 closes odoo/odoo#101486 X-original-commit: dd77aee24cdac95dd4c07393f8ee74fe5d80d922 Signed-off-by: Kevin Baptiste --- .../hr_skills_slides/models/slide_channel.py | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/addons/hr_skills_slides/models/slide_channel.py b/addons/hr_skills_slides/models/slide_channel.py index 98c63bd416d..58609b6d6db 100644 --- a/addons/hr_skills_slides/models/slide_channel.py +++ b/addons/hr_skills_slides/models/slide_channel.py @@ -58,22 +58,33 @@ class Channel(models.Model): def _action_add_members(self, target_partners, **member_values): res = super()._action_add_members(target_partners, **member_values) - - if self.env.user.employee_ids: - msg = _('The employee subscribed to the course %(course)s', - link=self.website_url, - course=self.name) - self.env.user.employee_id.message_post(body=msg) - + for channel in self: + channel._message_employee_chatter( + _('The employee subscribed to the course %(course)s', link=channel.website_url, course=channel.name), + target_partners) return res def _remove_membership(self, partner_ids): res = super()._remove_membership(partner_ids) - if self.env.user.employee_ids: - msg = _('The employee left the course %(course)s', - link=self.website_url, - course=self.name) - self.env.user.employee_id.message_post(body=msg) + partners = self.env['res.partner'].browse(partner_ids) + for channel in self: + channel._message_employee_chatter( + _('The employee left the course %(course)s', link=channel.website_url, course=channel.name), + partners) return res + + def _message_employee_chatter(self, msg, partners): + for partner in partners: + employee = self.env['hr.employee'] + if partner.employee: + employee = partner.employee + elif partner.user_ids: + # If the partner is related to a company, we need the employee who belongs to that same company. + employee = partner.user_ids.sudo().filtered( + lambda u: u.employee_id and (not partner.company_id or u.employee_id.company_id == partner.company_id) + ).employee_id + + if employee: + employee.sudo().message_post(body=msg)