diff --git a/addons/hr_skills/__init__.py b/addons/hr_skills/__init__.py
index dc5e6b693d1..2609681a938 100644
--- a/addons/hr_skills/__init__.py
+++ b/addons/hr_skills/__init__.py
@@ -2,3 +2,4 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
+from . import report
diff --git a/addons/hr_skills/__manifest__.py b/addons/hr_skills/__manifest__.py
index 4883306904c..45cc3ba6575 100644
--- a/addons/hr_skills/__manifest__.py
+++ b/addons/hr_skills/__manifest__.py
@@ -20,6 +20,7 @@ This module introduces skills and resumé management for employees.
'security/hr_skills_security.xml',
'views/hr_views.xml',
'data/hr_resume_data.xml',
+ 'report/hr_employee_skill_report_views.xml',
],
'demo': [
'data/hr_resume_demo.xml',
diff --git a/addons/hr_skills/report/__init__.py b/addons/hr_skills/report/__init__.py
new file mode 100644
index 00000000000..48e5c625b0d
--- /dev/null
+++ b/addons/hr_skills/report/__init__.py
@@ -0,0 +1,3 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import hr_employee_skill_report
diff --git a/addons/hr_skills/report/hr_employee_skill_report.py b/addons/hr_skills/report/hr_employee_skill_report.py
new file mode 100644
index 00000000000..45efe4a4585
--- /dev/null
+++ b/addons/hr_skills/report/hr_employee_skill_report.py
@@ -0,0 +1,40 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models, tools
+
+class HrEmployeeSkillReport(models.BaseModel):
+ _auto = False
+ _name = 'hr.employee.skill.report'
+ _description = 'Employee Skills Report'
+ _order = 'employee_id, level_progress desc'
+
+ id = fields.Id()
+ display_name = fields.Char(related='employee_id.name')
+ employee_id = fields.Many2one('hr.employee', readonly=True)
+ company_id = fields.Many2one('res.company', readonly=True)
+ department_id = fields.Many2one('hr.department', readonly=True)
+
+ skill_id = fields.Many2one('hr.skill', readonly=True)
+ skill_type_id = fields.Many2one('hr.skill.type', readonly=True)
+ skill_level = fields.Char(readonly=True)
+ level_progress = fields.Float(readonly=True, group_operator='avg')
+
+ def init(self):
+ tools.drop_view_if_exists(self.env.cr, self._table)
+
+ self.env.cr.execute("""
+ CREATE OR REPLACE VIEW %s AS (
+ SELECT
+ row_number() OVER () AS id,
+ e.id AS employee_id,
+ e.company_id AS company_id,
+ e.department_id AS department_id,
+ s.skill_id AS skill_id,
+ s.skill_type_id AS skill_type_id,
+ sl.level_progress / 100.0 AS level_progress,
+ sl.name AS skill_level
+ FROM hr_employee e
+ LEFT OUTER JOIN hr_employee_skill s ON e.id = s.employee_id
+ LEFT OUTER JOIN hr_skill_level sl ON sl.id = s.skill_level_id
+ )
+ """ % (self._table, ))
diff --git a/addons/hr_skills/report/hr_employee_skill_report_views.xml b/addons/hr_skills/report/hr_employee_skill_report_views.xml
new file mode 100644
index 00000000000..6b74d88c90d
--- /dev/null
+++ b/addons/hr_skills/report/hr_employee_skill_report_views.xml
@@ -0,0 +1,66 @@
+
+
+
+ hr.employee.skill.report
+
+
+
+
+
+
+
+
+
+
+
+ hr.employee.skill.report
+
+
+
+
+
+
+
+
+
+
+
+
+ hr.employee.skill.report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Employee Skills
+ hr.employee.skill.report
+
+ tree,pivot
+ {
+ 'search_default_employee': 1,
+ 'search_default_employees_with_skills': 1,
+ }
+
+
+
+
diff --git a/addons/hr_skills/security/hr_skills_security.xml b/addons/hr_skills/security/hr_skills_security.xml
index e82d0008bfc..ee2823c6a09 100644
--- a/addons/hr_skills/security/hr_skills_security.xml
+++ b/addons/hr_skills/security/hr_skills_security.xml
@@ -50,4 +50,10 @@
+
+
+ Employee Skill Report: Multi-Company Rule
+
+ ['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]
+
diff --git a/addons/hr_skills/security/ir.model.access.csv b/addons/hr_skills/security/ir.model.access.csv
index 1e5dd935c4f..fe696ae6dfc 100644
--- a/addons/hr_skills/security/ir.model.access.csv
+++ b/addons/hr_skills/security/ir.model.access.csv
@@ -11,3 +11,4 @@ access_hr_skill,hr.skill,model_hr_skill,hr.group_hr_user,1,1,1,1
access_hr_skill_employee,hr.skill.employee,model_hr_skill,base.group_user,1,0,0,0
access_hr_employee_skill,hr.employee.skill,model_hr_employee_skill,hr.group_hr_user,1,1,1,1
access_hr_employee_skill_employee,hr.employee.skill,model_hr_employee_skill,base.group_user,1,1,1,1
+access_hr_employee_skill_report,hr.employee.skill.report,model_hr_employee_skill_report,hr.group_hr_user,1,0,0,0