odoo18/addons_extensions/recruitment_employee_bridge/models/offer_recruitment.py

83 lines
3.0 KiB
Python

from odoo import api, fields, models
class HrApplicant(models.Model):
_inherit = "hr.applicant"
finalized_ctc = fields.Float(string="Finalized CTC", tracking=True)
offer_letter_ids = fields.Many2many(
"offer.letter",
string="Offer Letters",
compute="_compute_offer_letters",
)
current_offer_letter_id = fields.Many2one(
"offer.letter",
string="Current Offer Letter",
compute="_compute_offer_letters",
)
offer_release_status = fields.Selection(
selection=[
("requested", "Requested"),
("sent", "Sent to Applicant"),
("accepted", "Accepted"),
("rejected", "Rejected"),
("expired", "Expired"),
],
string="Offer Status",
related="current_offer_letter_id.state",
readonly=True,
store=False,
)
request_offer_release = fields.Boolean(related="recruitment_stage_id.request_offer_release")
@api.depends("bridge_ids.offer_letter_ids", "bridge_ids.offer_letter_ids.create_date", "bridge_ids.offer_letter_ids.state")
def _compute_offer_letters(self):
for applicant in self:
offers = applicant.bridge_ids.mapped("offer_letter_ids").sorted(
key=lambda offer: (offer.create_date or fields.Datetime.from_string("1970-01-01 00:00:00"), offer.id)
)
applicant.offer_letter_ids = offers
applicant.current_offer_letter_id = offers[-1] if offers else False
def action_request_offer_release(self):
self.ensure_one()
bridge = self._get_bridge(create=True, source="recruitment")
if self.finalized_ctc and "finalized_ctc" in bridge._fields:
bridge.finalized_ctc = self.finalized_ctc
return bridge.action_request_offer_release()
def action_send_offer(self):
return self.action_request_offer_release()
class HrCandidate(models.Model):
_inherit = "hr.candidate"
current_offer_letter_id = fields.Many2one(
"offer.letter",
string="Current Offer Letter",
compute="_compute_current_offer_letter",
store=False,
)
offer_release_status = fields.Selection(
selection=[
("requested", "Requested"),
("sent", "Sent to Applicant"),
("accepted", "Accepted"),
("rejected", "Rejected"),
("expired", "Expired"),
],
string="Offer Status",
related="current_offer_letter_id.state",
readonly=True,
store=False,
)
@api.depends("bridge_ids.offer_letter_ids", "bridge_ids.offer_letter_ids.create_date", "bridge_ids.offer_letter_ids.state")
def _compute_current_offer_letter(self):
for candidate in self:
offer_letters = candidate.bridge_ids.mapped("offer_letter_ids").sorted(
key=lambda offer: (offer.create_date or fields.Datetime.from_string("1970-01-01 00:00:00"), offer.id)
)
candidate.current_offer_letter_id = offer_letters[-1] if offer_letters else False