From 865e6b66b7b7241391b118d1aafe479a59ad72c9 Mon Sep 17 00:00:00 2001 From: ahenriquez Date: Wed, 23 Oct 2019 13:59:41 +0200 Subject: [PATCH] [FIX]hr_timesheet_sheet_validators move validation to employee side --- .../models/__init__.py | 1 + .../models/hr_employee.py | 32 +++++++++++ .../models/hr_timesheet_sheet.py | 55 ++++--------------- .../security/hr_timesheet_sheet_security.xml | 8 +++ 4 files changed, 51 insertions(+), 45 deletions(-) create mode 100644 hr_timesheet_sheet_validators/models/hr_employee.py 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..495b7cea8 --- /dev/null +++ b/hr_timesheet_sheet_validators/models/hr_employee.py @@ -0,0 +1,32 @@ +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..787c75985 100644 --- a/hr_timesheet_sheet_validators/models/hr_timesheet_sheet.py +++ b/hr_timesheet_sheet_validators/models/hr_timesheet_sheet.py @@ -22,55 +22,20 @@ 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( _( 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 + +