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