1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
class Skill(models.Model):
_name = 'hr.skill'
_description = "Skill"
name = fields.Char(required=True)
skill_type_id = fields.Many2one('hr.skill.type', ondelete='cascade')
class EmployeeSkill(models.Model):
_name = 'hr.employee.skill'
_description = "Skill level for an employee"
_rec_name = 'skill_id'
_order = "skill_level_id"
employee_id = fields.Many2one('hr.employee', required=True, ondelete='cascade')
skill_id = fields.Many2one('hr.skill', required=True)
skill_level_id = fields.Many2one('hr.skill.level', required=True)
skill_type_id = fields.Many2one('hr.skill.type', required=True)
level_progress = fields.Integer(related='skill_level_id.level_progress')
_sql_constraints = [
('_unique_skill', 'unique (employee_id, skill_id)', "Two levels for the same skill is not allowed"),
]
@api.constrains('skill_id', 'skill_type_id')
def _check_skill_type(self):
for record in self:
if record.skill_id not in record.skill_type_id.skill_ids:
raise ValidationError(_("The skill %(name)s and skill type %(type)s doesn't match", name=record.skill_id.name, type=record.skill_type_id.name))
@api.constrains('skill_type_id', 'skill_level_id')
def _check_skill_level(self):
for record in self:
if record.skill_level_id not in record.skill_type_id.skill_level_ids:
raise ValidationError(_("The skill level %(level)s is not valid for skill type: %(type)s", level=record.skill_level_id.name, type=record.skill_type_id.name))
class SkillLevel(models.Model):
_name = 'hr.skill.level'
_description = "Skill Level"
_order = "level_progress desc"
skill_type_id = fields.Many2one('hr.skill.type', ondelete='cascade')
name = fields.Char(required=True)
level_progress = fields.Integer(string="Progress", help="Progress from zero knowledge (0%) to fully mastered (100%).")
class SkillType(models.Model):
_name = 'hr.skill.type'
_description = "Skill Type"
name = fields.Char(required=True)
skill_ids = fields.One2many('hr.skill', 'skill_type_id', string="Skills")
skill_level_ids = fields.One2many('hr.skill.level', 'skill_type_id', string="Levels")
|