mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
This release fixes multiple logical problems with Odoo's payroll, including the difference in behavior on payslips with 'recursive' category calculations needed for many.
38 lines
1.7 KiB
Python
38 lines
1.7 KiB
Python
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models, _
|
|
from odoo.tools.safe_eval import safe_eval
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class HRSalaryRule(models.Model):
|
|
_inherit = 'hr.salary.rule'
|
|
|
|
@api.multi
|
|
def _compute_rule(self, localdict):
|
|
"""
|
|
:param localdict: dictionary containing the environement in which to compute the rule
|
|
:return: returns a tuple build as the base/amount computed, the quantity and the rate
|
|
:rtype: (float, float, float)
|
|
"""
|
|
self.ensure_one()
|
|
if self.amount_select == 'fix':
|
|
try:
|
|
return self.amount_fix, float(safe_eval(self.quantity, localdict)), 100.0
|
|
except:
|
|
raise UserError(_('Wrong quantity defined for salary rule %s (%s).') % (self.name, self.code))
|
|
elif self.amount_select == 'percentage':
|
|
try:
|
|
return (float(safe_eval(self.amount_percentage_base, localdict)),
|
|
float(safe_eval(self.quantity, localdict)),
|
|
self.amount_percentage)
|
|
except:
|
|
raise UserError(_('Wrong percentage base or quantity defined for salary rule %s (%s).') % (self.name, self.code))
|
|
else:
|
|
try:
|
|
safe_eval(self.amount_python_compute, localdict, mode='exec', nocopy=True)
|
|
# Hibou Fix for setting 0.0 for result rate or result qty
|
|
return float(localdict['result']), localdict.get('result_qty', 1.0), localdict.get('result_rate', 100.0)
|
|
except:
|
|
raise UserError(_('Wrong python code defined for salary rule %s (%s).') % (self.name, self.code))
|