80 lines
3.5 KiB
Python
80 lines
3.5 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from datetime import date
|
|
|
|
from odoo import Command
|
|
from odoo.tests.common import TransactionCase, freeze_time
|
|
|
|
|
|
class TestPayrollDashboardInvalidIBANWarning(TransactionCase):
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
|
|
self.invalid_iban_warning = self.env.ref('hr_payroll_account_iso20022.hr_payroll_dashboard_warning_employee_invalid_bank_account')
|
|
bank_partner = self.env['res.partner'].create({
|
|
'name': 'Bank Partner',
|
|
})
|
|
|
|
self.invalid_employee = self.env['hr.employee'].create({
|
|
'name': 'Invalid IBAN Employee',
|
|
'company_id': self.env.company.id,
|
|
'contract_date_start': date(year=2026, month=1, day=1),
|
|
'bank_account_ids': [
|
|
Command.create({
|
|
'bank_name': 'Invalid IBAN Bank',
|
|
'partner_id': bank_partner.id,
|
|
'acc_number': '1234567',
|
|
'allow_out_payment': True,
|
|
}),
|
|
],
|
|
})
|
|
self.invalid_employee.create_version({
|
|
'date_version': date(year=2025, month=1, day=1),
|
|
'contract_date_start': date(year=2025, month=1, day=1),
|
|
'contract_date_end': date(year=2025, month=12, day=31),
|
|
})
|
|
self.invalid_employee.create_version({
|
|
'date_version': date(year=2026, month=1, day=1),
|
|
'contract_date_start': date(year=2026, month=1, day=1),
|
|
'contract_date_end': date(year=2026, month=12, day=31),
|
|
})
|
|
|
|
self.valid_employee = self.env['hr.employee'].create({
|
|
'name': 'Valid IBAN Employee',
|
|
'company_id': self.env.company.id,
|
|
'contract_date_start': date(year=2026, month=1, day=1),
|
|
'bank_account_ids': [
|
|
Command.create({
|
|
'bank_name': 'Valid IBAN Bank',
|
|
'partner_id': bank_partner.id,
|
|
'acc_number': 'BE71096123456769',
|
|
'allow_out_payment': True,
|
|
}),
|
|
],
|
|
})
|
|
self.valid_employee.create_version({
|
|
'date_version': date(year=2025, month=1, day=1),
|
|
'contract_date_start': date(year=2025, month=1, day=1),
|
|
'contract_date_end': date(year=2025, month=12, day=31),
|
|
})
|
|
self.valid_employee.create_version({
|
|
'date_version': date(year=2026, month=1, day=1),
|
|
'contract_date_start': date(year=2026, month=1, day=1),
|
|
'contract_date_end': date(year=2026, month=12, day=31),
|
|
})
|
|
|
|
@freeze_time('2026-02-01')
|
|
def test_invalid_employees_in_warning(self):
|
|
warnings = self.env['hr.payslip'].get_dashboard_warnings()
|
|
|
|
warning_data = next((w for w in warnings if w['string'] == self.invalid_iban_warning.name), None)
|
|
self.assertTrue(warning_data, "There should be a dashboard warning for invalid IBAN employees.")
|
|
|
|
employees = self.env['hr.employee'].search(warning_data['action']['domain'])
|
|
self.assertIn(self.invalid_employee, employees, "Employee with invalid IBAN should appear in warning.")
|
|
self.assertNotIn(self.valid_employee, employees, "Employee with valid IBAN should not appear in warning.")
|
|
|
|
invalid_employee_id_count = employees.mapped('id').count(self.invalid_employee.id)
|
|
self.assertEqual(invalid_employee_id_count, 1, "Invalid IBAN employee should only be counted once even with multiple versions.")
|