oca-technical/odoo-bringout-oca-hack-payroll/payroll/wizard/hr_payslip_change_state.py
2025-08-29 15:43:03 +02:00

94 lines
3.5 KiB
Python

# Copyright 2019 - Eficent http://www.eficent.com/
# Copyright 2019 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
from odoo.exceptions import UserError
from odoo.tools.translate import _
class HrPayslipChangeState(models.TransientModel):
_name = "hr.payslip.change.state"
_description = "Change state of a payslip"
state = fields.Selection(
selection=[
("draft", "Set to Draft"),
("verify", "Compute Sheet"),
("done", "Confirm"),
("cancel", "Cancel Payslip"),
("cdraft", "Cancel then Draft"),
],
string="Action",
help="* When the payslip is created the status is 'Draft'.\
\n* If the payslip is under verification, the status is "
"'Compute Sheet'. \
\n* If the payslip is confirmed then status is set to 'Done'.\
\n* When user cancel payslip the status is 'Rejected'.",
)
def change_state_confirm(self):
record_ids = self.env.context.get("active_ids", False)
payslip_obj = self.env["hr.payslip"]
new_state = self.state
records = payslip_obj.browse(record_ids)
for rec in records:
if new_state == "draft":
if rec.state == "cancel":
rec.action_payslip_draft()
else:
raise UserError(
_(
"Only rejected payslips can be reset to "
"draft, the payslip %s is in "
"%s state" % (rec.name, rec.state)
)
)
elif new_state == "verify":
if rec.state in ["draft", "verify"]:
rec.compute_sheet()
else:
raise UserError(
_(
"Only draft payslips can be verified,"
"the payslip %s is in "
"%s state" % (rec.name, rec.state)
)
)
elif new_state == "done":
if rec.state in ("verify", "draft"):
rec.action_payslip_done()
else:
raise UserError(
_(
"Only payslips in states verify or draft"
" can be confirmed, the payslip %s is in "
"%s state" % (rec.name, rec.state)
)
)
elif new_state == "cancel":
if rec.state != "cancel":
rec.action_payslip_cancel()
else:
raise UserError(
_(
"The payslip %s is already canceled "
"please deselect it" % rec.name
)
)
elif new_state == "cdraft":
if rec.state != "cancel":
rec.action_payslip_cancel()
rec.action_payslip_draft()
return {
"domain": "[('id','in', [" + ",".join(map(str, record_ids)) + "])]",
"name": _("Payslips"),
"view_mode": "tree,form",
"res_model": "hr.payslip",
"view_id": False,
"context": False,
"type": "ir.actions.act_window",
}