65 lines
2.2 KiB
Python
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,
|
|
}
|