mirror of
https://github.com/bringout/oca-payroll.git
synced 2026-04-25 13:02:07 +02:00
81 lines
3.1 KiB
Python
81 lines
3.1 KiB
Python
# Copyright 2015 Savoir-faire Linux. All Rights Reserved.
|
|
# Copyright 2017 Serpent Consulting Services Pvt. Ltd.
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import _, api, fields, models
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class HrPayslip(models.Model):
|
|
_inherit = "hr.payslip"
|
|
|
|
hr_period_id = fields.Many2one(
|
|
"hr.period",
|
|
string="Period",
|
|
readonly=True,
|
|
states={"draft": [("readonly", False)]},
|
|
)
|
|
date_payment = fields.Date(
|
|
"Date of Payment", readonly=True, states={"draft": [("readonly", False)]}
|
|
)
|
|
|
|
@api.constrains("hr_period_id", "company_id")
|
|
def _check_period_company(self):
|
|
for slip in self:
|
|
if slip.hr_period_id and slip.hr_period_id.company_id != slip.company_id:
|
|
if slip.hr_period_id.company_id != slip.company_id:
|
|
raise UserError(
|
|
_(
|
|
"The company on the selected period must be the same "
|
|
"as the company on the payslip."
|
|
)
|
|
)
|
|
|
|
@api.onchange("company_id", "contract_id")
|
|
def onchange_company_id(self):
|
|
if self.company_id:
|
|
if self.contract_id:
|
|
contract = self.contract_id
|
|
period = self.env["hr.period"].get_next_period(
|
|
self.company_id.id, contract.schedule_pay
|
|
)
|
|
else:
|
|
schedule_pay = self.env["hr.payslip.run"].get_default_schedule(
|
|
self.company_id.id
|
|
)
|
|
if self.company_id and schedule_pay:
|
|
period = self.env["hr.period"].get_next_period(
|
|
self.company_id.id, schedule_pay
|
|
)
|
|
self.hr_period_id = period.id if period else False
|
|
|
|
@api.onchange("contract_id")
|
|
def onchange_contract_period(self):
|
|
if self.contract_id.employee_id and self.contract_id:
|
|
employee = self.contract_id.employee_id
|
|
contract = self.contract_id
|
|
period = self.env["hr.period"].get_next_period(
|
|
employee.company_id.id, contract.schedule_pay
|
|
)
|
|
if period:
|
|
self.hr_period_id = period.id if period else False
|
|
|
|
@api.onchange("hr_period_id")
|
|
def onchange_hr_period_id(self):
|
|
if self.hr_period_id:
|
|
# dates must be updated together to prevent constraint
|
|
self.date_from = self.hr_period_id.date_start
|
|
self.date_to = self.hr_period_id.date_end
|
|
self.date_payment = self.hr_period_id.date_payment
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
if vals.get("payslip_run_id"):
|
|
payslip_run = self.env["hr.payslip.run"].browse(vals["payslip_run_id"])
|
|
self.env["hr.employee"].browse(vals["employee_id"])
|
|
period = payslip_run.hr_period_id
|
|
vals["date_payment"] = payslip_run.date_payment
|
|
vals["hr_period_id"] = period.id
|
|
elif vals.get("date_to") and not vals.get("date_payment"):
|
|
vals["date_payment"] = vals["date_to"]
|
|
return super(HrPayslip, self).create(vals)
|