diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/hr_skills/models | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/hr_skills/models')
| -rw-r--r-- | addons/hr_skills/models/__init__.py | 6 | ||||
| -rw-r--r-- | addons/hr_skills/models/hr_resume.py | 63 | ||||
| -rw-r--r-- | addons/hr_skills/models/hr_skills.py | 61 | ||||
| -rw-r--r-- | addons/hr_skills/models/res_users.py | 25 |
4 files changed, 155 insertions, 0 deletions
diff --git a/addons/hr_skills/models/__init__.py b/addons/hr_skills/models/__init__.py new file mode 100644 index 00000000..5d64bc28 --- /dev/null +++ b/addons/hr_skills/models/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import hr_resume +from . import hr_skills +from . import res_users diff --git a/addons/hr_skills/models/hr_resume.py b/addons/hr_skills/models/hr_resume.py new file mode 100644 index 00000000..79e26312 --- /dev/null +++ b/addons/hr_skills/models/hr_resume.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models + + +class Employee(models.Model): + _inherit = 'hr.employee' + + resume_line_ids = fields.One2many('hr.resume.line', 'employee_id', string="Resumé lines") + employee_skill_ids = fields.One2many('hr.employee.skill', 'employee_id', string="Skills") + + @api.model_create_multi + def create(self, vals_list): + res = super(Employee, self).create(vals_list) + resume_lines_values = [] + for employee in res: + line_type = self.env.ref('hr_skills.resume_type_experience', raise_if_not_found=False) + resume_lines_values.append({ + 'employee_id': employee.id, + 'name': employee.company_id.name or '', + 'date_start': employee.create_date.date(), + 'description': employee.job_title or '', + 'line_type_id': line_type and line_type.id, + }) + self.env['hr.resume.line'].create(resume_lines_values) + return res + + +class EmployeePublic(models.Model): + _inherit = 'hr.employee.public' + + resume_line_ids = fields.One2many('hr.resume.line', 'employee_id', string="Resumé lines") + employee_skill_ids = fields.One2many('hr.employee.skill', 'employee_id', string="Skills") + + +class ResumeLine(models.Model): + _name = 'hr.resume.line' + _description = "Resumé line of an employee" + _order = "line_type_id, date_end desc, date_start desc" + + employee_id = fields.Many2one('hr.employee', required=True, ondelete='cascade') + name = fields.Char(required=True) + date_start = fields.Date(required=True) + date_end = fields.Date() + description = fields.Text(string="Description") + line_type_id = fields.Many2one('hr.resume.line.type', string="Type") + + # Used to apply specific template on a line + display_type = fields.Selection([('classic', 'Classic')], string="Display Type", default='classic') + + _sql_constraints = [ + ('date_check', "CHECK ((date_start <= date_end OR date_end = NULL))", "The start date must be anterior to the end date."), + ] + + +class ResumeLineType(models.Model): + _name = 'hr.resume.line.type' + _description = "Type of a resumé line" + _order = "sequence" + + name = fields.Char(required=True) + sequence = fields.Integer('Sequence', default=10) diff --git a/addons/hr_skills/models/hr_skills.py b/addons/hr_skills/models/hr_skills.py new file mode 100644 index 00000000..759607a8 --- /dev/null +++ b/addons/hr_skills/models/hr_skills.py @@ -0,0 +1,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") diff --git a/addons/hr_skills/models/res_users.py b/addons/hr_skills/models/res_users.py new file mode 100644 index 00000000..03aab996 --- /dev/null +++ b/addons/hr_skills/models/res_users.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. +from odoo import fields, models + + +class User(models.Model): + _inherit = ['res.users'] + + resume_line_ids = fields.One2many(related='employee_id.resume_line_ids', readonly=False) + employee_skill_ids = fields.One2many(related='employee_id.employee_skill_ids', readonly=False) + + def __init__(self, pool, cr): + """ Override of __init__ to add access rights. + Access rights are disabled by default, but allowed + on some specific fields defined in self.SELF_{READ/WRITE}ABLE_FIELDS. + """ + hr_skills_fields = [ + 'resume_line_ids', + 'employee_skill_ids', + ] + init_res = super(User, self).__init__(pool, cr) + # duplicate list to avoid modifying the original reference + type(self).SELF_READABLE_FIELDS = type(self).SELF_READABLE_FIELDS + hr_skills_fields + type(self).SELF_WRITEABLE_FIELDS = type(self).SELF_WRITEABLE_FIELDS + hr_skills_fields + return init_res |
