84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
from odoo import _, fields, models
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class HrContract(models.Model):
|
|
_inherit = "hr.contract"
|
|
|
|
mcs_salary_revision_state = fields.Selection(
|
|
[
|
|
("draft", "Draft"),
|
|
("sent", "Sent"),
|
|
("signed", "Signed"),
|
|
("archived", "Archived"),
|
|
],
|
|
string="Salary Letter Status",
|
|
default="draft",
|
|
tracking=True,
|
|
)
|
|
mcs_salary_revision_sent_date = fields.Date(
|
|
string="Letter Sent Date", tracking=True
|
|
)
|
|
mcs_salary_revision_signed_date = fields.Date(
|
|
string="Letter Signed Date", tracking=True
|
|
)
|
|
mcs_salary_revision_notes = fields.Text(string="Salary Revision Notes")
|
|
mcs_employee_active = fields.Boolean(
|
|
string="Employee Active",
|
|
related="employee_id.active",
|
|
)
|
|
|
|
def action_mcs_generate_salary_revision_letter(self):
|
|
today = fields.Date.context_today(self)
|
|
for contract in self:
|
|
if not contract.employee_id.active:
|
|
raise UserError(
|
|
_(
|
|
"Salary revision letters cannot be generated for archived employees."
|
|
)
|
|
)
|
|
if contract.state != "open":
|
|
raise UserError(
|
|
_(
|
|
"Salary revision letters can only be generated for running contracts."
|
|
)
|
|
)
|
|
if contract.mcs_salary_revision_state == "archived":
|
|
raise UserError(
|
|
_(
|
|
"This salary revision letter is archived and cannot be generated."
|
|
)
|
|
)
|
|
if contract.mcs_salary_revision_state == "draft":
|
|
contract.write(
|
|
{
|
|
"mcs_salary_revision_state": "sent",
|
|
"mcs_salary_revision_sent_date": today,
|
|
}
|
|
)
|
|
return self.env.ref(
|
|
"mcs_simple_payroll.action_report_salary_revision_letter"
|
|
).report_action(self)
|
|
|
|
def action_mcs_mark_salary_letter_sent(self):
|
|
self.write(
|
|
{
|
|
"mcs_salary_revision_state": "sent",
|
|
"mcs_salary_revision_sent_date": fields.Date.context_today(self),
|
|
}
|
|
)
|
|
return True
|
|
|
|
def action_mcs_mark_salary_letter_signed(self):
|
|
self.write(
|
|
{
|
|
"mcs_salary_revision_state": "signed",
|
|
"mcs_salary_revision_signed_date": fields.Date.context_today(self),
|
|
}
|
|
)
|
|
return True
|
|
|
|
def action_mcs_archive_salary_letter(self):
|
|
self.write({"mcs_salary_revision_state": "archived"})
|
|
return True
|