diff options
Diffstat (limited to 'addons/hr_org_chart/controllers/hr_org_chart.py')
| -rw-r--r-- | addons/hr_org_chart/controllers/hr_org_chart.py | 60 |
1 files changed, 45 insertions, 15 deletions
diff --git a/addons/hr_org_chart/controllers/hr_org_chart.py b/addons/hr_org_chart/controllers/hr_org_chart.py index 5729997636f..20f1c30047a 100644 --- a/addons/hr_org_chart/controllers/hr_org_chart.py +++ b/addons/hr_org_chart/controllers/hr_org_chart.py @@ -7,7 +7,23 @@ from odoo.http import request class HrOrgChartController(http.Controller): - _managers_level = 2 # FP request + _managers_level = 5 # FP request + + def _check_employee(self, employee_id): + if not employee_id: # to check + return None + employee_id = int(employee_id) + + Employee = request.env['hr.employee'] + # check and raise + if not Employee.check_access_rights('read', raise_exception=False): + return None + try: + Employee.browse(employee_id).check_access_rule('read') + except AccessError: + return None + else: + return Employee.browse(employee_id) def _prepare_employee_data(self, employee): job = employee.sudo().job_id @@ -23,32 +39,46 @@ class HrOrgChartController(http.Controller): @http.route('/hr/get_org_chart', type='json', auth='user') def get_org_chart(self, employee_id): - if not employee_id: # to check - return {} - employee_id = int(employee_id) - Employee = request.env['hr.employee'] - # check and raise - if not Employee.check_access_rights('read', raise_exception=False): - return {} - try: - Employee.browse(employee_id).check_access_rule('read') - except AccessError: + employee = self._check_employee(employee_id) + if not employee: # to check return {} - else: - employee = Employee.browse(employee_id) # compute employee data for org chart ancestors, current = request.env['hr.employee'], employee - while current.parent_id: + while current.parent_id and len(ancestors) < self._managers_level+1: ancestors += current.parent_id current = current.parent_id values = dict( self=self._prepare_employee_data(employee), - managers=[self._prepare_employee_data(ancestor) for idx, ancestor in enumerate(ancestors) if idx < self._managers_level], + managers=[ + self._prepare_employee_data(ancestor) + for idx, ancestor in enumerate(ancestors) + if idx < self._managers_level + ], managers_more=len(ancestors) > self._managers_level, children=[self._prepare_employee_data(child) for child in employee.child_ids], ) values['managers'].reverse() return values + + @http.route('/hr/get_subordinates', type='json', auth='user') + def get_subordinates(self, employee_id, subordinates_type=None): + """ + Get employee subordinates. + Possible values for 'subordinates_type': + - 'indirect' + - 'direct' + """ + + employee = self._check_employee(employee_id) + if not employee: # to check + return {} + + if subordinates_type == 'direct': + return employee.child_ids.ids + elif subordinates_type == 'indirect': + return (employee.subordinate_ids - employee.child_ids).ids + else: + return employee.subordinate_ids.ids |
