86 lines
3.2 KiB
Python
86 lines
3.2 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
|
|
|
|
|
|
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"),
|
|
],
|
|
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:
|
|
msg = self.env._(
|
|
"Only rejected payslips can be reset to draft, "
|
|
"the payslip %(nm)s is in %(st)s state",
|
|
nm=rec.name,
|
|
st=rec.state,
|
|
)
|
|
raise UserError(msg)
|
|
elif new_state == "verify":
|
|
if rec.state in ["draft", "verify"]:
|
|
rec.compute_sheet()
|
|
else:
|
|
msg = self.env._(
|
|
"Only draft payslips can be verified, the "
|
|
"payslip %(nm)s is in %(st)s state",
|
|
nm=rec.name,
|
|
st=rec.state,
|
|
)
|
|
raise UserError(msg)
|
|
elif new_state == "done":
|
|
if rec.state in ("verify", "draft"):
|
|
rec.action_payslip_done()
|
|
else:
|
|
msg = self.env._(
|
|
"Only payslips in states verify or draft can be "
|
|
"confirmed, the payslip %(nm)s is in %(st)s state",
|
|
nm=rec.name,
|
|
st=rec.state,
|
|
)
|
|
raise UserError(msg)
|
|
elif new_state == "cancel":
|
|
if rec.state != "cancel":
|
|
rec.action_payslip_cancel()
|
|
else:
|
|
msg = self.env._(
|
|
"The payslip %(nm)s is already canceled please deselect it",
|
|
nm=rec.name,
|
|
)
|
|
raise UserError(msg)
|
|
|
|
return {
|
|
"domain": "[('id','in', [" + ",".join(map(str, record_ids)) + "])]",
|
|
"name": self.env._("Payslips"),
|
|
"view_mode": "list,form",
|
|
"res_model": "hr.payslip",
|
|
"view_id": False,
|
|
"context": False,
|
|
"type": "ir.actions.act_window",
|
|
}
|