mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
Merge branch 'new/13.0/l10n_pe_hr_payroll' into '13.0-test'
new/13.0/l10n_pe_hr_payroll into 13.0-test See merge request hibou-io/hibou-odoo/suite!1392
This commit is contained in:
@@ -26,7 +26,6 @@ Peru - Payroll Rules.
|
||||
'data/er_rules.xml',
|
||||
'views/hr_contract_views.xml',
|
||||
'views/pe_payroll_config_views.xml',
|
||||
'views/res_config_settings_views.xml',
|
||||
],
|
||||
'demo': [
|
||||
],
|
||||
|
||||
@@ -19,11 +19,6 @@
|
||||
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||
</record>
|
||||
|
||||
<!-- Partner -->
|
||||
<record id="res_partner_afp" model="res.partner">
|
||||
<field name="name">AFP</field>
|
||||
</record>
|
||||
|
||||
<!-- EE Rules -->
|
||||
<record id="hr_payroll_rule_ee_afp_pensiones" model="hr.salary.rule">
|
||||
<field name="sequence" eval="190"/>
|
||||
@@ -35,7 +30,6 @@
|
||||
<field name="condition_python">result = categories.GROSS and contract.pe_payroll_config_value('retirement_type') == 'afp'</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute">result, result_rate = categories.GROSS, -payslip.rule_parameter('ee_afp')[contract.pe_payroll_config_value('afp_type')][4]</field>
|
||||
<field name="partner_id" ref="res_partner_afp"/>
|
||||
<field name="appears_on_payslip" eval="True"/>
|
||||
</record>
|
||||
|
||||
@@ -49,14 +43,16 @@
|
||||
<field name="condition_python">result = categories.GROSS and contract.pe_payroll_config_value('retirement_type') == 'afp'</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute">
|
||||
year = payslip.dict.get_year()
|
||||
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year+1) + '-01-01')
|
||||
wage = categories.GROSS
|
||||
wage_base = payslip.rule_parameter('ee_afp')[contract.pe_payroll_config_value('afp_type')][5]
|
||||
rate = payslip.rule_parameter('ee_afp')[contract.pe_payroll_config_value('afp_type')][3]
|
||||
result, result_rate = general_rate(payslip, wage, ytd_wage, wage_base=wage_base, rate=rate)
|
||||
# wage_max is monthly
|
||||
wage_max = payslip.rule_parameter('ee_afp')[contract.pe_payroll_config_value('afp_type')][5]
|
||||
# normalize wage_max to pay period
|
||||
pay_periods_in_year = payslip.pay_periods_in_year
|
||||
wage_max = (wage_max * 12.0) / pay_periods_in_year
|
||||
eligible_wage = min(wage, wage_max)
|
||||
rate = -payslip.rule_parameter('ee_afp')[contract.pe_payroll_config_value('afp_type')][3]
|
||||
result, result_rate = eligible_wage, rate
|
||||
</field>
|
||||
<field name="partner_id" ref="res_partner_afp"/>
|
||||
<field name="appears_on_payslip" eval="True"/>
|
||||
</record>
|
||||
|
||||
@@ -70,7 +66,6 @@ result, result_rate = general_rate(payslip, wage, ytd_wage, wage_base=wage_base,
|
||||
<field name="condition_python">result = categories.GROSS and contract.pe_payroll_config_value('retirement_type') == 'afp' and contract.pe_payroll_config_value('afp_comision_type') == 'mixta'</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute">result, result_rate = categories.GROSS, -payslip.rule_parameter('ee_afp')[contract.pe_payroll_config_value('afp_type')][1]</field>
|
||||
<field name="partner_id" ref="res_partner_afp"/>
|
||||
<field name="appears_on_payslip" eval="True"/>
|
||||
</record>
|
||||
|
||||
@@ -84,7 +79,6 @@ result, result_rate = general_rate(payslip, wage, ytd_wage, wage_base=wage_base,
|
||||
<field name="condition_python">result = categories.GROSS and contract.pe_payroll_config_value('retirement_type') == 'afp' and contract.pe_payroll_config_value('afp_comision_type') == 'non_mixta'</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute">result, result_rate = categories.GROSS, -payslip.rule_parameter('ee_afp')[contract.pe_payroll_config_value('afp_type')][0]</field>
|
||||
<field name="partner_id" ref="res_partner_afp"/>
|
||||
<field name="appears_on_payslip" eval="True"/>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -69,6 +69,10 @@
|
||||
<record id="input_type_bono" model="hr.payslip.input.type">
|
||||
<field name="name">Bono</field>
|
||||
<field name="code">BONO</field>
|
||||
<field name="country_id" ref="base.pe" />
|
||||
<field name="struct_ids" eval="[
|
||||
(4, ref('l10n_pe_hr_payroll.hr_payroll_structure')),
|
||||
]" />
|
||||
</record>
|
||||
|
||||
<record id="hr_salary_rule_bonus" model="hr.salary.rule">
|
||||
|
||||
@@ -13,11 +13,6 @@
|
||||
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||
</record>
|
||||
|
||||
<!-- Partner -->
|
||||
<record id="res_partner_essalud" model="res.partner">
|
||||
<field name="name">Essalud</field>
|
||||
</record>
|
||||
|
||||
<!-- ER Rules -->
|
||||
<record id="hr_payroll_rule_er_essalud" model="hr.salary.rule">
|
||||
<field name="sequence" eval="220"/>
|
||||
@@ -29,7 +24,6 @@
|
||||
<field name="condition_python">result = categories.BASIC</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute">result, result_rate = categories.BASIC, -payslip.rule_parameter('er_essalud')</field>
|
||||
<field name="partner_id" ref="res_partner_afp"/>
|
||||
<field name="appears_on_payslip" eval="True"/>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -31,11 +31,6 @@
|
||||
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||
</record>
|
||||
|
||||
<!-- Partner -->
|
||||
<record id="res_partner_ir_5ta_cat" model="res.partner">
|
||||
<field name="name">IR 5ta Cat.</field>
|
||||
</record>
|
||||
|
||||
<!-- EE Rules -->
|
||||
<record id="hr_payroll_rule_ee_ir_5ta_cat" model="hr.salary.rule">
|
||||
<field name="sequence" eval="196"/>
|
||||
@@ -55,7 +50,9 @@ wage_period = categories.GROSS
|
||||
period_additional_wage = max(wage_period - basic_wage, 0.0)
|
||||
wage_year = basic_wage * pay_periods_in_year
|
||||
# additional 2 months (July and December)
|
||||
wage_year += wage_year * (1/6) # 2 months 2/12
|
||||
wage_2 = wage_year * (1/6)
|
||||
wage_3 = wage_2 * 0.09 # TODO paramatarize 9% # 2 months 2/12
|
||||
wage_year += wage_2 + wage_3
|
||||
wage_year += period_additional_wage
|
||||
|
||||
over_7uit = wage_year - (7.0 * uit)
|
||||
@@ -76,9 +73,8 @@ else:
|
||||
else:
|
||||
break
|
||||
last_uit = _uit
|
||||
tax = -total_tax / 12.0
|
||||
tax = -total_tax / pay_periods_in_year
|
||||
result, result_rate = wage_period, (tax / wage_period * 100.0)</field>
|
||||
<field name="partner_id" ref="res_partner_ir_5ta_cat"/>
|
||||
<field name="appears_on_payslip" eval="True"/>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -13,11 +13,6 @@
|
||||
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||
</record>
|
||||
|
||||
<!-- Partner -->
|
||||
<record id="res_partner_onp" model="res.partner">
|
||||
<field name="name">ONP</field>
|
||||
</record>
|
||||
|
||||
<!-- EE Rules -->
|
||||
<record id="hr_payroll_rule_ee_onp" model="hr.salary.rule">
|
||||
<field name="sequence" eval="190"/>
|
||||
@@ -26,10 +21,9 @@
|
||||
<field name="name">EE: PE ONP/SNP</field>
|
||||
<field name="code">EE_PE_ONP</field>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = categories.GROSS and contract.pe_payroll_config_value('retirement_type') == 'onp' and rule == contract.pe_payroll_config_value('onp_rule_id')</field>
|
||||
<field name="condition_python">result = categories.GROSS and contract.pe_payroll_config_value('retirement_type') == 'onp'</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute">result, result_rate = categories.GROSS, -payslip.rule_parameter('ee_onp')</field>
|
||||
<field name="partner_id" ref="res_partner_onp"/>
|
||||
<field name="appears_on_payslip" eval="True"/>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -3,5 +3,4 @@
|
||||
from . import hr_contract
|
||||
from . import hr_payslip
|
||||
from . import pe_payroll_config
|
||||
from . import res_config_settings
|
||||
from . import update
|
||||
|
||||
@@ -16,8 +16,6 @@ class HRContractPEPayrollConfig(models.Model):
|
||||
('retired', 'Retired'),
|
||||
], string='Retirement Type', required=True, default='afp')
|
||||
|
||||
onp_rule_id = fields.Many2one('hr.salary.rule', string='ONP Rule', domain=[('code', '=like', 'EE_PE_ONP%')])
|
||||
|
||||
# AFP Type may actually be company specific....
|
||||
afp_type = fields.Selection([
|
||||
('habitat', 'Habitat'),
|
||||
@@ -34,6 +32,6 @@ class HRContractPEPayrollConfig(models.Model):
|
||||
('essalud', 'Essalud'),
|
||||
('eps', 'EPS'),
|
||||
], string='Company Social Services', default='essalud')
|
||||
comp_ss_eps_rule_id = fields.Many2one('hr.salary.rule', string='Company Social Security EPS Rule')
|
||||
comp_life_insurance_rule_id = fields.Many2one('hr.salary.rule', string='Company Life Insurance Rule')
|
||||
comp_risk_insurance_rule_id = fields.Many2one('hr.salary.rule', string='Company Risk Insurance Rule')
|
||||
comp_ss_eps_rule_id = fields.Many2one('hr.salary.rule', string='Company Social Security EPS Rule',
|
||||
domain=[('code', '=like', 'ER_PE_EPS%')],
|
||||
help="Rule code prefix 'ER_PE_EPS' to select here.")
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ResConfigSettings(models.TransientModel):
|
||||
_inherit = 'res.config.settings'
|
||||
|
||||
payslip_sum_type = fields.Selection([
|
||||
('date_from', 'Date From'),
|
||||
('date_to', 'Date To'),
|
||||
('date', 'Accounting Date'),
|
||||
], 'Payslip Sum Behavior', help="Behavior for what payslips are considered "
|
||||
"during rule execution. Stock Odoo behavior "
|
||||
"would not consider a payslip starting on 2019-12-30 "
|
||||
"ending on 2020-01-07 when summing a 2020 payslip category.\n\n"
|
||||
"Accounting Date requires Payroll Accounting and will "
|
||||
"fall back to date_to as the 'closest behavior'.",
|
||||
config_parameter='hr_payroll.payslip.sum_behavior')
|
||||
|
||||
def set_values(self):
|
||||
super(ResConfigSettings, self).set_values()
|
||||
self.env['ir.config_parameter'].set_param('hr_payroll.payslip.sum_behavior',
|
||||
self.payslip_sum_type or 'date_from')
|
||||
@@ -27,15 +27,13 @@
|
||||
<group>
|
||||
<group name="employee" string="Employee">
|
||||
<field name="retirement_type"/>
|
||||
<field name="onp_rule_id" attrs="{'invisible': [('retirement_type', '!=', 'onp')]}"/>
|
||||
<field name="afp_type" attrs="{'invisible': [('retirement_type', '!=', 'afp')]}"/>
|
||||
<field name="afp_comision_type" attrs="{'invisible': [('retirement_type', '!=', 'afp')]}"/>
|
||||
</group>
|
||||
<group name="employer" string="Employer">
|
||||
<field name="comp_ss_type" />
|
||||
<field name="comp_ss_eps_rule_id" attrs="{'invisible': [('comp_ss_type', '!=', 'eps')]}"/>
|
||||
<field name="comp_life_insurance_rule_id" />
|
||||
<field name="comp_risk_insurance_rule_id" />
|
||||
<p attrs="{'invisible': [('comp_ss_type', '!=', 'eps')]}">Not supported. Specify rule.</p>
|
||||
<field name="comp_ss_eps_rule_id" attrs="{'invisible': [('comp_ss_type', '!=', 'eps')]}" />
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="res_config_settings_view_form_inherit" model="ir.ui.view">
|
||||
<field name="name">res.config.settings.view.form.inherit</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="inherit_id" ref="hr_payroll.res_config_settings_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@data-key='hr_payroll']" position="inside">
|
||||
<div class="row mt16 o_settings_container" id="hr_payroll_accountant">
|
||||
<div class="col-lg-6 col-12 o_setting_box">
|
||||
<div class="o_setting_right_pane">
|
||||
<span class="o_form_label">Payslip Sum Behavior</span>
|
||||
<div class="text-muted">
|
||||
Customize the behavior of what payslips are eligible when summing over date ranges in rules.
|
||||
Generally, "Date To" or "Accounting Date" would be preferred in the United States and anywhere
|
||||
else where the ending date on the payslip is used to calculate wage bases.
|
||||
</div>
|
||||
<div class="content-group">
|
||||
<div class="row mt16" id="mail_alias_domain">
|
||||
<label for="payslip_sum_type" class="col-lg-3 o_light_label"/>
|
||||
<field name="payslip_sum_type"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
@@ -18,6 +18,8 @@
|
||||
# pay_ir_5ta_cat='1238',
|
||||
# pay_essalud='1239',
|
||||
# exp_salary='1240',
|
||||
# exp_com='1222',
|
||||
# exp_bono='1223',
|
||||
# exp_essalud='1241',
|
||||
env['account.chart.template']._pe_configure_payroll_account_data(companies, salary_rules=records, full_reset=False)
|
||||
</field>
|
||||
@@ -39,6 +41,8 @@
|
||||
# pay_ir_5ta_cat='1238',
|
||||
# pay_essalud='1239',
|
||||
# exp_salary='1240',
|
||||
# exp_com='1222',
|
||||
# exp_bono='1223',
|
||||
# exp_essalud='1241',
|
||||
env['account.chart.template']._pe_configure_payroll_account_data(companies, salary_rules=records, full_reset=True)
|
||||
</field>
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
from odoo import models
|
||||
|
||||
EXP_SALARY = '6211000'
|
||||
EXP_COM = '6212000'
|
||||
EXP_BONO = '6213000'
|
||||
EXP_ESSALUD = '6271000'
|
||||
|
||||
PAY_EE = '4111000'
|
||||
PAY_AFP = '407' # TODO
|
||||
PAY_AFP = '4032000' # TODO
|
||||
PAY_AFP = '4170000'
|
||||
PAY_ONP = '4032000'
|
||||
PAY_EPS = '4075' # TODO EPS isn't implemented
|
||||
PAY_IR_5TA_CAT = '4017' # TODO
|
||||
PAY_IR_5TA_CAT = '4017300'
|
||||
PAY_ESSALUD = '4031000'
|
||||
|
||||
|
||||
@@ -33,6 +33,8 @@ class AccountChartTemplate(models.Model):
|
||||
pay_ir_5ta_cat=PAY_IR_5TA_CAT,
|
||||
pay_essalud=PAY_ESSALUD,
|
||||
exp_salary=EXP_SALARY,
|
||||
exp_com=EXP_COM,
|
||||
exp_bono=EXP_BONO,
|
||||
exp_essalud=EXP_ESSALUD,
|
||||
salary_rules=None, full_reset=False):
|
||||
account_codes = (
|
||||
@@ -43,6 +45,8 @@ class AccountChartTemplate(models.Model):
|
||||
pay_ir_5ta_cat,
|
||||
pay_essalud,
|
||||
exp_salary,
|
||||
exp_com,
|
||||
exp_bono,
|
||||
exp_essalud,
|
||||
)
|
||||
pe_structures = self.env['hr.payroll.structure'].search([('country_id', '=', self.env.ref('base.pe').id)])
|
||||
@@ -122,6 +126,9 @@ class AccountChartTemplate(models.Model):
|
||||
|
||||
# BASIC* -> SALARY_EXPENSE debit account
|
||||
set_rule_accounts('BASIC%', accounts[exp_salary], accounts['none'])
|
||||
set_rule_accounts('BASIC_COM%', accounts[exp_com], accounts['none'])
|
||||
set_rule_accounts('BASIC_BONO%', accounts[exp_bono], accounts['none'])
|
||||
set_rule_accounts('BASIC_BADGES%', accounts[exp_bono], accounts['none'])
|
||||
# ALW* -> SALARY_EXPENSE debit account
|
||||
set_rule_accounts('ALW%', accounts[exp_salary], accounts['none'])
|
||||
# EE_* -> AP debit
|
||||
|
||||
Reference in New Issue
Block a user