# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import api, 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() return { 'name': _('Related Employees'), 'type': 'ir.actions.act_window', 'res_model': 'hr.employee', 'view_mode': 'kanban,tree,form', 'domain': [('id', 'in', self.employee_ids.ids)], } class ResPartnerBank(models.Model): _inherit = ['res.partner.bank'] @api.depends_context('uid') def _compute_display_name(self): account_employee = self.browse() if not self.user_has_groups('hr.group_hr_user'): account_employee = self.sudo().filtered("partner_id.employee_ids") for account in account_employee: account.sudo(self.env.su).display_name = \ account.acc_number[:2] + "*" * len(account.acc_number[2:-4]) + account.acc_number[-4:] super(ResPartnerBank, self - account_employee)._compute_display_name()