|
|
is_hr_admin = (
self.env.user.has_group('hr_expense.group_hr_expense_manager')
or self.env.user.has_group('base.group_system')
)
is_approver = self.env.user.has_group('hr_expense.group_hr_expense_user')
for sheet in self:
if sheet.state not in {'draft', 'submit', 'approve'}:
# Not editable
sheet.is_editable = False
continue
if is_hr_admin or self.env.su:
# Administrator-level users are not restricted
sheet.is_editable = True
continue
employee = sheet.employee_id
is_own_sheet = employee.user_id == self.env.user
if is_own_sheet and sheet.state == 'draft':
# Anyone can edit their own draft sheet
sheet.is_editable = True
continue
managers = employee.sudo()._get_expense_managers()
if is_approver:
managers |= self.env.user
if not is_own_sheet and self.env.user in managers:
# If Approver-level or designated manager, can edit other people sheet
sheet.is_editable = True
continue
sheet.is_editable = False
|
|