mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
126 lines
6.1 KiB
Python
126 lines
6.1 KiB
Python
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
|
|
|
|
|
import odoo.tests
|
|
from odoo.addons.hr_payroll_account.tests.test_hr_payroll_account import TestHrPayrollAccount as TestBase
|
|
|
|
|
|
@odoo.tests.tagged('post_install', '-at_install')
|
|
class TestHrPayrollAccount(TestBase):
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
# upstream code no-longer sets the journal, though it does create it....
|
|
self.hr_structure_softwaredeveloper.journal_id = self.account_journal
|
|
# upstream code no-longer has any accounts (just makes journal entries without any lines)
|
|
demo_account = self.env.ref('hr_payroll_account.demo_account')
|
|
self.hr_structure_softwaredeveloper.rule_ids.filtered(lambda r: r.code == 'HRA').account_debit = demo_account
|
|
# Need a default account as there will be adjustment lines equal and opposite to the above PT rule...
|
|
self.account_journal.default_account_id = demo_account
|
|
|
|
# Two employees, but in stock tests they share the same partner...
|
|
self.hr_employee_mark.address_home_id = self.env['res.partner'].create({
|
|
'name': 'employee_mark',
|
|
})
|
|
|
|
# This rule has a partner, and is the only one with any accounting side effects.
|
|
# Remove partner to use the home address...
|
|
self.rule = self.hr_structure_softwaredeveloper.rule_ids.filtered(lambda r: r.code == 'HRA')
|
|
self.rule.partner_id = False
|
|
|
|
# configure journal to be able to make payments
|
|
ap = self.hr_employee_mark.address_home_id.property_account_payable_id
|
|
self.assertTrue(ap)
|
|
# note there is no NET rule, so I just use a random allowance with fixed 800.0 amount
|
|
net_rule = self.hr_structure_softwaredeveloper.rule_ids.filtered(lambda r: r.code == 'CA')
|
|
self.assertTrue(net_rule)
|
|
net_rule.account_credit = ap
|
|
bank_journal = self.env['account.journal'].search([('type', '=', 'bank')], limit=1)
|
|
self.account_journal.payroll_payment_journal_id = bank_journal
|
|
self.account_journal.payroll_payment_method_id = bank_journal.outbound_payment_method_line_ids[0].payment_method_id
|
|
|
|
def _setup_fiscal_position(self):
|
|
account_rule_debit = self.rule.account_debit
|
|
self.assertTrue(account_rule_debit)
|
|
account_other = self.env['account.account'].search([('id', '!=', account_rule_debit.id)], limit=1)
|
|
self.assertTrue(account_other)
|
|
fp = self.env['account.fiscal.position'].create({
|
|
'name': 'Salary Remap 1',
|
|
'account_ids': [(0, 0, {
|
|
'account_src_id': account_rule_debit.id,
|
|
'account_dest_id': account_other.id,
|
|
})]
|
|
})
|
|
self.hr_contract_john.payroll_fiscal_position_id = fp
|
|
|
|
def _setup_fiscal_position_empty(self):
|
|
self._setup_fiscal_position()
|
|
self.hr_contract_john.payroll_fiscal_position_id.write({'account_ids': [(5, 0, 0)]})
|
|
|
|
def test_00_hr_payslip_run(self):
|
|
# Original method groups but has no partners.
|
|
self.account_journal.payroll_entry_type = 'original'
|
|
super().test_00_hr_payslip_run()
|
|
self.assertEqual(len(self.payslip_run.slip_ids), 2)
|
|
self.assertEqual(len(self.payslip_run.slip_ids.mapped('move_id')), 1)
|
|
self.assertEqual(len(self.payslip_run.slip_ids.mapped('move_id.line_ids.partner_id')), 0)
|
|
|
|
def test_00_fiscal_position(self):
|
|
self._setup_fiscal_position()
|
|
self.test_00_hr_payslip_run()
|
|
self.assertEqual(len(self.payslip_run.slip_ids.mapped('move_id.line_ids.account_id')), 3)
|
|
|
|
def test_00_fiscal_position_empty(self):
|
|
self._setup_fiscal_position_empty()
|
|
self.test_00_hr_payslip_run()
|
|
self.assertEqual(len(self.payslip_run.slip_ids.mapped('move_id.line_ids.account_id')), 2)
|
|
|
|
def test_01_hr_payslip_run(self):
|
|
# Grouped method groups but has partners.
|
|
self.account_journal.payroll_entry_type = 'grouped'
|
|
super().test_01_hr_payslip_run()
|
|
self.assertEqual(len(self.payslip_run.slip_ids), 2)
|
|
self.assertEqual(len(self.payslip_run.slip_ids.mapped('move_id')), 1)
|
|
self.assertEqual(len(self.payslip_run.slip_ids.mapped('move_id.line_ids.partner_id')), 2)
|
|
# what is going on with the 3rd one?!
|
|
slips_to_pay = self.payslip_run.slip_ids
|
|
action = slips_to_pay.action_register_payment()
|
|
payment_ids = action['res_ids']
|
|
self.assertEqual(len(payment_ids), 2)
|
|
|
|
def test_01_fiscal_position(self):
|
|
self._setup_fiscal_position()
|
|
self.test_01_hr_payslip_run()
|
|
self.assertEqual(len(self.payslip_run.slip_ids.mapped('move_id.line_ids.account_id')), 3)
|
|
|
|
def test_01_fiscal_position_empty(self):
|
|
self._setup_fiscal_position_empty()
|
|
self.test_01_hr_payslip_run()
|
|
self.assertEqual(len(self.payslip_run.slip_ids.mapped('move_id.line_ids.account_id')), 2)
|
|
|
|
def test_01_2_hr_payslip_run(self):
|
|
# Payslip method makes an entry per payslip
|
|
self.account_journal.payroll_entry_type = 'slip'
|
|
# Call 'other' implementation.
|
|
super().test_01_hr_payslip_run()
|
|
self.assertEqual(len(self.payslip_run.slip_ids), 2)
|
|
self.assertEqual(len(self.payslip_run.slip_ids.mapped('move_id')), 2)
|
|
self.assertEqual(len(self.payslip_run.slip_ids.mapped('move_id.line_ids.partner_id')), 2)
|
|
slips_to_pay = self.payslip_run.slip_ids
|
|
# what is going on with the 3rd one?!
|
|
# it is possible to filter it out, but it doesn't change it
|
|
self.assertEqual(len(slips_to_pay), 2)
|
|
action = slips_to_pay.action_register_payment()
|
|
payment_ids = action['res_ids']
|
|
self.assertEqual(len(payment_ids), 2)
|
|
|
|
def test_01_2_fiscal_position(self):
|
|
self._setup_fiscal_position()
|
|
self.test_01_2_hr_payslip_run()
|
|
self.assertEqual(len(self.payslip_run.slip_ids.mapped('move_id.line_ids.account_id')), 3)
|
|
|
|
def test_01_2_fiscal_position_empty(self):
|
|
self._setup_fiscal_position_empty()
|
|
self.test_01_2_hr_payslip_run()
|
|
self.assertEqual(len(self.payslip_run.slip_ids.mapped('move_id.line_ids.account_id')), 2)
|