Odoo18-Base/addons/hr/models/res_partner.py
2025-01-06 10:57:38 +07:00

66 lines
2.5 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models, _
class Partner(models.Model):
_inherit = ['res.partner']
employee_ids = fields.One2many(
'hr.employee', 'work_contact_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 _compute_employees_count(self):
for partner in self:
partner.employees_count = len(partner.sudo().employee_ids.filtered(lambda e: e.company_id in self.env.companies))
def action_open_employees(self):
self.ensure_one()
if self.employees_count > 1:
return {
'name': _('Related Employees'),
'type': 'ir.actions.act_window',
'res_model': 'hr.employee',
'view_mode': 'kanban',
'domain': [('id', 'in', self.employee_ids.ids),
('company_id', 'in', self.env.companies.ids)],
}
return {
'name': _('Employee'),
'type': 'ir.actions.act_window',
'res_model': 'hr.employee',
'res_id': self.employee_ids.filtered(lambda e: e.company_id in self.env.companies).id,
'view_mode': 'form',
}
def _get_all_addr(self):
self.ensure_one()
employee_id = self.env['hr.employee'].search(
[('id', 'in', self.employee_ids.ids)],
limit=1,
)
if not employee_id:
return super()._get_all_addr()
pstl_addr = {
'contact_type': 'employee',
'street': employee_id.private_street,
'zip': employee_id.private_zip,
'city': employee_id.private_city,
'country': employee_id.private_country_id.code,
}
return [pstl_addr] + super()._get_all_addr()
class ResPartnerBank(models.Model):
_inherit = ['res.partner.bank']
def _compute_display_name(self):
account_employee = self.browse()
if not self.env.user.has_group('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()