+
@@ -125,8 +125,8 @@
-
-
+
+
Communication:
diff --git a/addons/account_payment/views/payment_acquirer_views.xml b/addons/account_payment/views/payment_provider_views.xml
similarity index 65%
rename from addons/account_payment/views/payment_acquirer_views.xml
rename to addons/account_payment/views/payment_provider_views.xml
index 9cf943209e1..7e842f8b74c 100644
--- a/addons/account_payment/views/payment_acquirer_views.xml
+++ b/addons/account_payment/views/payment_provider_views.xml
@@ -1,10 +1,10 @@
-
- payment.acquirer.form
- payment.acquirer
-
+
+ payment.provider.form
+ payment.provider
+
@@ -14,7 +14,7 @@
+ attrs="{'required': [('state', '!=', 'disabled'), ('code', 'not in', ['none', 'transfer'])]}"/>
diff --git a/addons/account_payment/wizards/account_payment_register.py b/addons/account_payment/wizards/account_payment_register.py
index accc6b2531f..214e4bff7ec 100644
--- a/addons/account_payment/wizards/account_payment_register.py
+++ b/addons/account_payment/wizards/account_payment_register.py
@@ -13,7 +13,7 @@ class AccountPaymentRegister(models.TransientModel):
domain='''[
('id', 'in', suitable_payment_token_ids),
]''',
- help="Note that tokens from acquirers set to only authorize transactions (instead of capturing the amount) are "
+ help="Note that tokens from providers set to only authorize transactions (instead of capturing the amount) are "
"not available.")
# == Display purpose fields ==
@@ -44,9 +44,9 @@ class AccountPaymentRegister(models.TransientModel):
wizard.suitable_payment_token_ids = self.env['payment.token'].sudo().search([
('company_id', '=', wizard.company_id.id),
- ('acquirer_id.capture_manually', '=', False),
+ ('provider_id.capture_manually', '=', False),
('partner_id', 'in', related_partner_ids.ids),
- ('acquirer_id', '=', wizard.payment_method_line_id.payment_acquirer_id.id),
+ ('provider_id', '=', wizard.payment_method_line_id.payment_provider_id.id),
])
else:
wizard.suitable_payment_token_ids = [Command.clear()]
@@ -55,13 +55,13 @@ class AccountPaymentRegister(models.TransientModel):
def _compute_use_electronic_payment_method(self):
for wizard in self:
# Get a list of all electronic payment method codes.
- # These codes are comprised of the providers of each payment acquirer.
- codes = [key for key in dict(self.env['payment.acquirer']._fields['provider']._description_selection(self.env))]
+ # These codes are comprised of the codes of each payment provider.
+ codes = [key for key in dict(self.env['payment.provider']._fields['code']._description_selection(self.env))]
wizard.use_electronic_payment_method = wizard.payment_method_code in codes
@api.onchange('can_edit_wizard', 'payment_method_line_id', 'journal_id')
def _compute_payment_token_id(self):
- codes = [key for key in dict(self.env['payment.acquirer']._fields['provider']._description_selection(self.env))]
+ codes = [key for key in dict(self.env['payment.provider']._fields['code']._description_selection(self.env))]
for wizard in self:
related_partner_ids = (
wizard.partner_id
@@ -76,8 +76,8 @@ class AccountPaymentRegister(models.TransientModel):
wizard.payment_token_id = self.env['payment.token'].sudo().search([
('company_id', '=', wizard.company_id.id),
('partner_id', 'in', related_partner_ids.ids),
- ('acquirer_id.capture_manually', '=', False),
- ('acquirer_id', '=', wizard.payment_method_line_id.payment_acquirer_id.id),
+ ('provider_id.capture_manually', '=', False),
+ ('provider_id', '=', wizard.payment_method_line_id.payment_provider_id.id),
], limit=1)
else:
wizard.payment_token_id = False
diff --git a/addons/account_payment/wizards/payment_refund_wizard.py b/addons/account_payment/wizards/payment_refund_wizard.py
index a05abffa63f..2949f4d24bb 100644
--- a/addons/account_payment/wizards/payment_refund_wizard.py
+++ b/addons/account_payment/wizards/payment_refund_wizard.py
@@ -26,7 +26,7 @@ class PaymentRefundWizard(models.TransientModel):
string="Refund Amount", compute='_compute_amount_to_refund', store=True, readonly=False
)
currency_id = fields.Many2one(string="Currency", related='transaction_id.currency_id')
- support_refund = fields.Selection(related='transaction_id.acquirer_id.support_refund')
+ support_refund = fields.Selection(related='transaction_id.provider_id.support_refund')
has_pending_refund = fields.Boolean(
string="Has a pending refund", compute='_compute_has_pending_refund'
)
diff --git a/addons/account_payment/wizards/payment_refund_wizard_views.xml b/addons/account_payment/wizards/payment_refund_wizard_views.xml
index 3b66d711b81..29c6964ebed 100644
--- a/addons/account_payment/wizards/payment_refund_wizard_views.xml
+++ b/addons/account_payment/wizards/payment_refund_wizard_views.xml
@@ -14,7 +14,7 @@
Warning! There is a refund pending for this payment.
Wait a moment for it to be processed. If the refund is still pending in a
- few minutes, please check your payment acquirer configuration.
+ few minutes, please check your payment provider configuration.
diff --git a/addons/l10n_ar_website_sale/demo/website_demo.xml b/addons/l10n_ar_website_sale/demo/website_demo.xml
index 5300c3af375..ff35d98c716 100644
--- a/addons/l10n_ar_website_sale/demo/website_demo.xml
+++ b/addons/l10n_ar_website_sale/demo/website_demo.xml
@@ -7,8 +7,8 @@
-
-
+
+
diff --git a/addons/payment/__init__.py b/addons/payment/__init__.py
index 3c720f37f45..5ceed4b6aeb 100644
--- a/addons/payment/__init__.py
+++ b/addons/payment/__init__.py
@@ -8,11 +8,11 @@ from . import wizards
from odoo import api, SUPERUSER_ID
-def setup_provider(cr, registry, provider_code):
+def setup_provider(cr, registry, code):
env = api.Environment(cr, SUPERUSER_ID, {})
- env['payment.acquirer']._setup_provider(provider_code)
+ env['payment.provider']._setup_provider(code)
-def reset_payment_acquirer(cr, registry, provider):
+def reset_payment_provider(cr, registry, code):
env = api.Environment(cr, SUPERUSER_ID, {})
- env['payment.acquirer']._remove_provider(provider)
+ env['payment.provider']._remove_provider(code)
diff --git a/addons/payment/__manifest__.py b/addons/payment/__manifest__.py
index e503a75623b..bbfd968c880 100644
--- a/addons/payment/__manifest__.py
+++ b/addons/payment/__manifest__.py
@@ -1,21 +1,21 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
- 'name': 'Payment Acquirer',
+ 'name': 'Payment Provider',
'version': '2.0',
'category': 'Hidden',
- 'summary': 'Base Module for Payment Acquirers',
- 'description': """Payment Acquirer Base Module""",
+ 'summary': 'Base Module for Payment Providers',
+ 'description': """Payment Provider Base Module""",
'depends': ['portal'],
'data': [
'data/payment_icon_data.xml',
- 'data/payment_acquirer_data.xml',
+ 'data/payment_provider_data.xml',
'data/payment_cron.xml',
'views/payment_portal_templates.xml',
'views/payment_templates.xml',
- 'views/payment_acquirer_views.xml',
+ 'views/payment_provider_views.xml',
'views/payment_icon_views.xml',
'views/payment_transaction_views.xml',
'views/payment_token_views.xml', # Depends on `action_payment_transaction_linked_to_token`
@@ -43,7 +43,7 @@
'payment/static/src/js/post_processing.js',
],
'web.assets_backend': [
- 'payment/static/src/scss/payment_acquirer.scss',
+ 'payment/static/src/scss/payment_provider.scss',
],
},
'license': 'LGPL-3',
diff --git a/addons/payment/controllers/portal.py b/addons/payment/controllers/portal.py
index 13714f85f67..dc5cf482033 100644
--- a/addons/payment/controllers/portal.py
+++ b/addons/payment/controllers/portal.py
@@ -39,7 +39,7 @@ class PaymentPortal(portal.CustomerPortal):
)
def payment_pay(
self, reference=None, amount=None, currency_id=None, partner_id=None, company_id=None,
- acquirer_id=None, access_token=None, **kwargs
+ provider_id=None, access_token=None, **kwargs
):
""" Display the payment form with optional filtering of payment options.
@@ -58,7 +58,7 @@ class PaymentPortal(portal.CustomerPortal):
:param str currency_id: The desired currency, as a `res.currency` id
:param str partner_id: The partner making the payment, as a `res.partner` id
:param str company_id: The related company, as a `res.company` id
- :param str acquirer_id: The desired acquirer, as a `payment.acquirer` id
+ :param str provider_id: The desired provider, as a `payment.provider` id
:param str access_token: The access token used to authenticate the partner
:param dict kwargs: Optional data passed to helper methods.
:return: The rendered checkout form
@@ -66,8 +66,8 @@ class PaymentPortal(portal.CustomerPortal):
:raise: werkzeug.exceptions.NotFound if the access token is invalid
"""
# Cast numeric parameters as int or float and void them if their str value is malformed
- currency_id, acquirer_id, partner_id, company_id = tuple(map(
- self._cast_as_int, (currency_id, acquirer_id, partner_id, company_id)
+ currency_id, provider_id, partner_id, company_id = tuple(map(
+ self._cast_as_int, (currency_id, provider_id, partner_id, company_id)
))
amount = self._cast_as_float(amount)
@@ -110,31 +110,31 @@ class PaymentPortal(portal.CustomerPortal):
if not currency or not currency.active:
raise werkzeug.exceptions.NotFound # The currency must exist and be active
- # Select all acquirers and tokens that match the constraints
- acquirers_sudo = request.env['payment.acquirer'].sudo()._get_compatible_acquirers(
+ # Select all providers and tokens that match the constraints
+ providers_sudo = request.env['payment.provider'].sudo()._get_compatible_providers(
company_id, partner_sudo.id, amount, currency_id=currency.id, **kwargs
- ) # In sudo mode to read the fields of acquirers and partner (if not logged in)
- if acquirer_id in acquirers_sudo.ids: # Only keep the desired acquirer if it's suitable
- acquirers_sudo = acquirers_sudo.browse(acquirer_id)
+ ) # In sudo mode to read the fields of providers and partner (if not logged in)
+ if provider_id in providers_sudo.ids: # Only keep the desired provider if it's suitable
+ providers_sudo = providers_sudo.browse(provider_id)
payment_tokens = request.env['payment.token'].search(
- [('acquirer_id', 'in', acquirers_sudo.ids), ('partner_id', '=', partner_sudo.id)]
+ [('provider_id', 'in', providers_sudo.ids), ('partner_id', '=', partner_sudo.id)]
) if logged_in else request.env['payment.token']
- # Compute the fees taken by acquirers supporting the feature
- fees_by_acquirer = {
- acq_sudo: acq_sudo._compute_fees(amount, currency, partner_sudo.country_id)
- for acq_sudo in acquirers_sudo.filtered('fees_active')
+ # Compute the fees taken by providers supporting the feature
+ fees_by_provider = {
+ pro_sudo: pro_sudo._compute_fees(amount, currency, partner_sudo.country_id)
+ for pro_sudo in providers_sudo.filtered('fees_active')
}
# Generate a new access token in case the partner id or the currency id was updated
access_token = payment_utils.generate_access_token(partner_sudo.id, amount, currency.id)
rendering_context = {
- 'acquirers': acquirers_sudo,
+ 'providers': providers_sudo,
'tokens': payment_tokens,
- 'fees_by_acquirer': fees_by_acquirer,
+ 'fees_by_provider': fees_by_provider,
'show_tokenize_input': self._compute_show_tokenize_input_mapping(
- acquirers_sudo, logged_in=logged_in, **kwargs
+ providers_sudo, logged_in=logged_in, **kwargs
),
'reference_prefix': reference,
'amount': amount,
@@ -150,23 +150,23 @@ class PaymentPortal(portal.CustomerPortal):
return request.render(self._get_payment_page_template_xmlid(**kwargs), rendering_context)
@staticmethod
- def _compute_show_tokenize_input_mapping(acquirers_sudo, logged_in=False, **kwargs):
- """ Determine for each acquirer whether the tokenization input should be shown or not.
+ def _compute_show_tokenize_input_mapping(providers_sudo, logged_in=False, **kwargs):
+ """ Determine for each provider whether the tokenization input should be shown or not.
- :param recordset acquirers_sudo: The acquirers for which to determine whether the
+ :param recordset providers_sudo: The providers for which to determine whether the
tokenization input should be shown or not, as a sudoed
- `payment.acquirer` recordset.
+ `payment.provider` recordset.
:param bool logged_in: Whether the user is logged in or not.
:param dict kwargs: The optional data passed to the helper methods.
- :return: The mapping of the computed value for each acquirer id.
+ :return: The mapping of the computed value for each provider id.
:rtype: dict
"""
show_tokenize_input_mapping = {}
- for acquirer_sudo in acquirers_sudo:
- show_tokenize_input = acquirer_sudo.allow_tokenization \
- and not acquirer_sudo._is_tokenization_required(**kwargs) \
+ for provider_sudo in providers_sudo:
+ show_tokenize_input = provider_sudo.allow_tokenization \
+ and not provider_sudo._is_tokenization_required(**kwargs) \
and logged_in
- show_tokenize_input_mapping[acquirer_sudo.id] = show_tokenize_input
+ show_tokenize_input_mapping[provider_sudo.id] = show_tokenize_input
return show_tokenize_input_mapping
def _get_payment_page_template_xmlid(self, **kwargs):
@@ -181,7 +181,7 @@ class PaymentPortal(portal.CustomerPortal):
:rtype: str
"""
partner_sudo = request.env.user.partner_id # env.user is always sudoed
- acquirers_sudo = request.env['payment.acquirer'].sudo()._get_compatible_acquirers(
+ providers_sudo = request.env['payment.provider'].sudo()._get_compatible_providers(
request.env.company.id,
partner_sudo.id,
0., # There is no amount to pay with validation transactions.
@@ -189,15 +189,15 @@ class PaymentPortal(portal.CustomerPortal):
is_validation=True,
)
- # Get all partner's tokens for which acquirers are not disabled.
+ # Get all partner's tokens for which providers are not disabled.
tokens_sudo = request.env['payment.token'].sudo().search([
('partner_id', 'in', [partner_sudo.id, partner_sudo.commercial_partner_id.id]),
- ('acquirer_id.state', 'in', ['enabled', 'test']),
+ ('provider_id.state', 'in', ['enabled', 'test']),
])
access_token = payment_utils.generate_access_token(partner_sudo.id, None, None)
rendering_context = {
- 'acquirers': acquirers_sudo,
+ 'providers': providers_sudo,
'tokens': tokens_sudo,
'reference_prefix': payment_utils.singularize_reference_prefix(prefix='V'),
'partner_id': partner_sudo.id,
@@ -252,7 +252,7 @@ class PaymentPortal(portal.CustomerPortal):
""" Create a draft transaction based on the payment context and return it.
:param int payment_option_id: The payment option handling the transaction, as a
- `payment.acquirer` id or a `payment.token` id
+ `payment.provider` id or a `payment.token` id
:param str reference_prefix: The custom prefix to compute the full reference
:param float|None amount: The amount to pay in the given currency.
None if in a payment method validation operation
@@ -272,13 +272,13 @@ class PaymentPortal(portal.CustomerPortal):
"""
# Prepare create values
if flow in ['redirect', 'direct']: # Direct payment or payment with redirection
- acquirer_sudo = request.env['payment.acquirer'].sudo().browse(payment_option_id)
+ provider_sudo = request.env['payment.provider'].sudo().browse(payment_option_id)
token_id = None
tokenize = bool(
# Don't tokenize if the user tried to force it through the browser's developer tools
- acquirer_sudo.allow_tokenization
+ provider_sudo.allow_tokenization
# Token is only created if required by the flow or requested by the user
- and (acquirer_sudo._is_tokenization_required(**kwargs) or tokenization_requested)
+ and (provider_sudo._is_tokenization_required(**kwargs) or tokenization_requested)
)
elif flow == 'token': # Payment by token
token_sudo = request.env['payment.token'].sudo().browse(payment_option_id)
@@ -290,7 +290,7 @@ class PaymentPortal(portal.CustomerPortal):
if partner_sudo.commercial_partner_id != token_sudo.partner_id.commercial_partner_id:
raise AccessError(_("You do not have access to this payment token."))
- acquirer_sudo = token_sudo.acquirer_id
+ provider_sudo = token_sudo.provider_id
token_id = payment_option_id
tokenize = False
else:
@@ -299,18 +299,18 @@ class PaymentPortal(portal.CustomerPortal):
)
reference = request.env['payment.transaction']._compute_reference(
- acquirer_sudo.provider,
+ provider_sudo.code,
prefix=reference_prefix,
**(custom_create_values or {}),
**kwargs
)
- if is_validation: # Acquirers determine the amount and currency in validation operations
- amount = acquirer_sudo._get_validation_amount()
- currency_id = acquirer_sudo._get_validation_currency().id
+ if is_validation: # Providers determine the amount and currency in validation operations
+ amount = provider_sudo._get_validation_amount()
+ currency_id = provider_sudo._get_validation_currency().id
# Create the transaction
tx_sudo = request.env['payment.transaction'].sudo().create({
- 'acquirer_id': acquirer_sudo.id,
+ 'provider_id': provider_sudo.id,
'reference': reference,
'amount': amount,
'currency_id': currency_id,
@@ -338,7 +338,7 @@ class PaymentPortal(portal.CustomerPortal):
The generic landing route requires the tx id and access token to be provided since there is
no document to rely on. The access token is recomputed in case we are dealing with a
- validation transaction (acquirer-specific amount and currency).
+ validation transaction (provider-specific amount and currency).
:param recordset tx_sudo: The transaction whose landing routes to update, as a
`payment.transaction` record.
diff --git a/addons/payment/controllers/post_processing.py b/addons/payment/controllers/post_processing.py
index 25690cfcafc..b004742ca74 100644
--- a/addons/payment/controllers/post_processing.py
+++ b/addons/payment/controllers/post_processing.py
@@ -58,11 +58,11 @@ class PaymentPostProcessing(http.Controller):
for tx in monitored_txs:
display_message = None
if tx.state == 'pending':
- display_message = tx.acquirer_id.pending_msg
+ display_message = tx.provider_id.pending_msg
elif tx.state == 'done':
- display_message = tx.acquirer_id.done_msg
+ display_message = tx.provider_id.done_msg
elif tx.state == 'cancel':
- display_message = tx.acquirer_id.cancel_msg
+ display_message = tx.provider_id.cancel_msg
display_values_list.append({
'display_message': display_message,
**tx._get_post_processing_values(),
diff --git a/addons/payment/data/payment_acquirer_data.xml b/addons/payment/data/payment_provider_data.xml
similarity index 92%
rename from addons/payment/data/payment_acquirer_data.xml
rename to addons/payment/data/payment_provider_data.xml
index 01b032f6733..e5f4b40c7eb 100644
--- a/addons/payment/data/payment_acquirer_data.xml
+++ b/addons/payment/data/payment_provider_data.xml
@@ -1,7 +1,7 @@
-
+
Adyen
Credit Card (powered by Adyen)
@@ -20,7 +20,7 @@
])]"/>
-
+
Amazon Payment Services
Amazon Payment Services
@@ -35,7 +35,7 @@
])]"/>
-
+
Asiapay
Credit Card (powered by Asiapay)
@@ -49,7 +49,7 @@
])]"/>
-
+
Authorize.net
Credit Card (powered by Authorize)
-
+
Buckaroo
Credit Card (powered by Buckaroo)
-
+
Demo
40
-
+
Flutterwave
-
+
Mercado Pago
Credit Card (powered by Mercado Pago)
-
+
Mollie
@@ -155,7 +155,7 @@
-
+
PayPal
@@ -173,7 +173,7 @@
])]"/>
-
+
Razorpay
Credit & Debit Card, UPI (Powered by Razorpay)
@@ -190,7 +190,7 @@
])]"/>
-
+
SEPA Direct Debit
20
-
+
Sips
Credit Card (powered by Sips)
@@ -219,7 +219,7 @@
])]"/>
-
+
Stripe
Credit & Debit Card
@@ -240,7 +240,7 @@
])]"/>
-
+
Wire Transfer
30
"` attribute are made required
- for all payment.acquirer records with the `provider` field equal to and with the
+ for all payment.provider records with the `code` field equal to and with the
`state` field equal to 'enabled' or 'test'.
- Acquirer-specific views should make the form fields required under the same conditions.
+ Provider-specific views should make the form fields required under the same conditions.
:return: None
- :raise ValidationError: if an acquirer-specific required field is empty
+ :raise ValidationError: if a provider-specific required field is empty
"""
field_names = []
- enabled_acquirers = self.filtered(lambda acq: acq.state in ['enabled', 'test'])
+ enabled_providers = self.filtered(lambda p: p.state in ['enabled', 'test'])
for name, field in self._fields.items():
required_provider = getattr(field, 'required_if_provider', None)
if required_provider and any(
- required_provider == acquirer.provider and not acquirer[name]
- for acquirer in enabled_acquirers
+ required_provider == provider.code and not provider[name]
+ for provider in enabled_providers
):
ir_field = self.env['ir.model.fields']._get(self._name, name)
field_names.append(ir_field.field_description)
@@ -329,16 +329,16 @@ class PaymentAcquirer(models.Model):
)
def _handle_state_change(self):
- """ Archive all the payment tokens linked to these acquirers.
+ """ Archive all the payment tokens linked to these providers.
:return: None
"""
- self.env['payment.token'].search([('acquirer_id', 'in', self.ids)]).write({'active': False})
+ self.env['payment.token'].search([('provider_id', 'in', self.ids)]).write({'active': False})
#=== ACTION METHODS ===#
def button_immediate_install(self):
- """ Install the acquirer's module and reload the page.
+ """ Install the provider's module and reload the page.
Note: self.ensure_one()
@@ -353,40 +353,40 @@ class PaymentAcquirer(models.Model):
}
def action_toggle_is_published(self):
- """ Toggle the acquirer's is_published state.
+ """ Toggle the provider's is_published state.
:return: none
- :raise UserError: If the acquirer is disabled.
+ :raise UserError: If the provider is disabled.
"""
if self.state != 'disabled':
self.is_published = not self.is_published
else:
- raise UserError(_("You cannot publish a disabled acquirer."))
+ raise UserError(_("You cannot publish a disabled provider."))
#=== BUSINESS METHODS ===#
@api.model
- def _get_compatible_acquirers(
+ def _get_compatible_providers(
self, company_id, partner_id, amount, currency_id=None, force_tokenization=False,
is_express_checkout=False, is_validation=False, **kwargs
):
- """ Select and return the acquirers matching the criteria.
+ """ Select and return the providers matching the criteria.
- The base criteria are that acquirers must not be disabled, be in the company that is
+ The base criteria are that providers must not be disabled, be in the company that is
provided, and support the country of the partner if it exists.
- :param int company_id: The company to which acquirers must belong, as a `res.company` id
+ :param int company_id: The company to which providers must belong, as a `res.company` id
:param int partner_id: The partner making the payment, as a `res.partner` id
:param float amount: The amount to pay, `0` for validation transactions.
:param int currency_id: The payment currency if known beforehand, as a `res.currency` id
- :param bool force_tokenization: Whether only acquirers allowing tokenization can be matched
+ :param bool force_tokenization: Whether only providers allowing tokenization can be matched
:param bool is_express_checkout: Whether the payment is made through express checkout.
:param bool is_validation: Whether the operation is a validation
:param dict kwargs: Optional data. This parameter is not used here
- :return: The compatible acquirers
- :rtype: recordset of `payment.acquirer`
+ :return: The compatible providers
+ :rtype: recordset of `payment.provider`
"""
- # Compute the base domain for compatible acquirers
+ # Compute the base domain for compatible providers
domain = ['&', ('state', 'in', ['enabled', 'test']), ('company_id', '=', company_id)]
# Handle the is_published state.
@@ -427,8 +427,8 @@ class PaymentAcquirer(models.Model):
if is_express_checkout:
domain = expression.AND([domain, [('allow_express_checkout', '=', True)]])
- compatible_acquirers = self.env['payment.acquirer'].search(domain)
- return compatible_acquirers
+ compatible_providers = self.env['payment.provider'].search(domain)
+ return compatible_providers
def _is_tokenization_required(self, **kwargs):
""" Return whether tokenizing the transaction is required given its context.
@@ -445,7 +445,7 @@ class PaymentAcquirer(models.Model):
def _should_build_inline_form(self, is_validation=False):
""" Return whether the inline form should be instantiated if it exists.
- For an acquirer to handle both direct payments and payment with redirection, it should
+ For a provider to handle both direct payments and payment with redirection, it should
override this method and return whether the inline form should be instantiated (i.e. if the
payment should be direct) based on the operation (online payment or validation).
@@ -465,7 +465,7 @@ class PaymentAcquirer(models.Model):
of `fixed` and `variable` is taken either from the domestic (dom) or international (int)
field depending on whether the country matches the company's country.
- For an acquirer to base the computation on different variables, or to use a different
+ For a provider to base the computation on different variables, or to use a different
formula, it must override this method and return the resulting fees as a float.
:param float amount: The amount to pay for the transaction
@@ -490,7 +490,7 @@ class PaymentAcquirer(models.Model):
def _get_validation_amount(self):
""" Get the amount to transfer in a payment method validation operation.
- For an acquirer to support tokenization, it must override this method and return the amount
+ For a provider to support tokenization, it must override this method and return the amount
to be transferred in a payment method validation operation *if the validation amount is not
null*.
@@ -505,7 +505,7 @@ class PaymentAcquirer(models.Model):
def _get_validation_currency(self):
""" Get the currency of the transfer in a payment method validation operation.
- For an acquirer to support tokenization, it must override this method and return the
+ For a provider to support tokenization, it must override this method and return the
currency to be used in a payment method validation operation *if the validation amount is
not null*.
@@ -520,7 +520,7 @@ class PaymentAcquirer(models.Model):
def _get_redirect_form_view(self, is_validation=False):
""" Return the view of the template used to render the redirect form.
- For an acquirer to return a different view depending on whether the operation is a
+ For a provider to return a different view depending on whether the operation is a
validation, it must override this method and return the appropriate view.
Note: self.ensure_one()
@@ -550,8 +550,8 @@ class PaymentAcquirer(models.Model):
:param str provider_code: The code of the provider to setup.
:return: None
"""
- acquirers = self.search([('provider', '=', provider_code)])
- acquirers.write({
+ providers = self.search([('provider', '=', provider_code)])
+ providers.write({
'provider': 'none',
'state': 'disabled',
})
@@ -561,7 +561,7 @@ class PaymentAcquirer(models.Model):
self.flush_model()
self.invalidate_model()
self.env.cr.execute("""
- UPDATE payment_acquirer SET state = 'disabled'
+ UPDATE payment_provider SET state = 'disabled'
WHERE state NOT IN ('test', 'disabled')
""")
@@ -573,8 +573,8 @@ class PaymentAcquirer(models.Model):
self.flush_model()
self.invalidate_model()
query = sql.SQL("""
- UPDATE payment_acquirer
+ UPDATE payment_provider
SET ({fields}) = ROW({vals})
- WHERE provider = %s
+ WHERE code = %s
""").format(fields=sql.SQL(','.join(fields)), vals=sql.SQL(', '.join(['NULL'] * len(fields))))
self.env.cr.execute(query, (provider, ))
diff --git a/addons/payment/models/payment_token.py b/addons/payment/models/payment_token.py
index 84e93f3c5a1..6578c314935 100644
--- a/addons/payment/models/payment_token.py
+++ b/addons/payment/models/payment_token.py
@@ -11,18 +11,18 @@ class PaymentToken(models.Model):
_order = 'partner_id, id desc'
_description = 'Payment Token'
- acquirer_id = fields.Many2one(
- string="Acquirer Account", comodel_name='payment.acquirer', required=True)
- provider = fields.Selection(related='acquirer_id.provider')
+ provider_id = fields.Many2one(
+ string="provider Account", comodel_name='payment.provider', required=True)
+ provider_code = fields.Selection(related='provider_id.code')
payment_details = fields.Char(
string="Payment Details", help="The clear part of the payment method's payment details.",
)
partner_id = fields.Many2one(string="Partner", comodel_name='res.partner', required=True)
company_id = fields.Many2one( # Indexed to speed-up ORM searches (from ir_rule or others)
- related='acquirer_id.company_id', store=True, index=True)
- acquirer_ref = fields.Char(
- string="Acquirer Reference", help="The acquirer reference of the token of the transaction",
- required=True) # This is not the same thing as the acquirer reference of the transaction
+ related='provider_id.company_id', store=True, index=True)
+ provider_ref = fields.Char(
+ string="Provider Reference", help="The provider reference of the token of the transaction",
+ required=True) # This is not the same thing as the provider reference of the transaction
transaction_ids = fields.One2many(
string="Payment Transactions", comodel_name='payment.transaction', inverse_name='token_id')
verified = fields.Boolean(string="Verified")
@@ -33,27 +33,27 @@ class PaymentToken(models.Model):
@api.model_create_multi
def create(self, values_list):
for values in values_list:
- if 'acquirer_id' in values:
- acquirer = self.env['payment.acquirer'].browse(values['acquirer_id'])
+ if 'provider_id' in values:
+ provider = self.env['payment.provider'].browse(values['provider_id'])
- # Include acquirer-specific create values
- values.update(self._get_specific_create_values(acquirer.provider, values))
+ # Include provider-specific create values
+ values.update(self._get_specific_create_values(provider.code, values))
else:
pass # Let psycopg warn about the missing required field
return super().create(values_list)
@api.model
- def _get_specific_create_values(self, provider, values):
- """ Complete the values of the `create` method with acquirer-specific values.
+ def _get_specific_create_values(self, provider_code, values):
+ """ Complete the values of the `create` method with provider-specific values.
- For an acquirer to add its own create values, it must overwrite this method and return a
- dict of values. Acquirer-specific values take precedence over those of the dict of generic
+ For a provider to add its own create values, it must overwrite this method and return a
+ dict of values. Provider-specific values take precedence over those of the dict of generic
create values.
- :param str provider: The provider of the acquirer managing the token
+ :param str provider_code: The code of the provider managing the token
:param dict values: The original create values
- :return: The dict of acquirer-specific create values
+ :return: The dict of provider-specific create values
:rtype: dict
"""
return dict()
diff --git a/addons/payment/models/payment_transaction.py b/addons/payment/models/payment_transaction.py
index 894006e5e33..d127edf710e 100644
--- a/addons/payment/models/payment_transaction.py
+++ b/addons/payment/models/payment_transaction.py
@@ -29,27 +29,27 @@ class PaymentTransaction(models.Model):
def _lang_get(self):
return self.env['res.lang'].get_installed()
- acquirer_id = fields.Many2one(
- string="Acquirer", comodel_name='payment.acquirer', readonly=True, required=True)
- provider = fields.Selection(related='acquirer_id.provider')
+ provider_id = fields.Many2one(
+ string="Provider", comodel_name='payment.provider', readonly=True, required=True)
+ provider_code = fields.Selection(related='provider_id.code')
company_id = fields.Many2one( # Indexed to speed-up ORM searches (from ir_rule or others)
- related='acquirer_id.company_id', store=True, index=True)
+ related='provider_id.company_id', store=True, index=True)
reference = fields.Char(
string="Reference", help="The internal reference of the transaction", readonly=True,
required=True) # Already has an index from the UNIQUE SQL constraint
- acquirer_reference = fields.Char(
- string="Acquirer Reference", help="The acquirer reference of the transaction",
- readonly=True) # This is not the same thing as the acquirer reference of the token
+ provider_reference = fields.Char(
+ string="Provider Reference", help="The provider reference of the transaction",
+ readonly=True) # This is not the same thing as the provider reference of the token
amount = fields.Monetary(
string="Amount", currency_field='currency_id', readonly=True, required=True)
currency_id = fields.Many2one(
string="Currency", comodel_name='res.currency', readonly=True, required=True)
fees = fields.Monetary(
string="Fees", currency_field='currency_id',
- help="The fees amount; set by the system as it depends on the acquirer", readonly=True)
+ help="The fees amount; set by the system as it depends on the provider", readonly=True)
token_id = fields.Many2one(
string="Payment Token", comodel_name='payment.token', readonly=True,
- domain='[("acquirer_id", "=", "acquirer_id")]', ondelete='restrict')
+ domain='[("provider_id", "=", "provider_id")]', ondelete='restrict')
state = fields.Selection(
string="Status",
selection=[('draft', "Draft"), ('pending', "Pending"), ('authorized', "Authorized"),
@@ -145,12 +145,12 @@ class PaymentTransaction(models.Model):
def _check_state_authorized_supported(self):
""" Check that authorization is supported for a transaction in the 'authorized' state. """
illegal_authorize_state_txs = self.filtered(
- lambda tx: tx.state == 'authorized' and not tx.acquirer_id.support_manual_capture
+ lambda tx: tx.state == 'authorized' and not tx.provider_id.support_manual_capture
)
if illegal_authorize_state_txs:
raise ValidationError(_(
- "Transaction authorization is not supported by the following payment acquirers: %s",
- ', '.join(set(illegal_authorize_state_txs.mapped('acquirer_id.name')))
+ "Transaction authorization is not supported by the following payment providers: %s",
+ ', '.join(set(illegal_authorize_state_txs.mapped('provider_id.name')))
))
@api.constrains('token_id')
@@ -164,10 +164,10 @@ class PaymentTransaction(models.Model):
@api.model_create_multi
def create(self, values_list):
for values in values_list:
- acquirer = self.env['payment.acquirer'].browse(values['acquirer_id'])
+ provider = self.env['payment.provider'].browse(values['provider_id'])
if not values.get('reference'):
- values['reference'] = self._compute_reference(acquirer.provider, **values)
+ values['reference'] = self._compute_reference(provider.code, **values)
# Duplicate partner values
partner = self.env['res.partner'].browse(values['partner_id'])
@@ -190,12 +190,12 @@ class PaymentTransaction(models.Model):
values['fees'] = 0
else:
currency = self.env['res.currency'].browse(values.get('currency_id')).exists()
- values['fees'] = acquirer._compute_fees(
+ values['fees'] = provider._compute_fees(
values.get('amount', 0), currency, partner.country_id,
)
- # Include acquirer-specific create values
- values.update(self._get_specific_create_values(acquirer.provider, values))
+ # Include provider-specific create values
+ values.update(self._get_specific_create_values(provider.code, values))
# Generate the hash for the callback if one has be configured on the tx
values['callback_hash'] = self._generate_callback_hash(
@@ -219,16 +219,16 @@ class PaymentTransaction(models.Model):
return txs
@api.model
- def _get_specific_create_values(self, provider, values):
- """ Complete the values of the `create` method with acquirer-specific values.
+ def _get_specific_create_values(self, provider_code, values):
+ """ Complete the values of the `create` method with provider-specific values.
- For an acquirer to add its own create values, it must overwrite this method and return a
- dict of values. Acquirer-specific values take precedence over those of the dict of generic
+ For a provider to add its own create values, it must overwrite this method and return a
+ dict of values. Provider-specific values take precedence over those of the dict of generic
create values.
- :param str provider: The provider of the acquirer that handled the transaction
+ :param str provider_code: The code of the provider that handled the transaction
:param dict values: The original create values
- :return: The dict of acquirer-specific create values
+ :return: The dict of provider-specific create values
:rtype: dict
"""
return dict()
@@ -268,7 +268,7 @@ class PaymentTransaction(models.Model):
payment_utils.check_rights_on_recordset(self)
for tx in self:
- # In sudo mode because we need to be able to read on acquirer fields.
+ # In sudo mode because we need to be able to read on provider fields.
tx.sudo()._send_capture_request()
def action_void(self):
@@ -278,7 +278,7 @@ class PaymentTransaction(models.Model):
payment_utils.check_rights_on_recordset(self)
for tx in self:
- # In sudo mode because we need to be able to read on acquirer fields.
+ # In sudo mode because we need to be able to read on provider fields.
tx.sudo()._send_void_request()
def action_refund(self, amount_to_refund=None):
@@ -296,7 +296,7 @@ class PaymentTransaction(models.Model):
#=== BUSINESS METHODS - PAYMENT FLOW ===#
@api.model
- def _compute_reference(self, provider, prefix=None, separator='-', **kwargs):
+ def _compute_reference(self, provider_code, prefix=None, separator='-', **kwargs):
""" Compute a unique reference for the transaction.
The reference either corresponds to the prefix if no other transaction with that prefix
@@ -319,7 +319,7 @@ class PaymentTransaction(models.Model):
the full reference will be 'INV1-INV2' (or similar) if no existing reference has the
same prefix, or 'INV1-INV2-n' if n existing references have the same prefix.
- :param str provider: The provider of the acquirer handling the transaction
+ :param str provider_code: The code of the provider handling the transaction
:param str prefix: The custom prefix used to compute the full reference
:param str separator: The custom separator used to separate the prefix from the suffix, and
passed to `_compute_reference_prefix` if it is called
@@ -333,7 +333,7 @@ class PaymentTransaction(models.Model):
# Replace special characters by their ASCII alternative (é -> e ; ä -> a ; ...)
prefix = unicodedata.normalize('NFKD', prefix).encode('ascii', 'ignore').decode('utf-8')
if not prefix: # Prefix not provided or voided above, compute it based on the kwargs
- prefix = self.sudo()._compute_reference_prefix(provider, separator, **kwargs)
+ prefix = self.sudo()._compute_reference_prefix(provider_code, separator, **kwargs)
if not prefix: # Prefix not computed from the kwargs, fallback on time-based value
prefix = payment_utils.singularize_reference_prefix()
@@ -372,12 +372,12 @@ class PaymentTransaction(models.Model):
return reference
@api.model
- def _compute_reference_prefix(self, provider, separator, **values):
+ def _compute_reference_prefix(self, provider_code, separator, **values):
""" Compute the reference prefix from the transaction values.
Note: This method should be called in sudo mode to give access to documents (INV, SO, ...).
- :param str provider: The provider of the acquirer handling the transaction
+ :param str provider_code: The code of the provider handling the transaction
:param str separator: The custom separator used to separate data references
:param dict values: The transaction values used to compute the reference prefix.
:return: an empty string
@@ -409,13 +409,13 @@ class PaymentTransaction(models.Model):
The returned dict contains the following entries:
- tx_id: The transaction, as a `payment.transaction` id
- - acquirer_id: The acquirer handling the transaction, as a `payment.acquirer` id
- - provider: The provider of the acquirer
+ - provider_id: The provider handling the transaction, as a `payment.provider` id
+ - provider_code: The code of the provider
- reference: The reference of the transaction
- amount: The rounded amount of the transaction
- currency_id: The currency of the transaction, as a res.currency id
- partner_id: The partner making the transaction, as a res.partner id
- - Additional acquirer-specific entries
+ - Additional provider-specific entries
Note: self.ensure_one()
@@ -426,31 +426,31 @@ class PaymentTransaction(models.Model):
processing_values = {
'tx_id': self.id,
- 'acquirer_id': self.acquirer_id.id,
- 'provider': self.provider,
+ 'provider_id': self.provider_id.id,
+ 'provider_code': self.provider_code,
'reference': self.reference,
'amount': self.amount,
'currency_id': self.currency_id.id,
'partner_id': self.partner_id.id,
}
- # Complete generic processing values with acquirer-specific values
+ # Complete generic processing values with provider-specific values
processing_values.update(self._get_specific_processing_values(processing_values))
_logger.info(
- "generic and acquirer-specific processing values for transaction with reference "
+ "generic and provider-specific processing values for transaction with reference "
"%(ref)s:\n%(values)s",
{'ref': self.reference, 'values': pprint.pformat(processing_values)},
)
# Render the html form for the redirect flow if available
if self.operation in ('online_redirect', 'validation'):
- redirect_form_view = self.acquirer_id._get_redirect_form_view(
+ redirect_form_view = self.provider_id._get_redirect_form_view(
is_validation=self.operation == 'validation'
)
- if redirect_form_view: # Some acquirer don't need a redirect form
+ if redirect_form_view: # Some provider don't need a redirect form
rendering_values = self._get_specific_rendering_values(processing_values)
_logger.info(
- "acquirer-specific rendering values for transaction with reference "
+ "provider-specific rendering values for transaction with reference "
"%(ref)s:\n%(values)s",
{'ref': self.reference, 'values': pprint.pformat(rendering_values)},
)
@@ -460,36 +460,36 @@ class PaymentTransaction(models.Model):
return processing_values
def _get_specific_processing_values(self, processing_values):
- """ Return a dict of acquirer-specific values used to process the transaction.
+ """ Return a dict of provider-specific values used to process the transaction.
- For an acquirer to add its own processing values, it must overwrite this method and return a
- dict of acquirer-specific values based on the generic values returned by this method.
- Acquirer-specific values take precedence over those of the dict of generic processing
+ For a provider to add its own processing values, it must overwrite this method and return a
+ dict of provider-specific values based on the generic values returned by this method.
+ Provider-specific values take precedence over those of the dict of generic processing
values.
:param dict processing_values: The generic processing values of the transaction
- :return: The dict of acquirer-specific processing values
+ :return: The dict of provider-specific processing values
:rtype: dict
"""
return dict()
def _get_specific_rendering_values(self, processing_values):
- """ Return a dict of acquirer-specific values used to render the redirect form.
+ """ Return a dict of provider-specific values used to render the redirect form.
- For an acquirer to add its own rendering values, it must overwrite this method and return a
- dict of acquirer-specific values based on the processing values (acquirer-specific
+ For a provider to add its own rendering values, it must overwrite this method and return a
+ dict of provider-specific values based on the processing values (provider-specific
processing values included).
:param dict processing_values: The processing values of the transaction
- :return: The dict of acquirer-specific rendering values
+ :return: The dict of provider-specific rendering values
:rtype: dict
"""
return dict()
def _send_payment_request(self):
- """ Request the provider of the acquirer handling the transaction to execute the payment.
+ """ Request the provider handling the transaction to execute the payment.
- For an acquirer to support tokenization, it must override this method and call it to log the
+ For a provider to support tokenization, it must override this method and call it to log the
'sent' message, then request a money transfer to its provider.
Note: self.ensure_one()
@@ -497,13 +497,13 @@ class PaymentTransaction(models.Model):
:return: None
"""
self.ensure_one()
- self._ensure_acquirer_is_not_disabled()
+ self._ensure_provider_is_not_disabled()
self._log_sent_message()
def _send_refund_request(self, amount_to_refund=None, create_refund_transaction=True):
- """ Request the provider of the acquirer handling the transaction to refund it.
+ """ Request the provider handling the transaction to refund it.
- For an acquirer to support refunds, it must override this method and request a refund
+ For a provider to support refunds, it must override this method and request a refund
to its provider.
Note: self.ensure_one()
@@ -514,7 +514,7 @@ class PaymentTransaction(models.Model):
:rtype: recordset of `payment.transaction`
"""
self.ensure_one()
- self._ensure_acquirer_is_not_disabled()
+ self._ensure_provider_is_not_disabled()
if create_refund_transaction:
refund_tx = self._create_refund_transaction(amount_to_refund=amount_to_refund)
@@ -534,8 +534,8 @@ class PaymentTransaction(models.Model):
self.ensure_one()
return self.create({
- 'acquirer_id': self.acquirer_id.id,
- 'reference': self._compute_reference(self.provider, prefix=f'R-{self.reference}'),
+ 'provider_id': self.provider_id.id,
+ 'reference': self._compute_reference(self.provider_code, prefix=f'R-{self.reference}'),
'amount': -(amount_to_refund or self.amount),
'currency_id': self.currency_id.id,
'token_id': self.token_id.id,
@@ -546,9 +546,9 @@ class PaymentTransaction(models.Model):
})
def _send_capture_request(self):
- """ Request the provider of the acquirer handling the transaction to capture it.
+ """ Request the provider handling the transaction to capture it.
- For an acquirer to support authorization, it must override this method and request a capture
+ For a provider to support authorization, it must override this method and request a capture
to its provider.
Note: self.ensure_one()
@@ -556,12 +556,12 @@ class PaymentTransaction(models.Model):
:return: None
"""
self.ensure_one()
- self._ensure_acquirer_is_not_disabled()
+ self._ensure_provider_is_not_disabled()
def _send_void_request(self):
- """ Request the provider of the acquirer handling the transaction to void it.
+ """ Request the provider handling the transaction to void it.
- For an acquirer to support authorization, it must override this method and request the
+ For a provider to support authorization, it must override this method and request the
transaction to be voided to its provider.
Note: self.ensure_one()
@@ -569,40 +569,40 @@ class PaymentTransaction(models.Model):
:return: None
"""
self.ensure_one()
- self._ensure_acquirer_is_not_disabled()
+ self._ensure_provider_is_not_disabled()
- def _ensure_acquirer_is_not_disabled(self):
- """ Ensure that the acquirer's state is not 'disabled' before sending a request to its
+ def _ensure_provider_is_not_disabled(self):
+ """ Ensure that the provider's state is not 'disabled' before sending a request to its
provider.
:return: None
- :raise UserError: If the acquirer's state is 'disabled'.
+ :raise UserError: If the provider's state is 'disabled'.
"""
- if self.acquirer_id.state == 'disabled':
+ if self.provider_id.state == 'disabled':
raise UserError(_(
- "Making a request to the provider is not possible because the acquirer is disabled."
+ "Making a request to the provider is not possible because the provider is disabled."
))
- def _handle_notification_data(self, provider, notification_data):
+ def _handle_notification_data(self, provider_code, notification_data):
""" Match the transaction with the notification data, update its state and return it.
- :param str provider: The provider of the acquirer that handled the transaction
+ :param str provider_code: The code of the provider that handled the transaction
:param dict notification_data: The notification data sent by the provider
:return: The transaction
:rtype: recordset of `payment.transaction`
"""
- tx = self._get_tx_from_notification_data(provider, notification_data)
+ tx = self._get_tx_from_notification_data(provider_code, notification_data)
tx._process_notification_data(notification_data)
tx._execute_callback()
return tx
- def _get_tx_from_notification_data(self, provider, notification_data):
+ def _get_tx_from_notification_data(self, provider_code, notification_data):
""" Find the transaction based on the notification data.
- For an acquirer to handle transaction processing, it must overwrite this method and return
+ For a provider to handle transaction processing, it must overwrite this method and return
the transaction matching the notification data.
- :param str provider: The provider of the acquirer that handled the transaction
+ :param str provider_code: The code of the provider that handled the transaction
:param dict notification_data: The notification data sent by the provider
:return: The transaction if found
:rtype: recordset of `payment.transaction`
@@ -610,12 +610,12 @@ class PaymentTransaction(models.Model):
return self
def _process_notification_data(self, notification_data):
- """ Update the transaction state and the acquirer reference based on the notification data.
+ """ Update the transaction state and the provider reference based on the notification data.
This method should normally never be called directly. The correct method to call upon
receiving notification data is `_handle_notification_data`.
- For an acquirer to handle transaction processing, it must overwrite this method and process
+ For a provider to handle transaction processing, it must overwrite this method and process
the notification data.
Note: self.ensure_one()
@@ -799,12 +799,12 @@ class PaymentTransaction(models.Model):
def _get_post_processing_values(self):
""" Return a dict of values used to display the status of the transaction.
- For an acquirer to handle transaction status display, it must override this method and
- return a dict of values. Acquirer-specific values take precedence over those of the dict of
+ For a provider to handle transaction status display, it must override this method and
+ return a dict of values. Provider-specific values take precedence over those of the dict of
generic post-processing values.
The returned dict contains the following entries:
- - provider: The provider of the acquirer
+ - provider_code: The code of the provider
- reference: The reference of the transaction
- amount: The rounded amount of the transaction
- currency_id: The currency of the transaction, as a res.currency id
@@ -812,7 +812,7 @@ class PaymentTransaction(models.Model):
- state_message: The information message about the state
- is_post_processed: Whether the transaction has already been post-processed
- landing_route: The route the user is redirected to after the transaction
- - Additional acquirer-specific entries
+ - Additional provider-specific entries
Note: self.ensure_one()
@@ -822,7 +822,7 @@ class PaymentTransaction(models.Model):
self.ensure_one()
post_processing_values = {
- 'provider': self.provider,
+ 'provider_code': self.provider_code,
'reference': self.reference,
'amount': self.amount,
'currency_code': self.currency_id.name,
@@ -832,8 +832,8 @@ class PaymentTransaction(models.Model):
'landing_route': self.landing_route,
}
_logger.debug(
- "post-processing values of transaction with reference %s for acquirer with id %s:\n%s",
- self.reference, self.acquirer_id.id, pprint.pformat(post_processing_values)
+ "post-processing values of transaction with reference %s for provider with id %s:\n%s",
+ self.reference, self.provider_id.id, pprint.pformat(post_processing_values)
) # DEBUG level because this can get spammy with transactions in non-final states
return post_processing_values
@@ -904,7 +904,7 @@ class PaymentTransaction(models.Model):
def _log_received_message(self):
""" Log in the chatter of relevant documents that the transactions have been received.
- A transaction is 'received' when a response is received from the provider of the acquirer
+ A transaction is 'received' when a response is received from the system of the provider
handling the transaction.
:return: None
@@ -941,30 +941,30 @@ class PaymentTransaction(models.Model):
# Choose the message based on the payment flow
if self.operation in ('online_redirect', 'online_direct'):
message = _(
- "A transaction with reference %(ref)s has been initiated (%(acq_name)s).",
- ref=self.reference, acq_name=self.acquirer_id.name
+ "A transaction with reference %(ref)s has been initiated (%(provider_name)s).",
+ ref=self.reference, provider_name=self.provider_id.name
)
elif self.operation == 'refund':
formatted_amount = format_amount(self.env, -self.amount, self.currency_id)
message = _(
"A refund request of %(amount)s has been sent. The payment will be created soon. "
- "Refund transaction reference: %(ref)s (%(acq_name)s).",
- amount=formatted_amount, ref=self.reference, acq_name=self.acquirer_id.name
+ "Refund transaction reference: %(ref)s (%(provider_name)s).",
+ amount=formatted_amount, ref=self.reference, provider_name=self.provider_id.name
)
elif self.operation in ('online_token', 'offline'):
message = _(
"A transaction with reference %(ref)s has been initiated using the payment method "
- "%(token)s (%(acq_name)s).",
+ "%(token)s (%(provider_name)s).",
ref=self.reference,
token=self.token_id._build_display_name(),
- acq_name=self.acquirer_id.name
+ provider_name=self.provider_id.name
)
else: # 'validation'
message = _(
"A transaction with reference %(ref)s has been initiated to save a new payment "
- "method (%(acq_name)s)",
+ "method (%(provider_name)s)",
ref=self.reference,
- acq_name=self.acquirer_id.name,
+ provider_name=self.provider_id.name,
)
return message
@@ -978,33 +978,39 @@ class PaymentTransaction(models.Model):
formatted_amount = format_amount(self.env, self.amount, self.currency_id)
if self.state == 'pending':
message = _(
- "The transaction with reference %(ref)s for %(amount)s is pending (%(acq_name)s).",
- ref=self.reference, amount=formatted_amount, acq_name=self.acquirer_id.name
+ ("The transaction with reference %(ref)s for %(amount)s "
+ "is pending (%(provider_name)s)."),
+ ref=self.reference,
+ amount=formatted_amount,
+ provider_name=self.provider_id.name
)
elif self.state == 'authorized':
message = _(
"The transaction with reference %(ref)s for %(amount)s has been authorized "
- "(%(acq_name)s).", ref=self.reference, amount=formatted_amount,
- acq_name=self.acquirer_id.name
+ "(%(provider_name)s).", ref=self.reference, amount=formatted_amount,
+ provider_name=self.provider_id.name
)
elif self.state == 'done':
message = _(
"The transaction with reference %(ref)s for %(amount)s has been confirmed "
- "(%(acq_name)s).", ref=self.reference, amount=formatted_amount,
- acq_name=self.acquirer_id.name
+ "(%(provider_name)s).", ref=self.reference, amount=formatted_amount,
+ provider_name=self.provider_id.name
)
elif self.state == 'error':
message = _(
"The transaction with reference %(ref)s for %(amount)s encountered an error"
- " (%(acq_name)s).",
- ref=self.reference, amount=formatted_amount, acq_name=self.acquirer_id.name
+ " (%(provider_name)s).",
+ ref=self.reference, amount=formatted_amount, provider_name=self.provider_id.name
)
if self.state_message:
message += "
" + _("Error: %s", self.state_message)
else:
message = _(
- "The transaction with reference %(ref)s for %(amount)s is canceled (%(acq_name)s).",
- ref=self.reference, amount=formatted_amount, acq_name=self.acquirer_id.name
+ ("The transaction with reference %(ref)s for %(amount)s is canceled "
+ "(%(provider_name)s)."),
+ ref=self.reference,
+ amount=formatted_amount,
+ provider_name=self.provider_id.name
)
if self.state_message:
message += "
" + _("Reason: %s", self.state_message)
diff --git a/addons/payment/models/res_company.py b/addons/payment/models/res_company.py
index 65f0584d4b5..e4ceac7d6a0 100644
--- a/addons/payment/models/res_company.py
+++ b/addons/payment/models/res_company.py
@@ -6,8 +6,8 @@ from odoo import api, fields, models
class ResCompany(models.Model):
_inherit = 'res.company'
- payment_acquirer_onboarding_state = fields.Selection(
- string="State of the onboarding payment acquirer step",
+ payment_provider_onboarding_state = fields.Selection(
+ string="State of the onboarding payment provider step",
selection=[('not_done', "Not done"), ('just_done', "Just done"), ('done', "Done")],
default='not_done')
payment_onboarding_payment_method = fields.Selection(
@@ -20,7 +20,7 @@ class ResCompany(models.Model):
])
def _run_payment_onboarding_step(self, menu_id):
- """ Install the suggested payment modules and configure the acquirers.
+ """ Install the suggested payment modules and configure the providers.
It's checked that the current company has a Chart of Account.
@@ -41,18 +41,18 @@ class ResCompany(models.Model):
)
# Configure Stripe
- stripe_acquirer = new_env.ref('payment.payment_acquirer_stripe')
- stripe_acquirer.journal_id = stripe_acquirer.journal_id or default_journal
- if stripe_acquirer.state == 'disabled': # The onboarding step has never been run
+ stripe_provider = new_env.ref('payment.payment_provider_stripe')
+ stripe_provider.journal_id = stripe_provider.journal_id or default_journal
+ if stripe_provider.state == 'disabled': # The onboarding step has never been run
# Configure PayPal
- paypal_acquirer = new_env.ref('payment.payment_acquirer_paypal')
- if not paypal_acquirer.paypal_email_account:
- paypal_acquirer.paypal_email_account = new_env.user.email or new_env.company.email
- if paypal_acquirer.state == 'disabled' and paypal_acquirer.paypal_email_account:
- paypal_acquirer.state = 'enabled'
- paypal_acquirer.journal_id = paypal_acquirer.journal_id or default_journal
+ paypal_provider = new_env.ref('payment.payment_provider_paypal')
+ if not paypal_provider.paypal_email_account:
+ paypal_provider.paypal_email_account = new_env.user.email or new_env.company.email
+ if paypal_provider.state == 'disabled' and paypal_provider.paypal_email_account:
+ paypal_provider.state = 'enabled'
+ paypal_provider.journal_id = paypal_provider.journal_id or default_journal
- return stripe_acquirer.action_stripe_connect_account(menu_id=menu_id)
+ return stripe_provider.action_stripe_connect_account(menu_id=menu_id)
def _install_modules(self, module_names):
modules_sudo = self.env['ir.module.module'].sudo().search([('name', 'in', module_names)])
@@ -64,9 +64,9 @@ class ResCompany(models.Model):
:return: None
"""
- self.set_onboarding_step_done('payment_acquirer_onboarding_state')
+ self.set_onboarding_step_done('payment_provider_onboarding_state')
def get_account_invoice_onboarding_steps_states_names(self):
""" Override of account. """
steps = super().get_account_invoice_onboarding_steps_states_names()
- return steps + ['payment_acquirer_onboarding_state']
+ return steps + ['payment_provider_onboarding_state']
diff --git a/addons/payment/security/ir.model.access.csv b/addons/payment/security/ir.model.access.csv
index d4e36771387..709c3e4de10 100644
--- a/addons/payment/security/ir.model.access.csv
+++ b/addons/payment/security/ir.model.access.csv
@@ -1,7 +1,7 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_payment_link_wizard,access_payment_link_wizard,payment.model_payment_link_wizard,base.group_user,0,0,0,0
-payment_acquirer_onboarding_wizard,payment.acquirer.onboarding.wizard,model_payment_acquirer_onboarding_wizard,base.group_system,1,1,1,0
-payment_acquirer_system,payment.acquirer.system,model_payment_acquirer,base.group_system,1,1,1,1
+payment_provider_onboarding_wizard,payment.provider.onboarding.wizard,model_payment_provider_onboarding_wizard,base.group_system,1,1,1,0
+payment_provider_system,payment.provider.system,model_payment_provider,base.group_system,1,1,1,1
payment_icon_all,payment.icon.all,model_payment_icon,,1,0,0,0
payment_icon_system,payment.icon.system,model_payment_icon,base.group_system,1,1,1,1
payment_token_all,payment.token.all,model_payment_token,,1,0,0,0
diff --git a/addons/payment/security/payment_security.xml b/addons/payment/security/payment_security.xml
index 30c93907f31..fc0b23f4339 100644
--- a/addons/payment/security/payment_security.xml
+++ b/addons/payment/security/payment_security.xml
@@ -1,11 +1,11 @@
-
+
-
- Access acquirers in own companies only
-
+
+ Access providers in own companies only
+
[('company_id', 'in', company_ids)]
diff --git a/addons/payment/static/src/js/checkout_form.js b/addons/payment/static/src/js/checkout_form.js
index 29c787bd253..c6d4b03e02a 100644
--- a/addons/payment/static/src/js/checkout_form.js
+++ b/addons/payment/static/src/js/checkout_form.js
@@ -63,7 +63,7 @@ odoo.define('payment.checkout_form', require => {
// Update the tx context with the value of the "Save my payment details" checkbox
if (flow !== 'token') {
const $tokenizeCheckbox = this.$(
- `#o_payment_acquirer_inline_form_${paymentOptionId}` // Only match acq. radios
+ `#o_payment_provider_inline_form_${paymentOptionId}` // Only match provider radios
).find('input[name="o_payment_save_as_token"]');
this.txContext.tokenizationRequested = $tokenizeCheckbox.length === 1
&& $tokenizeCheckbox[0].checked;
diff --git a/addons/payment/static/src/js/express_checkout_form.js b/addons/payment/static/src/js/express_checkout_form.js
index 5ae73d4a8a9..ce7ef520fc8 100644
--- a/addons/payment/static/src/js/express_checkout_form.js
+++ b/addons/payment/static/src/js/express_checkout_form.js
@@ -48,31 +48,31 @@ publicWidget.registry.PaymentExpressCheckoutForm = publicWidget.Widget.extend({
_isShippingInformationRequired: () => false,
/**
- * Prepare the acquirer-specific express checkout form based on the provided data.
+ * Prepare the provider-specific express checkout form based on the provided data.
*
- * For an acquirer to manage an express checkout form, it must override this method.
+ * For an provider to manage an express checkout form, it must override this method.
*
* @private
- * @param {Object} acquirerData - The acquirer-specific data.
+ * @param {Object} providerData - The provider-specific data.
* @return {Promise}
*/
- async _prepareExpressCheckoutForm(acquirerData) {
+ async _prepareExpressCheckoutForm(providerData) {
return Promise.resolve();
},
/**
* Prepare the params to send to the transaction route.
*
- * For an acquirer to overwrite generic params or to add acquirer-specific ones, it must
+ * For an provider to overwrite generic params or to add provider-specific ones, it must
* override this method and return the extended transaction route params.
*
* @private
- * @param {number} acquirerId - The id of the acquirer handling the transaction.
+ * @param {number} providerId - The id of the provider handling the transaction.
* @returns {object} - The transaction route params
*/
- _prepareTransactionRouteParams(acquirerId) {
+ _prepareTransactionRouteParams(providerId) {
return {
- 'payment_option_id': parseInt(acquirerId),
+ 'payment_option_id': parseInt(providerId),
'reference_prefix': this.txContext.referencePrefix &&
this.txContent.referencePrefix.toString(),
'currency_id': this.txContext.currencyId &&
@@ -107,15 +107,15 @@ publicWidget.registry.PaymentExpressCheckoutForm = publicWidget.Widget.extend({
/**
* Update the amount of the express checkout form.
*
- * For an acquirer to manage an express form, it must override this method.
+ * For a provider to manage an express form, it must override this method.
*
* @private
- * @param {Object} acquirerData - The acquirer-specific data.
+ * @param {Object} providerData - The provider-specific data.
* @param {number} newAmount - The new amount.
* @param {number} newMinorAmount - The new minor amount.
* @return {undefined}
*/
- _updateAmount(acquirerData, newAmount, newMinorAmount) {},
+ _updateAmount(providerData, newAmount, newMinorAmount) {},
});
diff --git a/addons/payment/static/src/js/payment_form_mixin.js b/addons/payment/static/src/js/payment_form_mixin.js
index ea84b31b4e2..e617afcc43f 100644
--- a/addons/payment/static/src/js/payment_form_mixin.js
+++ b/addons/payment/static/src/js/payment_form_mixin.js
@@ -27,7 +27,7 @@ odoo.define('payment.payment_form_mixin', require => {
this._displayInlineForm(checkedRadio);
this._enableButton();
} else {
- this._setPaymentFlow(); // Initialize the payment flow to let acquirers overwrite it
+ this._setPaymentFlow(); // Initialize the payment flow to let providers overwrite it
}
},
@@ -117,7 +117,7 @@ odoo.define('payment.payment_form_mixin', require => {
_displayInlineForm: function (radio) {
this._hideInlineForms(); // Collapse previously opened inline forms
this._hideError(); // The error is only relevant until it is hidden with its inline form
- this._setPaymentFlow(); // Reset the payment flow to let acquirers overwrite it
+ this._setPaymentFlow(); // Reset the payment flow to let providers overwrite it
// Extract contextual values from the radio button
const provider = this._getProviderFromRadio(radio);
@@ -181,7 +181,7 @@ odoo.define('payment.payment_form_mixin', require => {
/**
* Determine and return the online payment flow of the selected payment option.
*
- * As some acquirers implement both the direct payment and the payment with redirection, the
+ * As some providers implement both the direct payment and the payment with redirection, the
* flow cannot be inferred from the radio button only. The radio button only indicates
* whether the payment option is a token. If not, the transaction context is looked up to
* determine whether the flow is 'direct' or 'redirect'.
@@ -208,7 +208,7 @@ odoo.define('payment.payment_form_mixin', require => {
*
* @private
* @param {HTMLInputElement} radio - The radio button linked to the payment option
- * @return {number} The acquirer id or the token id or of the payment option linked to the
+ * @return {number} The provider id or the token id or of the payment option linked to the
* radio button.
*/
_getPaymentOptionIdFromRadio: radio => $(radio).data('payment-option-id'),
@@ -223,7 +223,7 @@ odoo.define('payment.payment_form_mixin', require => {
_getProviderFromRadio: radio => $(radio).data('provider'),
/**
- * Remove the error in the acquirer form.
+ * Remove the error in the provider form.
*
* @private
* @return {jQuery} The removed error
@@ -280,16 +280,16 @@ odoo.define('payment.payment_form_mixin', require => {
/**
* Prepare the params to send to the transaction route.
*
- * For an acquirer to overwrite generic params or to add acquirer-specific ones, it must
+ * For a provider to overwrite generic params or to add provider-specific ones, it must
* override this method and return the extended transaction route params.
*
* @private
- * @param {string} provider - The provider of the selected payment option's acquirer
+ * @param {string} code - The code of the selected payment option provider
* @param {number} paymentOptionId - The id of the selected payment option
* @param {string} flow - The online payment flow of the selected payment option
* @return {object} The transaction route params
*/
- _prepareTransactionRouteParams: function (provider, paymentOptionId, flow) {
+ _prepareTransactionRouteParams: function (code, paymentOptionId, flow) {
return {
'payment_option_id': paymentOptionId,
'reference_prefix': this.txContext.referencePrefix !== undefined
@@ -310,49 +310,49 @@ odoo.define('payment.payment_form_mixin', require => {
},
/**
- * Prepare the acquirer-specific inline form of the selected payment option.
+ * Prepare the provider-specific inline form of the selected payment option.
*
- * For an acquirer to manage an inline form, it must override this method. When the override
+ * For a provider to manage an inline form, it must override this method. When the override
* is called, it must lookup the parameters to decide whether it is necessary to prepare its
* inline form. Otherwise, the call must be sent back to the parent method.
*
* @private
- * @param {string} provider - The provider of the selected payment option's acquirer
+ * @param {string} code - The code of the selected payment option's provider
* @param {number} paymentOptionId - The id of the selected payment option
* @param {string} flow - The online payment flow of the selected payment option
* @return {Promise}
*/
- _prepareInlineForm: (provider, paymentOptionId, flow) => Promise.resolve(),
+ _prepareInlineForm: (code, paymentOptionId, flow) => Promise.resolve(),
/**
* Process the payment.
*
- * For an acquirer to do pre-processing work on the transaction processing flow, or to
+ * For a provider to do pre-processing work on the transaction processing flow, or to
* define its entire own flow that requires re-scheduling the RPC to the transaction route,
* it must override this method.
* If only post-processing work is needed, an override of `_processRedirectPayment`,
* `_processDirectPayment` or `_processTokenPayment` might be more appropriate.
*
* @private
- * @param {string} provider - The provider of the payment option's acquirer
+ * @param {string} code - The code of the payment option's provider
* @param {number} paymentOptionId - The id of the payment option handling the transaction
* @param {string} flow - The online payment flow of the transaction
* @return {Promise}
*/
- _processPayment: function (provider, paymentOptionId, flow) {
+ _processPayment: function (code, paymentOptionId, flow) {
// Call the transaction route to create a tx and retrieve the processing values
return this._rpc({
route: this.txContext.transactionRoute,
- params: this._prepareTransactionRouteParams(provider, paymentOptionId, flow),
+ params: this._prepareTransactionRouteParams(code, paymentOptionId, flow),
}).then(processingValues => {
if (flow === 'redirect') {
return this._processRedirectPayment(
- provider, paymentOptionId, processingValues
+ code, paymentOptionId, processingValues
);
} else if (flow === 'direct') {
- return this._processDirectPayment(provider, paymentOptionId, processingValues);
+ return this._processDirectPayment(code, paymentOptionId, processingValues);
} else if (flow === 'token') {
- return this._processTokenPayment(provider, paymentOptionId, processingValues);
+ return this._processTokenPayment(code, paymentOptionId, processingValues);
}
}).guardedCatch(error => {
error.event.preventDefault();
@@ -365,32 +365,32 @@ odoo.define('payment.payment_form_mixin', require => {
},
/**
- * Execute the acquirer-specific implementation of the direct payment flow.
+ * Execute the provider-specific implementation of the direct payment flow.
*
- * For an acquirer to redefine the processing of the direct payment flow, it must override
+ * For a provider to redefine the processing of the direct payment flow, it must override
* this method.
*
* @private
- * @param {string} provider - The provider of the acquirer
- * @param {number} acquirerId - The id of the acquirer handling the transaction
+ * @param {string} code - The code of the provider
+ * @param {number} providerId - The id of the provider handling the transaction
* @param {object} processingValues - The processing values of the transaction
* @return {Promise}
*/
- _processDirectPayment: (provider, acquirerId, processingValues) => Promise.resolve(),
+ _processDirectPayment: (code, providerId, processingValues) => Promise.resolve(),
/**
* Redirect the customer by submitting the redirect form included in the processing values.
*
- * For an acquirer to redefine the processing of the payment with redirection flow, it must
+ * For a provider to redefine the processing of the payment with redirection flow, it must
* override this method.
*
* @private
- * @param {string} provider - The provider of the acquirer
- * @param {number} acquirerId - The id of the acquirer handling the transaction
+ * @param {string} code - The code of the provider
+ * @param {number} providerId - The id of the provider handling the transaction
* @param {object} processingValues - The processing values of the transaction
* @return {undefined}
*/
- _processRedirectPayment: (provider, acquirerId, processingValues) => {
+ _processRedirectPayment: (code, providerId, processingValues) => {
// Append the redirect form to the body
const $redirectForm = $(processingValues.redirect_form_html).attr(
'id', 'o_payment_redirect_form'
@@ -404,16 +404,16 @@ odoo.define('payment.payment_form_mixin', require => {
/**
* Redirect the customer to the status route.
*
- * For an acquirer to redefine the processing of the payment by token flow, it must override
+ * For a provider to redefine the processing of the payment by token flow, it must override
* this method.
*
* @private
- * @param {string} provider - The provider of the token's acquirer
+ * @param {string} provider_code - The code of the token's provider
* @param {number} tokenId - The id of the token handling the transaction
* @param {object} processingValues - The processing values of the transaction
* @return {undefined}
*/
- _processTokenPayment: (provider, tokenId, processingValues) => {
+ _processTokenPayment: (provider_code, tokenId, processingValues) => {
// The flow is already completed as payments by tokens are immediately processed
window.location = '/payment/status';
},
@@ -421,7 +421,7 @@ odoo.define('payment.payment_form_mixin', require => {
/**
* Set the online payment flow for the selected payment option.
*
- * For an acquirer to manage direct payments, it must call this method from within its
+ * For a provider to manage direct payments, it must call this method from within its
* override of `_prepareInlineForm` to declare its payment flow for the selected payment
* option.
*
@@ -460,7 +460,7 @@ odoo.define('payment.payment_form_mixin', require => {
//--------------------------------------------------------------------------
/**
- * Hide all extra payment icons of the acquirer linked to the clicked button.
+ * Hide all extra payment icons of the provider linked to the clicked button.
*
* Called when clicking on the "show less" button.
*
@@ -480,7 +480,7 @@ odoo.define('payment.payment_form_mixin', require => {
},
/**
- * Display all the payment icons of the acquirer linked to the clicked button.
+ * Display all the payment icons of the provider linked to the clicked button.
*
* Called when clicking on the "show more" button.
*
diff --git a/addons/payment/static/src/scss/payment_acquirer.scss b/addons/payment/static/src/scss/payment_provider.scss
similarity index 91%
rename from addons/payment/static/src/scss/payment_acquirer.scss
rename to addons/payment/static/src/scss/payment_provider.scss
index 35b3d6743c8..18a6fe93bca 100644
--- a/addons/payment/static/src/scss/payment_acquirer.scss
+++ b/addons/payment/static/src/scss/payment_provider.scss
@@ -1,5 +1,5 @@
.o_form_view {
- .o_payment_acquirer_desc {
+ .o_payment_provider_desc {
margin-top: 10px;
ul {
list-style-type: none;
diff --git a/addons/payment/static/src/xml/payment_post_processing.xml b/addons/payment/static/src/xml/payment_post_processing.xml
index 5bd8e10055f..abb82a7284e 100644
--- a/addons/payment/static/src/xml/payment_post_processing.xml
+++ b/addons/payment/static/src/xml/payment_post_processing.xml
@@ -53,7 +53,7 @@
+ with the current transaction state, set on the provider. -->
@@ -74,7 +74,7 @@
+ with the current transaction state, set on the provider. -->
@@ -99,11 +99,11 @@
+ with the current transaction state, set on the provider. -->
- We are waiting for the payment acquirer to confirm the payment.
+ We are waiting for the payment provider to confirm the payment.
diff --git a/addons/payment/tests/__init__.py b/addons/payment/tests/__init__.py
index ffe0a5454dd..04f8aa0a76c 100644
--- a/addons/payment/tests/__init__.py
+++ b/addons/payment/tests/__init__.py
@@ -4,6 +4,6 @@ from . import common
from . import http_common
from . import test_flows
from . import test_multicompany_flows
-from . import test_payment_acquirer
+from . import test_payment_provider
from . import test_payment_token
from . import test_payment_transaction
diff --git a/addons/payment/tests/common.py b/addons/payment/tests/common.py
index 334be91d13e..e16b5db32ba 100644
--- a/addons/payment/tests/common.py
+++ b/addons/payment/tests/common.py
@@ -59,7 +59,7 @@ class PaymentCommon(TransactionCase):
'country_id': cls.country_belgium.id,
})
- # Create a dummy acquirer to allow basic tests without any specific acquirer implementation
+ # Create a dummy provider to allow basic tests without any specific provider implementation
arch = """
-
-
+
+
diff --git a/addons/payment/views/payment_portal_templates.xml b/addons/payment/views/payment_portal_templates.xml
index 55132068e80..66143a25e6a 100644
--- a/addons/payment/views/payment_portal_templates.xml
+++ b/addons/payment/views/payment_portal_templates.xml
@@ -5,11 +5,11 @@
-
+
-
@@ -40,7 +40,7 @@
Warning You must be logged in to pay.
-
+
No suitable payment option could be found.
If you believe that it is an error, please contact the website administrator.
@@ -76,9 +76,9 @@
-
+
-
No suitable payment acquirer could be found.
+
No suitable payment provider could be found.
If you believe that it is an error, please contact the website administrator.
@@ -156,7 +156,7 @@
- Processed by
+ Processed by
- Warning Creating a payment acquirer from the CREATE button is not supported.
+ Warning Creating a payment provider from the CREATE button is not supported.
Please use the Duplicate action instead.
-
+
-
-
+
+
-
+
-
+
@@ -118,14 +118,14 @@
-
- payment.acquirer.list
- payment.acquirer
+
+ payment.provider.list
+ payment.provider
-
+
-
+
@@ -133,16 +133,16 @@
-
- payment.acquirer.kanban
- payment.acquirer
+
+ payment.provider.kanban
+ payment.provider
-
+
@@ -155,11 +155,11 @@
-
+
![Acquirer]()
+ alt="provider"/>
@@ -194,16 +194,16 @@
-
- payment.acquirer.search
- payment.acquirer
+
+ payment.provider.search
+ payment.provider
-
-
-
+
+
+
-
+
@@ -211,13 +211,13 @@
-
- Payment Acquirers
- payment.acquirer
+
+ Payment Providers
+ payment.provider
kanban,tree,form
- Create a new payment acquirer
+ Create a new payment provider
diff --git a/addons/payment/views/payment_templates.xml b/addons/payment/views/payment_templates.xml
index db473bba442..09baea9e1a2 100644
--- a/addons/payment/views/payment_templates.xml
+++ b/addons/payment/views/payment_templates.xml
@@ -4,10 +4,10 @@
-
+