Skip to content

Commit

Permalink
[FIX]hr_timesheet_sheet_validators move validation to employee side
Browse files Browse the repository at this point in the history
  • Loading branch information
AaronHForgeFlow committed Oct 23, 2019
1 parent 71352f3 commit 865e6b6
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 45 deletions.
1 change: 1 addition & 0 deletions hr_timesheet_sheet_validators/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from . import hr_timesheet_sheet
from . import hr_employee
32 changes: 32 additions & 0 deletions hr_timesheet_sheet_validators/models/hr_employee.py
Original file line number Diff line number Diff line change
@@ -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 []
55 changes: 10 additions & 45 deletions hr_timesheet_sheet_validators/models/hr_timesheet_sheet.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
_(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,13 @@
<field name="groups" eval="[(4,ref('hr.group_hr_user'))]"/>
</record>

<record id="group_hr_validator" model="res.groups">
<field name="name">HR Validator</field>
<field name="category_id" ref="base.module_category_hidden"/>
<field name="implied_ids" eval="[(4, ref('hr.group_hr_manager'))]"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
<field name="comment">See timesheet validators</field>
</record>

</data>
</odoo>

0 comments on commit 865e6b6

Please sign in to comment.