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, }