213 lines
9.7 KiB
Python
213 lines
9.7 KiB
Python
from lxml import etree
|
|
from odoo.addons.account_iso20022.tests.test_iso_variants_credit_transfer import TestSwedishIsoCreditTransfer
|
|
from odoo.tests import tagged
|
|
from odoo.tools.misc import file_path
|
|
from freezegun import freeze_time
|
|
|
|
|
|
@tagged('post_install', 'post_install_l10n', '-at_install')
|
|
class TestSwedishIsoBBANCreditTransfer(TestSwedishIsoCreditTransfer):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.swedish_partner_bank.bank_id = cls.swedish_bank
|
|
cls.company.company_registry = '555555-5555'
|
|
cls.company.partner_id.name = 'Creditor'
|
|
cls.swedish_partner.city = 'Swedish City'
|
|
|
|
@freeze_time('2024-03-04')
|
|
def test_bankgiro(self):
|
|
self.company_data['default_journal_bank'].bank_account_id.allow_out_payment = False
|
|
self.company_data['default_journal_bank'].bank_acc_number = '6543-2106'
|
|
self.swedish_partner_bank.lock_trust_fields = False
|
|
self.swedish_partner_bank.acc_number = '1234-5617'
|
|
self.assertEqual(self.swedish_partner_bank.acc_type, 'bankgiro')
|
|
batch = self.generate_iso20022_batch_payment(self.swedish_partner, '78949')
|
|
sct_doc = self.get_sct_doc_from_batch(batch)
|
|
xml_file_path = file_path('l10n_se_bban/tests/data/bankgiro.xml')
|
|
expected_tree = etree.parse(xml_file_path)
|
|
self.assertXmlTreeEqual(sct_doc, expected_tree.getroot())
|
|
|
|
@freeze_time('2024-03-04')
|
|
def test_plusgiro(self):
|
|
self.company_data['default_journal_bank'].bank_account_id.allow_out_payment = False
|
|
self.company_data['default_journal_bank'].bank_acc_number = '654321-9'
|
|
self.swedish_partner_bank.lock_trust_fields = False
|
|
self.swedish_partner_bank.acc_number = '543210-9'
|
|
self.assertEqual(self.swedish_partner_bank.acc_type, 'plusgiro')
|
|
batch = self.generate_iso20022_batch_payment(self.swedish_partner)
|
|
sct_doc = self.get_sct_doc_from_batch(batch)
|
|
xml_file_path = file_path('l10n_se_bban/tests/data/plusgiro.xml')
|
|
expected_tree = etree.parse(xml_file_path)
|
|
self.assertXmlTreeEqual(sct_doc, expected_tree.getroot())
|
|
|
|
@freeze_time('2024-03-04')
|
|
def test_bban(self):
|
|
self.company_data['default_journal_bank'].bank_account_id.allow_out_payment = False
|
|
self.company_data['default_journal_bank'].bank_acc_number = '12200108451'
|
|
self.assertEqual(self.company_data['default_journal_bank'].bank_account_id.acc_type, 'bban_se')
|
|
self.swedish_partner_bank.lock_trust_fields = False
|
|
self.swedish_partner_bank.acc_number = '96602675631'
|
|
self.assertEqual(self.swedish_partner_bank.acc_type, 'bban_se')
|
|
batch = self.generate_iso20022_batch_payment(self.swedish_partner)
|
|
sct_doc = self.get_sct_doc_from_batch(batch)
|
|
xml_file_path = file_path('l10n_se_bban/tests/data/bban.xml')
|
|
expected_tree = etree.parse(xml_file_path)
|
|
self.assertXmlTreeEqual(sct_doc, expected_tree.getroot())
|
|
|
|
@freeze_time('2024-03-04')
|
|
def test_batch_payment_with_iban_and_bban(self):
|
|
bban_partner = self.env['res.partner'].create({
|
|
'name': 'Swedish Partner',
|
|
'street': 'Swedish Street',
|
|
'country_id': self.env.ref('base.se').id,
|
|
})
|
|
self.env['res.partner.bank'].create({
|
|
'acc_number': '96602675631',
|
|
'allow_out_payment': True,
|
|
'partner_id': bban_partner.id,
|
|
'bank_name': 'Swedbank',
|
|
})
|
|
payments = self.env['account.payment'].create([{
|
|
'journal_id': self.company_data['default_journal_bank'].id,
|
|
'payment_method_line_id': self.payment_method_line.id,
|
|
'payment_type': 'outbound',
|
|
'date': '2024-03-04',
|
|
'amount': 500,
|
|
'partner_id': self.swedish_partner.id,
|
|
'partner_type': 'supplier',
|
|
'memo': '123',
|
|
}, {
|
|
'journal_id': self.company_data['default_journal_bank'].id,
|
|
'payment_method_line_id': self.payment_method_line.id,
|
|
'payment_type': 'outbound',
|
|
'date': '2024-03-04',
|
|
'amount': 500,
|
|
'partner_id': bban_partner.id,
|
|
'partner_type': 'supplier',
|
|
'memo': '456',
|
|
}])
|
|
batch = self.env['account.batch.payment'].create({
|
|
'journal_id': self.company_data['default_journal_bank'].id,
|
|
'payment_ids': payments.ids,
|
|
'payment_method_id': self.payment_method.id,
|
|
'batch_type': 'outbound',
|
|
'iso20022_batch_booking': True,
|
|
})
|
|
batch.validate_batch()
|
|
batch_attachment = self.env['ir.attachment'].search_count([
|
|
('res_model', '=', 'account.batch.payment'),
|
|
('res_id', '=', batch.id),
|
|
('mimetype', '=', 'application/zip'),
|
|
])
|
|
self.assertEqual(batch_attachment, 1)
|
|
|
|
@freeze_time('2024-03-04')
|
|
def test_batch_payment_with_different_banks(self):
|
|
nordea, swedbank = self.env['res.bank'].create([{
|
|
'name': 'Nordea',
|
|
'bic': 'NDEASESS',
|
|
}, {
|
|
'name': 'Swedbank',
|
|
'bic': 'SWEDSESS',
|
|
}])
|
|
nordea_partner, swedbank_partner = self.env['res.partner'].create([{
|
|
'name': 'Nordea Customer',
|
|
'country_id': self.env.ref('base.se').id,
|
|
}, {
|
|
'name': 'Swedbank Customer',
|
|
'country_id': self.env.ref('base.se').id,
|
|
}])
|
|
nordea_partner_bank, swedbank_partner_bank = self.env['res.partner.bank'].create([{
|
|
'acc_number': '654321-9',
|
|
'allow_out_payment': True,
|
|
'partner_id': self.company.partner_id.id,
|
|
'bank_id': nordea.id,
|
|
}, {
|
|
'acc_number': '96602675632',
|
|
'allow_out_payment': True,
|
|
'partner_id': self.company.partner_id.id,
|
|
'bank_id': swedbank.id,
|
|
}])
|
|
nordea_journal, swedbank_journal = self.env['account.journal'].create([{
|
|
'name': 'Nordea Journal',
|
|
'code': 'BK-NORD',
|
|
'type': 'bank',
|
|
'sepa_pain_version': 'pain.001.001.03',
|
|
'company_id': self.company.id,
|
|
'bank_account_id': nordea_partner_bank.id,
|
|
}, {
|
|
'name': 'Swedbank Journal',
|
|
'code': 'BK-SWED',
|
|
'type': 'bank',
|
|
'sepa_pain_version': 'pain.001.001.03',
|
|
'company_id': self.company.id,
|
|
'bank_account_id': swedbank_partner_bank.id,
|
|
}])
|
|
nordea_payment, swedbank_payment = self.env['account.payment'].create([{
|
|
'journal_id': nordea_journal.id,
|
|
'payment_method_line_id': nordea_journal.outbound_payment_method_line_ids.filtered(lambda pml: pml.code == 'iso20022_se').id,
|
|
'payment_type': 'outbound',
|
|
'date': '2024-03-04',
|
|
'amount': 500,
|
|
'partner_id': nordea_partner.id,
|
|
'partner_bank_id': nordea_partner_bank.id,
|
|
'partner_type': 'supplier',
|
|
'memo': '123',
|
|
}, {
|
|
'journal_id': swedbank_journal.id,
|
|
'payment_method_line_id': swedbank_journal.outbound_payment_method_line_ids.filtered(lambda pml: pml.code == 'iso20022_se').id,
|
|
'payment_type': 'outbound',
|
|
'date': '2024-03-04',
|
|
'amount': 500,
|
|
'partner_id': swedbank_partner.id,
|
|
'partner_bank_id': swedbank_partner_bank.id,
|
|
'partner_type': 'supplier',
|
|
'memo': '456',
|
|
}])
|
|
nordea_batch, swedbank_batch = self.env['account.batch.payment'].create([{
|
|
'journal_id': nordea_journal.id,
|
|
'payment_ids': nordea_payment.ids,
|
|
'payment_method_id': self.payment_method.id,
|
|
'batch_type': 'outbound',
|
|
'iso20022_batch_booking': True,
|
|
}, {
|
|
'journal_id': swedbank_journal.id,
|
|
'payment_ids': swedbank_payment.ids,
|
|
'payment_method_id': self.payment_method.id,
|
|
'batch_type': 'outbound',
|
|
'iso20022_batch_booking': True,
|
|
}])
|
|
nordea_batch.validate_batch()
|
|
swedbank_batch.validate_batch()
|
|
nordea_xml_file = self.get_sct_doc_from_batch(nordea_batch)
|
|
swedbank_xml_file = self.get_sct_doc_from_batch(swedbank_batch)
|
|
nordea_xml_file_path = file_path('l10n_se_bban/tests/data/test_batch_nordea.xml')
|
|
swedbank_xml_file_path = file_path('l10n_se_bban/tests/data/test_batch_swedbank.xml')
|
|
|
|
self.assertXmlTreeEqual(nordea_xml_file, etree.parse(nordea_xml_file_path).getroot())
|
|
self.assertXmlTreeEqual(swedbank_xml_file, etree.parse(swedbank_xml_file_path).getroot())
|
|
|
|
def test_10n_se_account_types_computation(self):
|
|
self.swedish_partner_bank.lock_trust_fields = False
|
|
self.swedish_partner_bank.acc_number = '1-8'
|
|
self.assertEqual(self.swedish_partner_bank.acc_type, 'plusgiro')
|
|
self.swedish_partner_bank.acc_number = '112-3'
|
|
self.assertEqual(self.swedish_partner_bank.acc_type, 'plusgiro')
|
|
self.swedish_partner_bank.acc_number = '38201-0'
|
|
self.assertEqual(self.swedish_partner_bank.acc_type, 'plusgiro')
|
|
self.swedish_partner_bank.acc_number = '678653833066'
|
|
self.assertEqual(self.swedish_partner_bank.acc_type, 'bban_se')
|
|
self.swedish_partner_bank.acc_number = '99603406872188'
|
|
self.assertEqual(self.swedish_partner_bank.acc_type, 'bban_se')
|
|
|
|
@freeze_time('2024-03-04')
|
|
def test_swedish_iso_pain_09_xml(self):
|
|
batch = self.generate_iso20022_batch_payment(self.swedish_partner)
|
|
sct_doc = self.get_sct_doc_from_batch(batch)
|
|
xml_file_path = file_path('l10n_se_bban/tests/data/pain.001.001.09.se.xml')
|
|
expected_tree = etree.parse(xml_file_path)
|
|
|
|
self.assertXmlTreeEqual(sct_doc, expected_tree.getroot())
|