Skip to content

Commit

Permalink
[IMP] hr_org_chart: define hierarchy view for hr.employee model
Browse files Browse the repository at this point in the history
This commit defines a hierarchy view for `hr.employee` model.

task-3376776
  • Loading branch information
xavierbol committed Oct 16, 2023
1 parent 03ce251 commit 95e0149
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 0 deletions.
16 changes: 16 additions & 0 deletions addons/hr_org_chart/models/hr_org_chart_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ class HrEmployeeBase(models.AbstractModel):
'Indirect Subordinates Count',
compute='_compute_subordinates', recursive=True, store=False,
compute_sudo=True)
department_color = fields.Integer("Department Color", related="department_id.color")
child_count = fields.Integer(
'Direct Subordinates Count',
compute='_compute_child_count', recursive=True,
compute_sudo=True,
)

def _get_subordinates(self, parents=None):
"""
Expand Down Expand Up @@ -56,3 +62,13 @@ def _search_is_subordinate(self, operator, value):
if not self.env.user.employee_id.subordinate_ids:
return [('id', operator, self.env.user.employee_id.id)]
return (['!'] if operator == '!=' else []) + [('id', 'in', self.env.user.employee_id.subordinate_ids.ids)]

def _compute_child_count(self):
employee_read_group = self._read_group(
[('parent_id', 'in', self.ids)],
['parent_id'],
['id:count'],
)
child_count_per_parent_id = dict(employee_read_group)
for employee in self:
employee.child_count = child_count_per_parent_id.get(employee._origin, 0)
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/** @odoo-module **/

import { Avatar } from "@mail/views/web/fields/avatar/avatar";

import { HierarchyRenderer } from "../hierarchy/hierarchy_renderer";

export class HrEmployeeHierarchyRenderer extends HierarchyRenderer {
static template = "hr_org_chart.HrEmployeeHierarchyRenderer";
static components = {
...HierarchyRenderer.components,
Avatar,
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
.o_hierarchy_renderer {
.o_hierarchy_parent_node_container {
.o_avatar > span {
width: 100% !important;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8" ?>
<templates>

<t t-name="hr_org_chart.HrEmployeeHierarchyRenderer" t-inherit="hr_org_chart.HierarchyRenderer">
<xpath expr="//div[hasclass('o_hierarchy_parent_node_container')]/span" position="replace">
<Avatar
resModel="row.parentNode.model.resModel"
resId="row.parentNode.resId"
displayName="row.parentNode.data.name"
/>
</xpath>
</t>

</templates>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/** @odoo-module **/

import { registry } from "@web/core/registry";
import { hierarchyView } from "../hierarchy/hierarchy_view";
import { HrEmployeeHierarchyRenderer } from "./hr_employee_hierarchy_renderer";

export const hrEmployeeHierarchyView = {
...hierarchyView,
Renderer: HrEmployeeHierarchyRenderer,
};

registry.category("views").add("hr_employee_hierarchy", hrEmployeeHierarchyView);
34 changes: 34 additions & 0 deletions addons/hr_org_chart/views/hr_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,36 @@
</field>
</record>

<record id="hr_employee_hierarchy_view" model="ir.ui.view">
<field name="name">hr.employee.view.hierarchy</field>
<field name="model">hr.employee</field>
<field name="arch" type="xml">
<hierarchy child_field="child_ids" js_class="hr_employee_hierarchy">
<field name="name" />
<field name="job_id" />
<field name="department_color" />
<field name="hr_icon_display" />
<field name="department_id" />
<templates>
<t t-name="hierarchy-box">
<div t-attf-class="o_hierarchy_node_header d-flex justify-content-center pb-4 o_hierarchy_node_color_{{ record.department_color.raw_value }}"
t-att-title="record.department_id.value"
>
<field name="image_1024" preview_image="image_128" options="{'zoom': true, 'zoom_delay': 1000}" widget="background_image" />
</div>
<div class="o_hierarchy_node_body d-flex flex-column text-center">
<div class="w-100 position-relative">
<field class="fw-bold" name="name" />
<field name="hr_icon_display" class="d-flex align-items-end o_employee_availability" widget="hr_presence_status" />
</div>
<field name="job_id" />
</div>
</t>
</templates>
</hierarchy>
</field>
</record>

<record id="hr_employee_public_view_form_inherit_org_chart" model="ir.ui.view">
<field name="name">hr.employee.public.view.form.inherit.org_chart</field>
<field name="model">hr.employee.public</field>
Expand Down Expand Up @@ -41,4 +71,8 @@
</div>
</field>
</record>

<record id="hr.open_view_employee_list_my" model="ir.actions.act_window">
<field name="view_mode">kanban,tree,form,activity,graph,pivot,hierarchy</field>
</record>
</odoo>

0 comments on commit 95e0149

Please sign in to comment.