74 lines
2.9 KiB
Python
74 lines
2.9 KiB
Python
import base64
|
|
from lxml import etree
|
|
from odoo.addons.account_iso20022.tests.test_iso20022_common import TestISO20022CommonCreditTransfer
|
|
from odoo.tests import tagged
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestISO20022GeneralCreditTransfer(TestISO20022CommonCreditTransfer):
|
|
@classmethod
|
|
def collect_company_accounting_data(cls, company):
|
|
res = super().collect_company_accounting_data(company)
|
|
res['default_journal_bank'].update({
|
|
'bank_acc_number': 'BE68539007547034',
|
|
})
|
|
return res
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.env.ref('base.JPY').active = True
|
|
cls.payment_method = cls.env.ref('account_iso20022.account_payment_method_iso20022')
|
|
cls.company_data['default_journal_bank'].available_payment_method_ids |= cls.payment_method
|
|
cls.payment_method_line = cls.env['account.payment.method.line'].sudo().create([{
|
|
'name': 'International Credit Transfer',
|
|
'payment_method_id': cls.payment_method.id,
|
|
'journal_id': cls.company_data['default_journal_bank'].id
|
|
}])
|
|
|
|
def test_iso_20022_currency_decimal_formatting(self):
|
|
"""
|
|
Test that currencies with 0 decimal places (like JPY) are formatted
|
|
as integers in the XML (e.g., '1000' instead of '1000.00').
|
|
"""
|
|
partner_jp = self.env['res.partner'].create({
|
|
'name': 'Japanese Partner',
|
|
'country_id': self.env.ref('base.jp').id,
|
|
})
|
|
|
|
partner_bank = self.env['res.partner.bank'].create({
|
|
'acc_number': 'JP1234567890',
|
|
'partner_id': partner_jp.id,
|
|
'allow_out_payment': True,
|
|
})
|
|
|
|
payment = 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': 1000.0,
|
|
'currency_id': self.env.ref('base.JPY').id,
|
|
'partner_id': partner_jp.id,
|
|
'partner_type': 'supplier',
|
|
'partner_bank_id': partner_bank.id,
|
|
})
|
|
payment.action_post()
|
|
|
|
batch = self.env['account.batch.payment'].create({
|
|
'journal_id': self.company_data['default_journal_bank'].id,
|
|
'payment_ids': [(4, payment.id)],
|
|
'payment_method_id': self.payment_method.id,
|
|
'batch_type': 'outbound',
|
|
'iso20022_batch_booking': True,
|
|
})
|
|
batch._send_after_validation()
|
|
|
|
xml_content = base64.b64decode(batch.export_file)
|
|
xml_doc = etree.fromstring(xml_content)
|
|
ns = {'ns': next(iter(xml_doc.nsmap.values()))}
|
|
|
|
amount_node = xml_doc.find('.//ns:InstdAmt', namespaces=ns)
|
|
self.assertEqual(amount_node.text, '1000')
|
|
self.assertEqual(amount_node.attrib['Ccy'], 'JPY')
|