Files
enterprise-addons/account_iso20022/tests/test_iso20022_charge_bearer.py
T

152 lines
5.4 KiB
Python

from odoo import Command
from odoo.addons.account_iso20022.tests.test_iso20022_common import TestISO20022CommonCreditTransfer
from odoo.tests import tagged
@tagged('post_install', '-at_install')
class TestISO20022ChargeBearer(TestISO20022CommonCreditTransfer):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env.ref('base.EUR').active = True
cls.env.user.group_ids |= cls.env.ref('account.group_validate_bank_account')
cls.payment_method = cls.env.ref('account_iso20022.account_payment_method_iso20022')
cls.bank_journal = cls.company_data['default_journal_bank']
cls.bank_ing = cls.env['res.bank'].create({
'name': 'ING',
'bic': 'BBRUBEBB',
})
cls.bank_journal.write({
'bank_id': cls.bank_ing.id,
'bank_acc_number': 'BE48363523682327',
'currency_id': cls.env.ref('base.EUR').id,
'available_payment_method_ids': [Command.link(cls.payment_method.id)],
})
cls.payment_method_line = cls.env['account.payment.method.line'].sudo().create([{
'name': cls.payment_method.name,
'payment_method_id': cls.payment_method.id,
'journal_id': cls.company_data['default_journal_bank'].id
}])
cls.env['res.partner.bank'].create({
'acc_type': 'iban',
'partner_id': cls.partner_a.id,
'acc_number': 'BE08429863697813',
'allow_out_payment': True,
'bank_id': cls.bank_ing.id,
'currency_id': cls.env.ref('base.USD').id,
})
# A country is required for sepa transfer
cls.partner_a.country_id = cls.env.ref('base.us')
cls.partner_b.country_id = cls.env.ref('base.us')
def test_default_charge_bearer(self):
"""
The default charge bearer should be 'SHAR'.
"""
payment = self.create_payment(
self.bank_journal,
self.partner_a,
None,
500,
)
payment.action_post()
batch = self.env['account.batch.payment'].create({
'journal_id': self.bank_journal.id,
'payment_ids': [Command.link(payment.id)],
'payment_method_id': self.payment_method.id,
'batch_type': 'outbound',
})
batch.validate_batch()
sct_doc = self.get_sct_doc_from_batch(batch)
charge_bearer = sct_doc.find('.//{*}PmtInf/{*}ChrgBr').text
self.assertEqual(charge_bearer, 'SHAR')
def test_journal_charge_bearer(self):
"""
The charge bearer should be the one set on the journal.
"""
self.bank_journal.iso20022_charge_bearer = 'CRED'
payment = self.create_payment(
self.bank_journal,
self.partner_a,
None,
500,
)
payment.action_post()
batch = self.env['account.batch.payment'].create({
'journal_id': self.bank_journal.id,
'payment_ids': [Command.link(payment.id)],
'payment_method_id': self.payment_method.id,
'batch_type': 'outbound',
})
batch.validate_batch()
sct_doc = self.get_sct_doc_from_batch(batch)
charge_bearer = sct_doc.find('.//{*}PmtInf/{*}ChrgBr').text
self.assertEqual(charge_bearer, 'CRED')
def test_payment_charge_bearer(self):
"""
The charge bearer should be the one set on the payment.
"""
self.bank_journal.iso20022_charge_bearer = 'CRED'
payment = self.create_payment(
self.bank_journal,
self.partner_a,
None,
500,
)
payment.iso20022_charge_bearer = 'DEBT'
payment.action_post()
batch = self.env['account.batch.payment'].create({
'journal_id': self.bank_journal.id,
'payment_ids': [Command.link(payment.id)],
'payment_method_id': self.payment_method.id,
'batch_type': 'outbound',
})
batch.validate_batch()
sct_doc = self.get_sct_doc_from_batch(batch)
charge_bearer = sct_doc.find('.//{*}PmtInf/{*}ChrgBr').text
self.assertEqual(charge_bearer, 'DEBT')
def test_payment_multiple_charge_bearers(self):
"""
The charge bearer should be set on the payments if there are multiple.
"""
payment_1 = self.create_payment(
self.bank_journal,
self.partner_a,
None,
500,
)
payment_1.iso20022_charge_bearer = 'DEBT'
payment_1.action_post()
payment_2 = self.create_payment(
self.bank_journal,
self.partner_a,
None,
700,
)
payment_2.iso20022_charge_bearer = 'CRED'
payment_2.action_post()
batch = self.env['account.batch.payment'].create({
'journal_id': self.bank_journal.id,
'payment_ids': [Command.link(payment_1.id), Command.link(payment_2.id)],
'payment_method_id': self.payment_method.id,
'batch_type': 'outbound',
})
batch.validate_batch()
sct_doc = self.get_sct_doc_from_batch(batch)
charge_bearer_1 = sct_doc.find('.//{*}PmtInf/{*}CdtTrfTxInf[1]/{*}ChrgBr').text
charge_bearer_2 = sct_doc.find('.//{*}PmtInf/{*}CdtTrfTxInf[2]/{*}ChrgBr').text
self.assertEqual(charge_bearer_1, 'DEBT')
self.assertEqual(charge_bearer_2, 'CRED')