Merge branch '15.0' into 15.0-test

This commit is contained in:
Jared Kipe
2022-09-29 20:25:44 +00:00
6 changed files with 68 additions and 4 deletions

View File

@@ -35,7 +35,7 @@ class InputLine(BrowsableObject):
self.__browsable_query = """
SELECT sum(amount) as sum
FROM hr_payslip as hp, hr_payslip_input as pi
WHERE hp.employee_id = %s AND hp.state = 'done'
WHERE hp.employee_id = %s AND hp.state in ('done', 'paid')
AND hp.{sum_field} >= %s AND hp.date_to <= %s AND hp.id = pi.payslip_id AND pi.code = %s""".format(sum_field=sum_field)
def sum(self, code, from_date, to_date=None):
@@ -51,7 +51,7 @@ class WorkedDays(BrowsableObject):
self.__browsable_query = """
SELECT sum(number_of_days) as number_of_days, sum(number_of_hours) as number_of_hours
FROM hr_payslip as hp, hr_payslip_worked_days as pi
WHERE hp.employee_id = %s AND hp.state = 'done'
WHERE hp.employee_id = %s AND hp.state in ('done', 'paid')
AND hp.{sum_field} >= %s AND hp.date_to <= %s AND hp.id = pi.payslip_id AND pi.code = %s""".format(sum_field=sum_field)
def _sum(self, code, from_date, to_date=None):
@@ -77,7 +77,7 @@ class Payslips(BrowsableObject):
self.__browsable_query_rule = """
SELECT sum(case when hp.credit_note is not True then (pl.total) else (-pl.total) end)
FROM hr_payslip as hp, hr_payslip_line as pl
WHERE hp.employee_id = %s AND hp.state = 'done'
WHERE hp.employee_id = %s AND hp.state in ('done', 'paid')
AND hp.{sum_field} >= %s AND hp.date_to <= %s AND hp.id = pl.slip_id AND pl.code = %s""".format(sum_field=sum_field)
# Original (non-recursive)
# self.__browsable_query_category = """
@@ -105,7 +105,7 @@ class Payslips(BrowsableObject):
SELECT sum(case when hp.credit_note is not True then (pl.total) else (-pl.total) end)
FROM hr_payslip as hp, hr_payslip_line as pl
WHERE hp.employee_id = %s AND hp.state = 'done'
WHERE hp.employee_id = %s AND hp.state in ('done', 'paid')
AND hp.{sum_field} >= %s AND hp.date_to <= %s AND hp.id = pl.slip_id
AND pl.category_id in (SELECT id from category_ids)""".format(sum_field=sum_field)

View File

@@ -153,4 +153,40 @@
<field name="struct_id" ref="l10n_pe_hr_payroll.hr_payroll_structure"/>
</record>
<!-- Household Allowance -->
<!-- Parameters -->
<record id="rule_parameter_pe_min_wage" model="hr.rule.parameter">
<field name="name">Peru Minimum Wage</field>
<field name="code">pe_min_wage</field>
<field name="country_id" ref="base.pe"/>
</record>
<record id="rule_parameter_pe_min_wage_2020" model="hr.rule.parameter.value">
<field name="parameter_value">930.0</field>
<field name="rule_parameter_id" ref="rule_parameter_pe_min_wage"/>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_pe_minor_dependent_rate" model="hr.rule.parameter">
<field name="name">Peru Minor Dependent Rate</field>
<field name="code">pe_minor_dependent_rate</field>
<field name="country_id" ref="base.pe"/>
</record>
<record id="rule_parameter_pe_minor_dependent_rate_2020" model="hr.rule.parameter.value">
<field name="parameter_value">10.0</field>
<field name="rule_parameter_id" ref="rule_parameter_pe_minor_dependent_rate"/>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="hr_salary_rule_household_allowance" model="hr.salary.rule">
<field name="condition_select">python</field>
<field name="condition_python">result = contract.pe_payroll_config_value('has_minor_dependent')</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">result, result_rate = payslip.rule_parameter('pe_min_wage'), payslip.rule_parameter('pe_minor_dependent_rate')</field>
<field name="code">BASIC_HOUSEHOLD</field>
<field name="category_id" ref="hr_payroll.BASIC"/>
<field name="name">Basic: Household Allowance</field>
<field name="sequence" eval="5"/>
<field name="struct_id" ref="l10n_pe_hr_payroll.hr_payroll_structure"/>
</record>
</odoo>

View File

@@ -80,6 +80,19 @@
<field name="appears_on_payslip" eval="True"/>
</record>
<record id="hr_payroll_rule_ir_5ta_cat_gratif_household" model="hr.salary.rule">
<field name="sequence" eval="81"/>
<field name="struct_id" ref="hr_payroll_structure_gratif"/>
<field name="category_id" ref="hr_payroll.ALW"/>
<field name="name">Household Allowance</field>
<field name="code">ALW_GRATIF_HOUSEHOLD</field>
<field name="condition_select">python</field>
<field name="condition_python">result = contract.pe_payroll_config_value('has_minor_dependent')</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">result, result_rate = payslip.rule_parameter('pe_min_wage'), payslip.rule_parameter('pe_minor_dependent_rate')</field>
<field name="appears_on_payslip" eval="True"/>
</record>
<record id="hr_payroll_rule_ir_5ta_cat_gratif_bono" model="hr.salary.rule">
<field name="sequence" eval="90"/>
<field name="struct_id" ref="hr_payroll_structure_gratif"/>

View File

@@ -10,6 +10,7 @@ class HRContractPEPayrollConfig(models.Model):
name = fields.Char(string="Description")
employee_id = fields.Many2one('hr.employee', string="Employee", required=True)
has_minor_dependent = fields.Boolean(string='Has Minor Dependent', help='Eligible for Household Allowance')
ee_5ta_cat_exempt = fields.Boolean(string='Exempt from 5th Cat. withholding.')
retirement_type = fields.Selection([
@@ -34,6 +35,9 @@ class HRContractPEPayrollConfig(models.Model):
('essalud', 'Essalud'),
('eps', 'EPS'),
], string='Company Social Services', default='essalud')
comp_ss_eps_ee_rule_id = fields.Many2one('hr.salary.rule', string='Employee Social Security EPS Rule',
domain=[('code', '=like', 'EE_PE_EPS%')],
help="Rule code prefix 'EE_PE_EPS' to select here.")
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.")

View File

@@ -1,6 +1,11 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date
from pprint import pformat
import logging
_logger = logging.getLogger(__name__)
def ir_5ta_cat(payslip, categories, worked_days, inputs):
basic_wage = categories.BASIC
@@ -33,6 +38,8 @@ def ir_5ta_cat(payslip, categories, worked_days, inputs):
# IF employee's `first_contract_date` is in current year
# THEN we can pro-rate the period (reduce withholding)
# TODO replace with just date_from on contract or something
# we are told that every year new contracts will be needed
date_hired = payslip.dict.contract_id.first_contract_date
payslip_date_end = payslip.dict.date_to
hired_in_year = date_hired.year == payslip_date_end.year
@@ -92,4 +99,6 @@ def ir_5ta_cat(payslip, categories, worked_days, inputs):
return wage_period, (remaining_tax / wage_period * 100.0)
tax = -(total_tax - ytd_tax) / pay_periods_at_current
# uncomment to see a lot of detail
# _logger.info('ir_5ta_cat locals: ' + str(pformat(locals())))
return wage_period, (tax / wage_period * 100.0)

View File

@@ -26,6 +26,7 @@
</group>
<group>
<group name="employee" string="Employee">
<field name="has_minor_dependent" help="Eligible for Household Allowance"/>
<field name="ee_5ta_cat_exempt"/>
<field name="retirement_type"/>
<field name="afp_type" attrs="{'invisible': [('retirement_type', '!=', 'afp')]}"/>
@@ -34,6 +35,7 @@
<group name="employer" string="Employer">
<field name="comp_ss_type" />
<p attrs="{'invisible': [('comp_ss_type', '!=', 'eps')]}">Not supported. Specify rule.</p>
<field name="comp_ss_eps_ee_rule_id" attrs="{'invisible': [('comp_ss_type', '!=', 'eps')]}" />
<field name="comp_ss_eps_rule_id" attrs="{'invisible': [('comp_ss_type', '!=', 'eps')]}" />
</group>
</group>