diff options
Diffstat (limited to 'addons/hr_expense/models/hr_employee.py')
| -rw-r--r-- | addons/hr_expense/models/hr_employee.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/addons/hr_expense/models/hr_employee.py b/addons/hr_expense/models/hr_employee.py new file mode 100644 index 00000000..4888c3b3 --- /dev/null +++ b/addons/hr_expense/models/hr_employee.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models, api + + +class Employee(models.Model): + _inherit = 'hr.employee' + + def _group_hr_expense_user_domain(self): + # We return the domain only if the group exists for the following reason: + # When a group is created (at module installation), the `res.users` form view is + # automatically modifiedto add application accesses. When modifiying the view, it + # reads the related field `expense_manager_id` of `res.users` and retrieve its domain. + # This is a problem because the `group_hr_expense_user` record has already been created but + # not its associated `ir.model.data` which makes `self.env.ref(...)` fail. + group = self.env.ref('hr_expense.group_hr_expense_team_approver', raise_if_not_found=False) + return [('groups_id', 'in', group.ids)] if group else [] + + expense_manager_id = fields.Many2one( + 'res.users', string='Expense', + domain=_group_hr_expense_user_domain, + compute='_compute_expense_manager', store=True, readonly=False, + help='Select the user responsible for approving "Expenses" of this employee.\n' + 'If empty, the approval is done by an Administrator or Approver (determined in settings/users).') + + @api.depends('parent_id') + def _compute_expense_manager(self): + for employee in self: + previous_manager = employee._origin.parent_id.user_id + manager = employee.parent_id.user_id + if manager and manager.has_group('hr_expense.group_hr_expense_user') and (employee.expense_manager_id == previous_manager or not employee.expense_manager_id): + employee.expense_manager_id = manager + elif not employee.expense_manager_id: + employee.expense_manager_id = False + + +class EmployeePublic(models.Model): + _inherit = 'hr.employee.public' + + expense_manager_id = fields.Many2one('res.users', readonly=True) + + +class User(models.Model): + _inherit = ['res.users'] + + expense_manager_id = fields.Many2one(related='employee_id.expense_manager_id', readonly=False) + + def __init__(self, pool, cr): + """ Override of __init__ to add access rights. + Access rights are disabled by default, but allowed + on some specific fields defined in self.SELF_{READ/WRITE}ABLE_FIELDS. + """ + init_res = super(User, self).__init__(pool, cr) + # duplicate list to avoid modifying the original reference + type(self).SELF_READABLE_FIELDS = type(self).SELF_READABLE_FIELDS + ['expense_manager_id'] + return init_res |
