From 39efb6116a66df7cffb19082ff61e475d7dce247 Mon Sep 17 00:00:00 2001 From: sofiagvaladze Date: Fri, 23 Sep 2022 12:14:56 +0000 Subject: [PATCH] [FIX] hr_skills: Skill history report Prior, by default Skill history report goes to stacked view. Which is not informative for the kind of information that is displayed. task - 2993831 closes odoo/odoo#101656 X-original-commit: 1951b56d91dc17ec8d81257e8c431f7a24420e2b Signed-off-by: Kevin Baptiste --- addons/hr_skills/models/hr_employee_skill.py | 48 ++++++++++++------- .../views/hr_employee_skill_log_views.xml | 5 +- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/addons/hr_skills/models/hr_employee_skill.py b/addons/hr_skills/models/hr_employee_skill.py index b653b6c89e4..5a63efd7832 100644 --- a/addons/hr_skills/models/hr_employee_skill.py +++ b/addons/hr_skills/models/hr_employee_skill.py @@ -4,6 +4,7 @@ from odoo import api, fields, models, _ from odoo.exceptions import ValidationError +from collections import defaultdict class EmployeeSkill(models.Model): _name = 'hr.employee.skill' @@ -50,24 +51,37 @@ class EmployeeSkill(models.Model): def _create_logs(self): today = fields.Date.context_today(self) + employee_skills = self.env['hr.employee.skill'].search([ + ('employee_id', 'in', self.employee_id.ids) + ]) + employee_skill_logs = self.env['hr.employee.skill.log'].search([ + ('employee_id', 'in', self.employee_id.ids), + ]) + + skills_by_employees = defaultdict(lambda: self.env['hr.employee.skill']) + for skill in employee_skills: + skills_by_employees[skill.employee_id.id] |= skill + + logs_by_employees = defaultdict(lambda: self.env['hr.employee.skill.log']) + for log in employee_skill_logs: + logs_by_employees[log.employee_id.id] |= log + skill_to_create_vals = [] - for employee_skill in self: - existing_log = self.env['hr.employee.skill.log'].search([ - ('employee_id', '=', employee_skill.employee_id.id), - ('department_id', '=', employee_skill.employee_id.department_id.id), - ('skill_id', '=', employee_skill.skill_id.id), - ('date', '=', today), - ]) - if existing_log: - existing_log.write({'skill_level_id': employee_skill.skill_level_id.id}) - else: - skill_to_create_vals.append({ - 'employee_id': employee_skill.employee_id.id, - 'skill_id': employee_skill.skill_id.id, - 'skill_level_id': employee_skill.skill_level_id.id, - 'department_id': employee_skill.employee_id.department_id.id, - 'skill_type_id': employee_skill.skill_type_id.id, - }) + for employee in skills_by_employees: + employee_logs = logs_by_employees[employee] + for employee_skill in skills_by_employees[employee]: + existing_log = employee_logs.filtered(lambda l: l.department_id == employee_skill.employee_id.department_id and l.skill_id == employee_skill.skill_id and l.date == today) + if existing_log: + existing_log.write({'skill_level_id': employee_skill.skill_level_id.id}) + else: + skill_to_create_vals.append({ + 'employee_id': employee_skill.employee_id.id, + 'skill_id': employee_skill.skill_id.id, + 'skill_level_id': employee_skill.skill_level_id.id, + 'department_id': employee_skill.employee_id.department_id.id, + 'skill_type_id': employee_skill.skill_type_id.id, + }) + if skill_to_create_vals: self.env['hr.employee.skill.log'].create(skill_to_create_vals) diff --git a/addons/hr_skills/views/hr_employee_skill_log_views.xml b/addons/hr_skills/views/hr_employee_skill_log_views.xml index 5459d205c31..5ceefc5136e 100644 --- a/addons/hr_skills/views/hr_employee_skill_log_views.xml +++ b/addons/hr_skills/views/hr_employee_skill_log_views.xml @@ -4,9 +4,8 @@ hr.employee.skill.log.view.graph hr.employee.skill.log - + - @@ -17,7 +16,7 @@ hr.employee.skill.log.view.graph hr.employee.skill.log - +