diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py index 5ff2a65164f..07606eb5e4c 100644 --- a/addons/hr_expense/models/hr_expense.py +++ b/addons/hr_expense/models/hr_expense.py @@ -782,6 +782,7 @@ class HrExpenseSheet(models.Model): department_id = fields.Many2one('hr.department', compute='_compute_from_employee_id', store=True, readonly=False, copy=False, string='Department', states={'post': [('readonly', True)], 'done': [('readonly', True)]}) is_multiple_currency = fields.Boolean("Handle lines with different currencies", compute='_compute_is_multiple_currency') can_reset = fields.Boolean('Can Reset', compute='_compute_can_reset') + can_approve = fields.Boolean('Can Approve', compute='_compute_can_approve') _sql_constraints = [ ('journal_id_required_posted', "CHECK((state IN ('post', 'done') AND journal_id IS NOT NULL) OR (state NOT IN ('post', 'done')))", 'The journal must be set on posted expense'), @@ -822,6 +823,13 @@ class HrExpenseSheet(models.Model): for sheet in self: sheet.can_reset = is_expense_user if is_expense_user else sheet.employee_id.user_id == self.env.user + @api.depends_context('uid') + def _compute_can_approve(self): + is_approver = self.user_has_groups('hr_expense.group_hr_expense_team_approver, hr_expense.group_hr_expense_user') + is_manager = self.user_has_groups('hr_expense.group_hr_expense_manager') + for sheet in self: + sheet.can_approve = is_manager or (is_approver and sheet.employee_id.user_id != self.env.user) + @api.depends('employee_id') def _compute_from_employee_id(self): for sheet in self: diff --git a/addons/hr_expense/views/hr_expense_views.xml b/addons/hr_expense/views/hr_expense_views.xml index 8d93d79f21a..e003a92acfe 100644 --- a/addons/hr_expense/views/hr_expense_views.xml +++ b/addons/hr_expense/views/hr_expense_views.xml @@ -566,9 +566,14 @@
+