mirror of
https://github.com/bringout/oca-ocb-hr.git
synced 2026-04-26 19:12:00 +02:00
48 lines
2.1 KiB
Python
48 lines
2.1 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
from collections import defaultdict
|
|
from odoo import fields, models
|
|
|
|
|
|
class HrEmployeeSkill(models.Model):
|
|
_name = 'hr.employee.skill'
|
|
_inherit = 'hr.individual.skill.mixin'
|
|
_description = "Skill level for employee"
|
|
_order = "skill_type_id, skill_level_id"
|
|
_rec_name = "skill_id"
|
|
|
|
employee_id = fields.Many2one('hr.employee', required=True, index=True, ondelete='cascade')
|
|
|
|
def _linked_field_name(self):
|
|
return 'employee_id'
|
|
|
|
def get_current_skills_by_employee(self):
|
|
emp_skill_grouped = dict(self.grouped(lambda emp_skill: (emp_skill.employee_id, emp_skill.skill_id)))
|
|
result_dict = defaultdict(lambda: self.env['hr.employee.skill'])
|
|
for (employee, skill), emp_skills in emp_skill_grouped.items():
|
|
filtered_emp_skill = emp_skills.filtered(
|
|
lambda employee_skill: not employee_skill.valid_to or employee_skill.valid_to >= fields.Date.today()
|
|
)
|
|
if skill.skill_type_id.is_certification and not filtered_emp_skill:
|
|
expired_skills = (emp_skills - filtered_emp_skill)
|
|
expired_skills_group_by_valid_to = expired_skills.grouped('valid_to')
|
|
max_valid_to = max(expired_skills.mapped('valid_to'))
|
|
result_dict[employee.id] += expired_skills_group_by_valid_to[max_valid_to]
|
|
continue
|
|
result_dict[employee.id] += filtered_emp_skill
|
|
return result_dict
|
|
|
|
def open_hr_employee_skill_modal(self):
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'res_model': 'hr.employee.skill',
|
|
'res_id': self.id if self else False,
|
|
'target': 'new',
|
|
'context': {
|
|
'show_employee': True,
|
|
'default_skill_type_id': self.env['hr.skill.type'].search([('is_certification', '=', True)], limit=1).id
|
|
},
|
|
'views': [(self.env.ref('hr_skills.employee_skill_view_inherit_certificate_form').id, 'form')],
|
|
}
|
|
|
|
def action_save(self):
|
|
return {'type': 'ir.actions.act_window_close'}
|