mirror of
https://github.com/bringout/oca-ocb-hr.git
synced 2026-04-27 12:52:01 +02:00
19.0 vanilla
This commit is contained in:
parent
a1137a1456
commit
e1d89e11e3
2789 changed files with 1093187 additions and 605897 deletions
66
odoo-bringout-oca-ocb-hr_skills/hr_skills/models/hr_job.py
Normal file
66
odoo-bringout-oca-ocb-hr_skills/hr_skills/models/hr_job.py
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
from odoo import api, fields, models
|
||||
from odoo.fields import Domain
|
||||
|
||||
|
||||
class HrJob(models.Model):
|
||||
_inherit = "hr.job"
|
||||
|
||||
job_skill_ids = fields.One2many(
|
||||
comodel_name="hr.job.skill",
|
||||
inverse_name="job_id",
|
||||
string="Skills",
|
||||
domain=[("skill_type_id.active", "=", True)],
|
||||
)
|
||||
current_job_skill_ids = fields.One2many(
|
||||
comodel_name="hr.job.skill",
|
||||
compute="_compute_current_job_skill_ids",
|
||||
search="_search_current_job_skill_ids",
|
||||
readonly=False,
|
||||
)
|
||||
skill_ids = fields.Many2many(
|
||||
comodel_name="hr.skill",
|
||||
compute="_compute_skill_ids",
|
||||
store=True,
|
||||
)
|
||||
|
||||
@api.depends("job_skill_ids")
|
||||
def _compute_current_job_skill_ids(self):
|
||||
for job in self:
|
||||
job.current_job_skill_ids = job.job_skill_ids.filtered(
|
||||
lambda skill: not skill.valid_to or skill.valid_to >= fields.Date.today()
|
||||
)
|
||||
|
||||
def _search_current_job_skill_ids(self, operator, value):
|
||||
if operator not in ('in', 'not in', 'any'):
|
||||
raise NotImplementedError()
|
||||
job_skill_ids = []
|
||||
domain = Domain.OR([
|
||||
Domain('valid_to', '=', False),
|
||||
Domain('valid_to', '>=', fields.Date.today()),
|
||||
])
|
||||
if operator == 'any' and isinstance(value, Domain):
|
||||
domain = Domain.AND([domain, value])
|
||||
|
||||
elif operator in ('in', 'not in'):
|
||||
domain = Domain.AND([domain, Domain('id', 'in', value)])
|
||||
|
||||
job_skill_ids = self.env['hr.job.skill']._search(domain)
|
||||
return Domain('job_skill_ids', 'in', job_skill_ids)
|
||||
|
||||
@api.depends("job_skill_ids.skill_id")
|
||||
def _compute_skill_ids(self):
|
||||
for job in self:
|
||||
job.skill_ids = job.job_skill_ids.skill_id
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
for vals in vals_list:
|
||||
vals_job_skill = vals.pop("current_job_skill_ids", []) + vals.get("job_skill_ids", [])
|
||||
vals["job_skill_ids"] = self.env["hr.job.skill"]._get_transformed_commands(vals_job_skill, self)
|
||||
return super().create(vals_list)
|
||||
|
||||
def write(self, vals):
|
||||
if "current_job_skill_ids" in vals or "job_skill_ids" in vals:
|
||||
vals_job_skill = vals.pop("current_job_skill_ids", []) + vals.get("job_skill_ids", [])
|
||||
vals["job_skill_ids"] = self.env["hr.job.skill"]._get_transformed_commands(vals_job_skill, self)
|
||||
return super().write(vals)
|
||||
Loading…
Add table
Add a link
Reference in a new issue