The current smartbutton is Employee(s) and it redirects to kanban view by default, no matter how many employees a user / partner has. 9 out of 10 times a user / partner only has one linked employee, this change renames the label to 'Employee' and redirects to the form view if there is only one employee if there are more, the previous action is called linked upgrade: odoo/upgrade#4363 this closes odoo/odoo#111439 Signed-off-by: Kevin Baptiste <kba@odoo.com>
50 lines
1.9 KiB
Python
50 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import fields, models, _
|
|
from odoo.exceptions import AccessError
|
|
|
|
|
|
class Partner(models.Model):
|
|
_inherit = ['res.partner']
|
|
|
|
employee_ids = fields.One2many(
|
|
'hr.employee', 'address_home_id', string='Employees', groups="hr.group_hr_user",
|
|
help="Related employees based on their private address")
|
|
employees_count = fields.Integer(compute='_compute_employees_count', groups="hr.group_hr_user")
|
|
|
|
def name_get(self):
|
|
""" Override to allow an employee to see its private address in his profile.
|
|
This avoids to relax access rules on `res.parter` and to add an `ir.rule`.
|
|
(advantage in both security and performance).
|
|
Use a try/except instead of systematically checking to minimize the impact on performance.
|
|
"""
|
|
try:
|
|
return super(Partner, self).name_get()
|
|
except AccessError as e:
|
|
if len(self) == 1 and self in self.env.user.employee_ids.mapped('address_home_id'):
|
|
return super(Partner, self.sudo()).name_get()
|
|
raise e
|
|
|
|
def _compute_employees_count(self):
|
|
for partner in self:
|
|
partner.employees_count = len(partner.employee_ids)
|
|
|
|
def action_open_employees(self):
|
|
self.ensure_one()
|
|
if len(self.employee_ids) > 1:
|
|
return {
|
|
'name': _('Related Employees'),
|
|
'type': 'ir.actions.act_window',
|
|
'res_model': 'hr.employee',
|
|
'view_mode': 'form',
|
|
'domain': [('id', 'in', self.employee_ids.ids)],
|
|
}
|
|
return {
|
|
'name': _('Employee'),
|
|
'type': 'ir.actions.act_window',
|
|
'res_model': 'hr.employee',
|
|
'res_id': self.employee_ids.id,
|
|
'view_mode': 'form',
|
|
}
|