[REF] hr_expense: use new implementation for auto subscription
Expense report has custom code to add people as followers. This code has several issues, notably in some cases it could try to add several times same people, leading to crash and issues. As auto subscription has been cleaned let us clean the code in hr expense. Using _message_auto_subscribe_followers it is now simpler to automatically add follower to expense reports. It is not necessary to add hackish custom code in create and write. One change is done in this commit. Some people are set as follower after record creation and not before. However this was necessary when tracking messages were not correctly triggered or auto subscription done after tracking. As process is now 1/ create 2/ auto subscribe 3/ tracking, messages linked to tracking will be correctly push to recipients automatically added as followers.
This commit is contained in:
@@ -527,18 +527,10 @@ class HrExpenseSheet(models.Model):
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
self._create_set_followers(vals)
|
||||
sheet = super(HrExpenseSheet, self).create(vals)
|
||||
sheet.activity_update()
|
||||
return sheet
|
||||
|
||||
@api.multi
|
||||
def write(self, vals):
|
||||
res = super(HrExpenseSheet, self).write(vals)
|
||||
if vals.get('employee_id'):
|
||||
self._add_followers()
|
||||
return res
|
||||
|
||||
@api.multi
|
||||
def unlink(self):
|
||||
for expense in self:
|
||||
@@ -561,41 +553,14 @@ class HrExpenseSheet(models.Model):
|
||||
return 'hr_expense.mt_expense_paid'
|
||||
return super(HrExpenseSheet, self)._track_subtype(init_values)
|
||||
|
||||
def _get_users_to_subscribe(self, employee=False):
|
||||
users = self.env['res.users']
|
||||
employee = employee or self.employee_id
|
||||
if employee.user_id:
|
||||
users |= employee.user_id
|
||||
if employee.parent_id:
|
||||
users |= employee.parent_id.user_id
|
||||
if employee.department_id and employee.department_id.manager_id and employee.parent_id != employee.department_id.manager_id:
|
||||
users |= employee.department_id.manager_id.user_id
|
||||
return users
|
||||
|
||||
def _add_followers(self):
|
||||
users = self._get_users_to_subscribe()
|
||||
self.message_subscribe(partner_ids=users.mapped('partner_id').ids)
|
||||
|
||||
@api.model
|
||||
def _create_set_followers(self, values):
|
||||
# Add the followers at creation, so they can be notified
|
||||
employee_id = values.get('employee_id')
|
||||
if not employee_id:
|
||||
return
|
||||
|
||||
employee = self.env['hr.employee'].browse(employee_id)
|
||||
users = self._get_users_to_subscribe(employee=employee) - self.env.user
|
||||
values['message_follower_ids'] = []
|
||||
MailFollowers = self.env['mail.followers']
|
||||
for partner in users.mapped('partner_id'):
|
||||
values['message_follower_ids'] += MailFollowers._add_follower_command(self._name, [], {partner.id: None}, {})[0]
|
||||
|
||||
if values.get('user_id') and values.get('user_id') != employee.user_id.id and values.get('user_id') != self.env.uid:
|
||||
resp_partner = self.env['res.users'].browse(values['user_id'])
|
||||
# Parsing ORM command to avoid adding several times the same partner
|
||||
# TDE note: a better implementation should come in saas 11.3 or 11.4, allowing to normally remove that code
|
||||
if resp_partner.partner_id.id not in (x[2].get('partner_id') for x in values['message_follower_ids'] if len(x) == 3):
|
||||
values['message_follower_ids'] += MailFollowers._add_follower_command(self._name, [], {resp_partner.partner_id.id: None}, {})[0]
|
||||
def _message_auto_subscribe_followers(self, updated_values, subtype_ids):
|
||||
res = super(HrExpenseSheet, self)._message_auto_subscribe_followers(updated_values, subtype_ids)
|
||||
if updated_values.get('employee_id'):
|
||||
employee = self.env['hr.employee'].browse(updated_values['employee_id'])
|
||||
users = employee.user_id | employee.parent_id.user_id | employee.department_id.manager_id.user_id
|
||||
for pid in users.mapped('partner_id').ids:
|
||||
res.append((pid, subtype_ids, False))
|
||||
return res
|
||||
|
||||
# --------------------------------------------
|
||||
# Actions
|
||||
|
||||
Reference in New Issue
Block a user