odoo18/addons_extensions/employee_bridge/models/hr_employee.py

65 lines
2.2 KiB
Python

from odoo import _, fields, models
from odoo.exceptions import ValidationError
class HrEmployee(models.Model):
_inherit = "hr.employee"
recruitment_bridge_ids = fields.One2many(
"recruitment.employee.bridge",
"employee_id",
string="Onboarding Records",
)
recruitment_bridge_count = fields.Integer(compute="_compute_recruitment_bridge_count")
def _compute_recruitment_bridge_count(self):
data = self.env["recruitment.employee.bridge"].read_group(
[("employee_id", "in", self.ids), ("active", "=", True)],
["employee_id"],
["employee_id"],
)
counts = {item["employee_id"][0]: item["employee_id_count"] for item in data}
for employee in self:
employee.recruitment_bridge_count = counts.get(employee.id, 0)
def _get_or_create_employee_bridge(self):
self.ensure_one()
bridge = self.env["recruitment.employee.bridge"].search(
[("employee_id", "=", self.id), ("active", "=", True)],
limit=1,
order="id desc",
)
if not bridge:
bridge = self.env["recruitment.employee.bridge"].create({
"employee_id": self.id,
"company_id": self.company_id.id or self.env.company.id,
"source": "jod",
"state": "draft",
})
return bridge
def send_jod_form_to_employee(self):
self.ensure_one()
bridge = self._get_or_create_employee_bridge()
bridge.action_send_jod_form()
return {
"name": _("Onboarding"),
"type": "ir.actions.act_window",
"res_model": "recruitment.employee.bridge",
"view_mode": "form",
"res_id": bridge.id,
}
def action_open_recruitment_bridge(self):
self.ensure_one()
bridge = self._get_or_create_employee_bridge()
if not bridge:
raise ValidationError(_("No onboarding record found."))
return {
"name": _("Onboarding"),
"type": "ir.actions.act_window",
"res_model": "recruitment.employee.bridge",
"view_mode": "form",
"res_id": bridge.id,
}