l10n-switzerland-flectra/l10n_ch_hr_payroll/models/hr_salary_rule.py
2021-12-24 10:56:31 +01:00

68 lines
2.4 KiB
Python

# Copyright 2017 Open Net Srl
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from flectra import fields, models, api
from flectra.tools.safe_eval import safe_eval
import logging
_logger = logging.getLogger(__name__)
class HrSalaryRule(models.Model):
_inherit = 'hr.salary.rule'
name = fields.Char(translate=True)
note = fields.Char(translate=True)
percentage = fields.Float(
compute="_compute_percentage_from_company",
required=False)
amount_base = fields.Float(
required=False)
def _compute_percentage_from_company(self):
list_fields_per = {
'fadmin_per': ['FADMIN'],
'avs_per': ['AVS_C', 'AVS_E'],
'pc_f_vd_per': ['PC_F_VD_C', 'PC_F_VD_E'],
'laa_per': ['LAA_C', 'LAA_E'],
'lca_per': ['LCA_C', 'LCA_E'],
'ac_per_off_limit': ['AC_C_SOL', 'AC_E_SOL'],
'ac_per_in_limit': ['AC_C', 'AC_E']
}
for rule in self:
rule.percentage = False
for rule_from, rules_to in list_fields_per.items():
for rule_to in rules_to:
data_id = self.env['ir.model.data'].search([
('module', '=', 'l10n_ch_hr_payroll'),
('name', '=', rule_to)
])
if len(data_id):
rule_to_modify = rule.env['hr.salary.rule'].search([
('id', '=', data_id.res_id)
])
if rule_to_modify.id == rule.id:
rule.percentage = \
getattr(rule.company_id, rule_from)
def _compute_rule(self, localdict):
res = super(HrSalaryRule, self)._compute_rule(localdict)
for rule in self:
if rule.amount_percentage_base:
rule.amount_base = \
float(safe_eval(rule.amount_percentage_base, localdict))
if rule.id == self.env.ref("l10n_ch_hr_payroll.LPP_C").id or \
rule.id == self.env.ref("l10n_ch_hr_payroll.LPP_E").id:
rule.percentage = \
-float(safe_eval("contract.lpp_rate or 100", localdict))
if rule.id == self.env.ref("l10n_ch_hr_payroll.IMP_SRC").id:
rule.percentage = \
-float(safe_eval("contract.imp_src or 100", localdict))
return res