summaryrefslogtreecommitdiff
path: root/addons/hr_org_chart/controllers/hr_org_chart.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/hr_org_chart/controllers/hr_org_chart.py')
-rw-r--r--addons/hr_org_chart/controllers/hr_org_chart.py60
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