83 lines
3.0 KiB
Python
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
|