mirror of
https://github.com/bringout/oca-ocb-hr.git
synced 2026-04-26 23:31:59 +02:00
66 lines
2.4 KiB
Python
66 lines
2.4 KiB
Python
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)
|