diff --git a/hr_timesheet_sheet_validators/models/__init__.py b/hr_timesheet_sheet_validators/models/__init__.py index 5858a8189..30d843c02 100644 --- a/hr_timesheet_sheet_validators/models/__init__.py +++ b/hr_timesheet_sheet_validators/models/__init__.py @@ -1 +1,2 @@ from . import hr_timesheet_sheet +from . import hr_employee diff --git a/hr_timesheet_sheet_validators/models/hr_employee.py b/hr_timesheet_sheet_validators/models/hr_employee.py new file mode 100644 index 000000000..9a748f7e1 --- /dev/null +++ b/hr_timesheet_sheet_validators/models/hr_employee.py @@ -0,0 +1,33 @@ +from odoo import api, models + + +class HrEmployee(models.Model): + _inherit = "hr.employee" + + @api.multi + def get_validator_user_ids(self): + """Return the list of user_ids that can validate a given timesheet.""" + self.ensure_one() + for employee in self: + users = [] + if (employee and + employee.parent_id and + employee.parent_id.user_id): + users.append( + employee.parent_id.user_id.id) + if (employee.department_id and + employee.department_id.manager_id and + employee.department_id.manager_id.user_id and + employee.department_id.manager_id.user_id.id != + self.env.uid): + users.append( + employee.department_id.manager_id.user_id.id) + elif (employee.department_id and + employee.department_id.parent_id and + employee.department_id.parent_id.manager_id and + employee.department_id.parent_id.manager_id.user_id and + employee.department_id.parent_id.manager_id.user_id.id != + self.env.uid): + users.append( + employee.department_id.manager_id.user_id.id) + return list(set(users)) if users else [] diff --git a/hr_timesheet_sheet_validators/models/hr_timesheet_sheet.py b/hr_timesheet_sheet_validators/models/hr_timesheet_sheet.py index 7ecc29534..f0b880c8f 100644 --- a/hr_timesheet_sheet_validators/models/hr_timesheet_sheet.py +++ b/hr_timesheet_sheet_validators/models/hr_timesheet_sheet.py @@ -22,62 +22,22 @@ def _default_department(self): default=_default_department, ) - @api.multi - def _get_validator_user_ids(self): - """Return the list of user_ids that can validate a given timesheet.""" - self.ensure_one() - for timesheet in self: - users = [] - if ( - timesheet.employee_id - and timesheet.employee_id.parent_id - and timesheet.employee_id.parent_id.user_id - ): - users.append(timesheet.employee_id.parent_id.user_id.id) - if ( - timesheet.department_id - and timesheet.department_id.manager_id - and timesheet.department_id.manager_id.user_id - and timesheet.department_id.manager_id.user_id.id - != self.env.uid - ): - users.append(timesheet.department_id.manager_id.user_id.id) - elif ( - timesheet.department_id - and timesheet.department_id.parent_id - and timesheet.department_id.parent_id.manager_id - and timesheet.department_id.parent_id.manager_id.user_id - and timesheet.department_id.parent_id.manager_id.user_id.id - != self.env.uid - ): - users.append(timesheet.department_id.manager_id.user_id.id) - return list(set(users)) if users else [] - - @api.multi - def action_timesheet_confirm(self): - for sheet in self: - validators = sheet._get_validator_user_ids() - sheet.write({"validator_user_ids": [(6, 0, validators)]}) - return super(HrTimesheetSheet, self).action_timesheet_confirm() + @api.model + def create(self, vals): + employee_id = vals.get('employee_id', False) + if employee_id: + employee = self.env['hr.employee'].browse(employee_id) + validators = employee.get_validator_user_ids() + vals['validator_user_ids'] = [( + 4, user_id) for user_id in validators] + return super(HrTimesheetSheet, self).create(vals) @api.multi def _check_authorised_validator(self): - group_hr_manager = self.env.ref("hr.group_hr_manager") - group_hr_user = self.env.ref("hr.group_hr_user") for timesheet in self: - if group_hr_manager and self.env.uid in group_hr_manager.users.ids: - continue - - if group_hr_user and self.env.uid in group_hr_user.users.ids: - continue - if self.env.uid not in timesheet.validator_user_ids.ids: - raise UserError( - _( - "You are not authorised to approve or " - "refuse this Timesheet." - ) - ) + raise UserError(_('You are not authorised to approve or ' + 'refuse this Timesheet.')) @api.multi def action_timesheet_draft(self): diff --git a/hr_timesheet_sheet_validators/security/hr_timesheet_sheet_security.xml b/hr_timesheet_sheet_validators/security/hr_timesheet_sheet_security.xml index b46dc089b..c6b290b11 100644 --- a/hr_timesheet_sheet_validators/security/hr_timesheet_sheet_security.xml +++ b/hr_timesheet_sheet_validators/security/hr_timesheet_sheet_security.xml @@ -17,5 +17,13 @@ + + HR Validator + + + + See timesheet validators + +