summaryrefslogtreecommitdiff
path: root/addons/hr_skills/models
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/hr_skills/models
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/hr_skills/models')
-rw-r--r--addons/hr_skills/models/__init__.py6
-rw-r--r--addons/hr_skills/models/hr_resume.py63
-rw-r--r--addons/hr_skills/models/hr_skills.py61
-rw-r--r--addons/hr_skills/models/res_users.py25
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