From c8a3d8160f5e3544609e82b9b5a456850d8b067b Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Tue, 10 May 2022 20:57:35 +0000 Subject: [PATCH] [FIX] l10n_pe_hr_payroll: default structure --- l10n_pe_hr_payroll/data/base.xml | 8 ++ l10n_pe_hr_payroll/tests/common.py | 131 +++++------------------------ 2 files changed, 28 insertions(+), 111 deletions(-) diff --git a/l10n_pe_hr_payroll/data/base.xml b/l10n_pe_hr_payroll/data/base.xml index e4416df3..09d6d494 100644 --- a/l10n_pe_hr_payroll/data/base.xml +++ b/l10n_pe_hr_payroll/data/base.xml @@ -16,6 +16,10 @@ ]"/> + + + + Peru Employee (4ta Cat.) @@ -28,6 +32,10 @@ + + + + EE: AFP diff --git a/l10n_pe_hr_payroll/tests/common.py b/l10n_pe_hr_payroll/tests/common.py index 5b0a35aa..e8b128f1 100755 --- a/l10n_pe_hr_payroll/tests/common.py +++ b/l10n_pe_hr_payroll/tests/common.py @@ -1,65 +1,33 @@ # Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. -from logging import getLogger -from sys import float_info as sys_float_info -from collections import defaultdict -from datetime import timedelta - -from odoo.tests import common -from odoo.tools.float_utils import float_round as odoo_float_round +from odoo.addons.hr_payroll_hibou.tests import common -def process_payslip(payslip): - try: - payslip.action_payslip_done() - except AttributeError: - # v9 - payslip.process_sheet() +process_payslip = common.process_payslip -class TestPePayslip(common.TransactionCase): - debug = False - _logger = getLogger(__name__) +class TestPePayslip(common.TestPayslip): def setUp(self): super().setUp() - # TODO Question, is this the correct summing behavior for Peru? - self.env['ir.config_parameter'].set_param('hr_payroll.payslip.sum_behavior', 'date_to') - self.structure_type_id = self.ref('l10n_pe_hr_payroll.structure_type_employee') - self.resource_calendar_id = self.ref('resource.resource_calendar_std') - - float_info = sys_float_info - - def float_round(self, value, digits): - return odoo_float_round(value, digits) - - _payroll_digits = -1 - - @property - def payroll_digits(self): - if self._payroll_digits == -1: - self._payroll_digits = self.env['decimal.precision'].precision_get('Payroll') - return self._payroll_digits - - def _log(self, message): - if self.debug: - self._logger.warn(message) - + self.structure_type = self.env.ref('l10n_pe_hr_payroll.structure_type_employee') + self.structure = self.env.ref('l10n_pe_hr_payroll.hr_payroll_structure') + self.structure_type.default_struct_id = self.structure + # self.debug = True + self._log('PE structue_type %s %s and structure %s %s' % (self.structure_type, self.structure_type.name, self.structure, self.structure.name)) + self.country_pe = self.env.ref('base.pe') + def _createEmployee(self): - return self.env['hr.employee'].create({ - 'birthday': '1985-03-14', - 'country_id': self.ref('base.pe'), - 'department_id': self.ref('hr.dep_rd'), - 'gender': 'male', - 'name': 'Jared' - }) + employee = super()._createEmployee() + employee.country_id = self.country_pe + return employee def _createContract(self, employee, **kwargs): if not 'schedule_pay' in kwargs: kwargs['schedule_pay'] = 'monthly' - schedule_pay = kwargs['schedule_pay'] + config_model = self.env['hr.contract.pe_payroll_config'] - contract_model = self.env['hr.contract'] + schedule_pay = kwargs['schedule_pay'] config_values = { 'name': 'Test Config Values', 'employee_id': employee.id, @@ -77,11 +45,11 @@ class TestPePayslip(common.TransactionCase): if hasattr(config_model, key): config_values[key] = val found = True - if hasattr(contract_model, key): + if hasattr(self.contract_model, key): contract_values[key] = val found = True if not found: - self._logger.warn('cannot locate attribute names "%s" on contract' % (key, )) + self._logger.warning('cannot locate attribute names "%s" on hr.contract().' % (key, )) # PE Payroll Config Defaults Should be set on the Model if 'date_hired' not in config_values: @@ -89,68 +57,9 @@ class TestPePayslip(common.TransactionCase): config = config_model.create(config_values) contract_values['pe_payroll_config_id'] = config.id - # Some Basic Defaults - if not contract_values.get('state'): - contract_values['state'] = 'open' # Running - if not contract_values.get('structure_type_id'): - contract_values['structure_type_id'] = self.structure_type_id - if not contract_values.get('date_start'): - contract_values['date_start'] = '2016-01-01' - if not contract_values.get('date_end'): - contract_values['date_end'] = '2030-12-31' - if not contract_values.get('resource_calendar_id'): - contract_values['resource_calendar_id'] = self.resource_calendar_id + self._get_contract_defaults(contract_values) + contract = self.contract_model.create(contract_values) - # Compatibility with earlier Odoo versions - if not contract_values.get('journal_id') and hasattr(contract_model, 'journal_id'): - try: - contract_values['journal_id'] = self.env['account.journal'].search([('type', '=', 'general')], limit=1).id - except KeyError: - # Accounting not installed - pass - - contract = contract_model.create(contract_values) - - # Compatibility with Odoo 13 + # Compatibility with Odoo 14 contract.structure_type_id.default_struct_id.schedule_pay = schedule_pay return contract - - def _createPayslip(self, employee, date_from, date_to): - slip = self.env['hr.payslip'].create({ - 'name': 'Test %s From: %s To: %s' % (employee.name, date_from, date_to), - 'employee_id': employee.id, - 'date_from': date_from, - 'date_to': date_to - }) - slip._onchange_employee() - slip._onchange_worked_days_inputs() - self.assertTrue(slip.contract_id) - return slip - - def _getCategories(self, payslip): - categories = defaultdict(float) - for line in payslip.line_ids: - self._log(' line code: ' + str(line.code) + - ' category code: ' + line.category_id.code + - ' total: ' + str(line.total) + - ' rate: ' + str(line.rate) + - ' amount: ' + str(line.amount)) - category_id = line.category_id - category_code = line.category_id.code - while category_code: - categories[category_code] += line.total - category_id = category_id.parent_id - category_code = category_id.code - return categories - - def _getRules(self, payslip): - rules = defaultdict(float) - for line in payslip.line_ids: - rules[line.code] += line.total - return rules - - def assertPayrollEqual(self, first, second): - self.assertAlmostEqual(first, second, self.payroll_digits) - - def assertPayrollAlmostEqual(self, first, second): - self.assertAlmostEqual(first, second, self.payroll_digits-1)