Files
enterprise-addons/l10n_lu_hr_payroll/models/hr_version.py
T

263 lines
14 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
class HrVersion(models.Model):
_inherit = 'hr.version'
l10n_lu_index_on_contract_signature = fields.Float(
string='Index on Contract Signature (LU)', readonly=True, compute='_compute_indexed_wage', groups="hr_payroll.group_hr_payroll_user")
l10n_lu_indexed_wage = fields.Monetary(string='Indexed Wage (LU)', compute='_compute_indexed_wage', groups="hr_payroll.group_hr_payroll_user")
l10n_lu_current_index = fields.Float(string='Current Index (LU)', compute='_compute_indexed_wage', groups="hr_payroll.group_hr_payroll_user")
l10n_lu_meal_voucher_amount = fields.Monetary(string='Meal Vouchers (LU)', groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_meal_voucher_employer_cost = fields.Monetary(
string='Meal Voucher Employer Cost (LU)', compute='_compute_l10n_lu_meal_voucher_employer_cost', groups="hr_payroll.group_hr_payroll_user")
l10n_lu_meal_voucher_employee_computation = fields.Selection(
selection=[('removed_from_net', 'Removed From Net'),
('consider_as_bik', 'Consider as Benefit in Kind')],
string="Employee Computation (LU)",
required=True,
groups="hr_payroll.group_hr_payroll_user",
default='removed_from_net',
tracking=True,
)
l10n_lu_bik_meal_voucher_exceeding_amount = fields.Monetary(
string='BIK Meal Voucher Exceeding Amount (LU)', groups="hr_payroll.group_hr_payroll_user",
compute="_compute_l10n_lu_meal_voucher_employer_cost")
l10n_lu_bik_vehicle = fields.Monetary(string='BIK Vehicle (LU)', groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_bik_vehicle_vat_included = fields.Boolean(string='BIK Vehicle VAT Included (LU)', default=True, groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_bik_other_benefits = fields.Monetary(string='Others', groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_alw_vehicle = fields.Monetary(string='Allowance Vehicle (LU)', groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_tax_id_number = fields.Char(
string="Tax Identification Number",
groups="hr_payroll.group_hr_payroll_user",
tracking=True)
l10n_lu_tax_classification = fields.Selection([
('1', '1'),
('1a', '1a'),
('2', '2'),
('without', 'Without')],
string="Tax Classification",
default='1', required=True,
groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_tax_rate_no_classification = fields.Float(
string="Tax Rate",
groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_deduction_fd_daily = fields.Monetary(
string="FD",
help="Travel Expenses",
groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_deduction_fd_monthly = fields.Monetary(
compute="_compute_l10n_lu_deduction_fd",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_deduction_fd_yearly = fields.Monetary(
compute="_compute_l10n_lu_deduction_fd",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_deduction_ac_ae_daily = fields.Monetary(
string="AC/AE",
help="Spousal Deduction / Extra-professional Deduction",
groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_deduction_ac_ae_monthly = fields.Monetary(
compute="_compute_l10n_lu_deduction_ac_ae",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_deduction_ac_ae_yearly = fields.Monetary(
compute="_compute_l10n_lu_deduction_ac_ae",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_deduction_ce_daily = fields.Monetary(
string="CE",
help="Extraordinary Charges",
groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_deduction_ce_monthly = fields.Monetary(
compute="_compute_l10n_lu_deduction_ce",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_deduction_ce_yearly = fields.Monetary(
compute="_compute_l10n_lu_deduction_ce",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_deduction_ds_daily = fields.Monetary(
string="DS",
help="Special Expenses",
groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_deduction_ds_monthly = fields.Monetary(
compute="_compute_l10n_lu_deduction_ds",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_deduction_ds_yearly = fields.Monetary(
compute="_compute_l10n_lu_deduction_ds",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_deduction_fo_daily = fields.Monetary(
string="FO",
help="Obtaining Fees",
groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_deduction_fo_monthly = fields.Monetary(
compute="_compute_l10n_lu_deduction_fo",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_deduction_fo_yearly = fields.Monetary(
compute="_compute_l10n_lu_deduction_fo",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_deduction_amd_daily = fields.Monetary(
string="AMD",
help="Sustainable Mobility Deduction",
groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_deduction_amd_monthly = fields.Monetary(
compute="_compute_l10n_lu_deduction_amd",
groups="hr.group_hr_user")
l10n_lu_deduction_amd_yearly = fields.Monetary(
compute="_compute_l10n_lu_deduction_amd",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_package_ffo_daily = fields.Monetary(
string="FFO",
help="Obtaining Fees Package",
groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_package_ffo_monthly = fields.Monetary(
compute="_compute_l10n_lu_package_ffo",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_package_ffo_yearly = fields.Monetary(
compute="_compute_l10n_lu_package_ffo",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_package_fds_daily = fields.Monetary(
string="FDS",
help="Special Expenses Package",
groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_package_fds_monthly = fields.Monetary(
compute="_compute_l10n_lu_package_fds",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_package_fds_yearly = fields.Monetary(
compute="_compute_l10n_lu_package_fds",
groups="hr_payroll.group_hr_payroll_user")
l10n_lu_tax_credit_cis = fields.Boolean(
string="CIS",
help="Employee Tax Credit",
groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_tax_credit_cip = fields.Boolean(
string="CIP",
help="Retiree Tax Credit",
groups="hr_payroll.group_hr_payroll_user", tracking=True)
l10n_lu_tax_credit_cim = fields.Boolean(
string="CIM",
help="Single-parent Tax Credit",
groups="hr_payroll.group_hr_payroll_user", tracking=True)
_check_meal_voucher_amount = models.Constraint(
'check(l10n_lu_meal_voucher_amount = 0 OR l10n_lu_meal_voucher_amount >= 2.8)',
'The meal voucher amount can be zero for no meal voucher benefit or more than or equal to 2.8 euros'
)
@api.depends('wage')
def _compute_indexed_wage(self):
for version in self:
version.l10n_lu_index_on_contract_signature = self.env['hr.rule.parameter']._get_parameter_from_code('l10n_lu_index', date=version.date_start, raise_if_not_found=False)
version.l10n_lu_current_index = self.env['hr.rule.parameter']._get_parameter_from_code('l10n_lu_index', raise_if_not_found=False)
if version.l10n_lu_index_on_contract_signature and version.l10n_lu_current_index:
version.l10n_lu_indexed_wage = (
version.wage if version.wage_type == 'monthly' else version.hourly_wage
) / version.l10n_lu_index_on_contract_signature * version.l10n_lu_current_index
else:
version.l10n_lu_indexed_wage = version.wage
@api.depends('l10n_lu_meal_voucher_amount')
def _compute_l10n_lu_meal_voucher_employer_cost(self):
meal_voucher_max_value = self.env['hr.rule.parameter']._get_parameter_from_code('l10n_lu_meal_voucher_max_value', raise_if_not_found=False)
if not meal_voucher_max_value:
self.l10n_lu_meal_voucher_employer_cost = 0
self.l10n_lu_bik_meal_voucher_exceeding_amount = 0
return
# The employee always pays 2.8€ per meal voucher.
# The employer contributes for the rest up to a maximum amount.
for version in self:
if version.l10n_lu_meal_voucher_amount and version.l10n_lu_meal_voucher_amount > 2.8:
contract_employer_contribution = version.l10n_lu_meal_voucher_amount - 2.8
maximum_employer_contribution = meal_voucher_max_value - 2.8
version.l10n_lu_meal_voucher_employer_cost = min(contract_employer_contribution, maximum_employer_contribution)
else:
version.l10n_lu_meal_voucher_employer_cost = 0
version.l10n_lu_bik_meal_voucher_exceeding_amount = max(0, version.l10n_lu_meal_voucher_amount - meal_voucher_max_value)
@api.depends('l10n_lu_deduction_fd_daily')
def _compute_l10n_lu_deduction_fd(self):
days_per_month = self.env['hr.rule.parameter']._get_parameter_from_code('l10n_lu_days_per_month', raise_if_not_found=False) or 25
for version in self:
version.l10n_lu_deduction_fd_monthly = version.l10n_lu_deduction_fd_daily * days_per_month
version.l10n_lu_deduction_fd_yearly = version.l10n_lu_deduction_fd_monthly * 12
@api.depends('l10n_lu_deduction_ac_ae_daily')
def _compute_l10n_lu_deduction_ac_ae(self):
days_per_month = self.env['hr.rule.parameter']._get_parameter_from_code('l10n_lu_days_per_month', raise_if_not_found=False) or 25
for version in self:
version.l10n_lu_deduction_ac_ae_monthly = version.l10n_lu_deduction_ac_ae_daily * days_per_month
version.l10n_lu_deduction_ac_ae_yearly = version.l10n_lu_deduction_ac_ae_monthly * 12
@api.depends('l10n_lu_deduction_ce_daily')
def _compute_l10n_lu_deduction_ce(self):
days_per_month = self.env['hr.rule.parameter']._get_parameter_from_code('l10n_lu_days_per_month', raise_if_not_found=False) or 25
for version in self:
version.l10n_lu_deduction_ce_monthly = version.l10n_lu_deduction_ce_daily * days_per_month
version.l10n_lu_deduction_ce_yearly = version.l10n_lu_deduction_ce_monthly * 12
@api.depends('l10n_lu_deduction_ds_daily')
def _compute_l10n_lu_deduction_ds(self):
days_per_month = self.env['hr.rule.parameter']._get_parameter_from_code('l10n_lu_days_per_month', raise_if_not_found=False) or 25
for version in self:
version.l10n_lu_deduction_ds_monthly = version.l10n_lu_deduction_ds_daily * days_per_month
version.l10n_lu_deduction_ds_yearly = version.l10n_lu_deduction_ds_monthly * 12
@api.depends('l10n_lu_deduction_fo_daily')
def _compute_l10n_lu_deduction_fo(self):
days_per_month = self.env['hr.rule.parameter']._get_parameter_from_code('l10n_lu_days_per_month', raise_if_not_found=False) or 25
for version in self:
version.l10n_lu_deduction_fo_monthly = version.l10n_lu_deduction_fo_daily * days_per_month
version.l10n_lu_deduction_fo_yearly = version.l10n_lu_deduction_fo_monthly * 12
@api.depends('l10n_lu_deduction_amd_daily')
def _compute_l10n_lu_deduction_amd(self):
days_per_month = self.env['hr.rule.parameter']._get_parameter_from_code('l10n_lu_days_per_month', raise_if_not_found=False) or 25
for version in self:
version.l10n_lu_deduction_amd_monthly = version.l10n_lu_deduction_amd_daily * days_per_month
version.l10n_lu_deduction_amd_yearly = version.l10n_lu_deduction_amd_monthly * 12
@api.depends('l10n_lu_package_ffo_daily')
def _compute_l10n_lu_package_ffo(self):
days_per_month = self.env['hr.rule.parameter']._get_parameter_from_code('l10n_lu_days_per_month', raise_if_not_found=False) or 25
for version in self:
version.l10n_lu_package_ffo_monthly = version.l10n_lu_package_ffo_daily * days_per_month
version.l10n_lu_package_ffo_yearly = version.l10n_lu_package_ffo_monthly * 12
@api.depends('l10n_lu_package_fds_daily')
def _compute_l10n_lu_package_fds(self):
days_per_month = self.env['hr.rule.parameter']._get_parameter_from_code('l10n_lu_days_per_month', raise_if_not_found=False) or 25
for version in self:
version.l10n_lu_package_fds_monthly = version.l10n_lu_package_fds_daily * days_per_month
version.l10n_lu_package_fds_yearly = version.l10n_lu_package_fds_monthly * 12
@api.model
def _get_whitelist_fields_from_template(self):
whitelisted_fields = super()._get_whitelist_fields_from_template() or []
if self.env.company.country_id.code == "LU":
whitelisted_fields += [
"l10n_lu_alw_vehicle",
"l10n_lu_bik_other_benefits",
"l10n_lu_bik_vehicle",
"l10n_lu_bik_vehicle_vat_included",
"l10n_lu_current_index",
"l10n_lu_index_on_contract_signature",
"l10n_lu_indexed_wage",
"l10n_lu_meal_voucher_amount",
"l10n_lu_meal_voucher_employee_computation",
"l10n_lu_meal_voucher_employer_cost",
]
return whitelisted_fields
def _get_l10n_lu_indexed_wage(self, date=None):
self.ensure_one()
date = date or fields.Date.today()
index_at_signature = self.l10n_lu_index_on_contract_signature
index_at_date = self.env['hr.rule.parameter']._get_parameter_from_code(
'l10n_lu_index', date=date, raise_if_not_found=False
)
wage = self.wage if self.wage_type == 'monthly' else self.hourly_wage
if index_at_signature and index_at_date:
return wage / index_at_signature * index_at_date
return wage