diff --git a/addons/account_payment/models/payment_provider.py b/addons/account_payment/models/payment_provider.py index ab949b39f9d..406db422fbe 100644 --- a/addons/account_payment/models/payment_provider.py +++ b/addons/account_payment/models/payment_provider.py @@ -22,7 +22,7 @@ class PaymentProvider(models.Model): for provider in self: payment_method = self.env['account.payment.method.line'].search([ ('journal_id.company_id', '=', provider.company_id.id), - ('code', '=', provider.code) + ('code', '=', provider._get_code()) ], limit=1) if payment_method: provider.journal_id = payment_method.journal_id @@ -31,15 +31,14 @@ class PaymentProvider(models.Model): def _inverse_journal_id(self): for provider in self: + code = provider._get_code() payment_method_line = self.env['account.payment.method.line'].search([ ('journal_id.company_id', '=', provider.company_id.id), - ('code', '=', provider.code), + ('code', '=', code), ], limit=1) if provider.journal_id: if not payment_method_line: - default_payment_method_id = provider._get_default_payment_method_id( - provider.code - ) + default_payment_method_id = provider._get_default_payment_method_id(code) existing_payment_method_line = self.env['account.payment.method.line'].search([ ('payment_method_id', '=', default_payment_method_id), ('journal_id', '=', provider.journal_id.id), diff --git a/addons/account_payment/models/payment_transaction.py b/addons/account_payment/models/payment_transaction.py index da6e68093e2..15994198071 100644 --- a/addons/account_payment/models/payment_transaction.py +++ b/addons/account_payment/models/payment_transaction.py @@ -145,7 +145,7 @@ class PaymentTransaction(models.Model): ) payment_method_line = self.provider_id.journal_id.inbound_payment_method_line_ids\ - .filtered(lambda l: l.code == self.provider_code) + .filtered(lambda l: l.code == self.provider_id._get_code()) payment_values = { 'amount': abs(self.amount), # A tx may have a negative amount, but a payment must >= 0 'payment_type': 'inbound' if self.amount > 0 else 'outbound', diff --git a/addons/payment/models/payment_provider.py b/addons/payment/models/payment_provider.py index 281c4e832c4..73cc1582b5a 100644 --- a/addons/payment/models/payment_provider.py +++ b/addons/payment/models/payment_provider.py @@ -687,3 +687,25 @@ class PaymentProvider(models.Model): 'token_inline_form_view_id': None, 'express_checkout_form_view_id': None, } + + def _get_provider_name(self): + """ Return the translated name of the provider. + + Note: self.ensure_one() + + :return: The translated name of the provider. + :rtype: str + """ + self.ensure_one() + return dict(self._fields['code']._description_selection(self.env))[self.code] + + def _get_code(self): + """ Return the code of the provider. + + Note: self.ensure_one() + + :return: The code of the provider. + :rtype: str + """ + self.ensure_one() + return self.code diff --git a/addons/payment/tests/common.py b/addons/payment/tests/common.py index 6f42fcecf19..0c66cd23563 100644 --- a/addons/payment/tests/common.py +++ b/addons/payment/tests/common.py @@ -6,9 +6,11 @@ from unittest.mock import patch from lxml import objectify from odoo.fields import Command -from odoo.addons.base.tests.common import BaseCommon +from odoo.osv.expression import AND from odoo.tools.misc import hmac as hmac_tool +from odoo.addons.base.tests.common import BaseCommon + _logger = logging.getLogger(__name__) @@ -132,14 +134,13 @@ class PaymentCommon(BaseCommon): """ company = company or cls.env.company update_values = update_values or {} + provider_domain = cls._get_provider_domain(code) provider = cls.env['payment.provider'].sudo().search( - [('code', '=', code), ('company_id', '=', company.id)], limit=1 + AND([provider_domain, [('company_id', '=', company.id)]]), limit=1 ) if not provider: - base_provider = cls.env['payment.provider'].sudo().search( - [('code', '=', code)], limit=1 - ) + base_provider = cls.env['payment.provider'].sudo().search(provider_domain, limit=1) if not base_provider: _logger.error("no payment.provider found for code %s", code) return cls.env['payment.provider'] @@ -150,6 +151,10 @@ class PaymentCommon(BaseCommon): provider.write(update_values) return provider + @classmethod + def _get_provider_domain(cls, code): + return [('code', '=', code)] + def _create_transaction(self, flow, sudo=True, **values): default_values = { 'amount': self.amount, diff --git a/addons/payment/views/payment_templates.xml b/addons/payment/views/payment_templates.xml index 5e158172a3c..293cabe9c4a 100644 --- a/addons/payment/views/payment_templates.xml +++ b/addons/payment/views/payment_templates.xml @@ -69,7 +69,7 @@ type="radio" t-att-checked="token.id == default_payment_option_id" t-att-data-payment-option-id="token.id" - t-att-data-provider="token.provider_code" + t-att-data-provider="provider._get_code()" data-payment-option-type="token"/> @@ -90,8 +90,8 @@