oca-ocb-hr/odoo-bringout-oca-ocb-hr_skills/hr_skills/models/hr_job.py
Ernad Husremovic e1d89e11e3 19.0 vanilla
2026-03-09 09:31:00 +01:00

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)