diff --git a/addons/payment/models/payment_acquirer.py b/addons/payment/models/payment_acquirer.py
index a00151254a3..4cf1fd8249f 100644
--- a/addons/payment/models/payment_acquirer.py
+++ b/addons/payment/models/payment_acquirer.py
@@ -99,12 +99,19 @@ class PaymentAcquirer(models.Model):
default=lambda self: _("Your payment has been cancelled."), translate=True)
# Feature support fields
- support_authorization = fields.Boolean(string="Authorize Mechanism Supported")
- support_fees_computation = fields.Boolean(string="Fees Computation Supported")
- support_tokenization = fields.Boolean(string="Tokenization Supported")
+ support_fees = fields.Boolean(
+ string="Fees Supported", compute='_compute_feature_support_fields'
+ )
+ support_manual_capture = fields.Boolean(
+ string="Manual Capture Supported", compute='_compute_feature_support_fields'
+ )
support_refund = fields.Selection(
string="Type of Refund Supported",
selection=[('full_only', "Full Only"), ('partial', "Partial")],
+ compute='_compute_feature_support_fields',
+ )
+ support_tokenization = fields.Boolean(
+ string="Tokenization Supported", compute='_compute_feature_support_fields'
)
# Kanban view fields
@@ -204,6 +211,18 @@ class PaymentAcquirer(models.Model):
elif payment_method_line:
payment_method_line.unlink()
+ def _compute_feature_support_fields(self):
+ """ Compute the feature support fields.
+
+ For an acquirer to support one or more additional feature, it must override this method.
+
+ :return: None
+ """
+ self.update(dict.fromkeys(
+ ('support_fees', 'support_manual_capture', 'support_refund', 'support_tokenization'),
+ None,
+ ))
+
def _get_default_payment_method_id(self):
self.ensure_one()
return self.env.ref('account.account_payment_method_manual_in').id
diff --git a/addons/payment/models/payment_transaction.py b/addons/payment/models/payment_transaction.py
index 44d96686073..4da7ba1f2d2 100644
--- a/addons/payment/models/payment_transaction.py
+++ b/addons/payment/models/payment_transaction.py
@@ -159,7 +159,7 @@ 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_authorization
+ lambda tx: tx.state == 'authorized' and not tx.acquirer_id.support_manual_capture
)
if illegal_authorize_state_txs:
raise ValidationError(_(
diff --git a/addons/payment/tests/test_payments.py b/addons/payment/tests/test_payments.py
index c341986e90c..a4b26d85e13 100644
--- a/addons/payment/tests/test_payments.py
+++ b/addons/payment/tests/test_payments.py
@@ -36,7 +36,7 @@ class TestPayments(PaymentCommon):
def test_full_amount_available_for_refund_when_refunds_are_pending(self):
self.acquirer.write({
'support_refund': 'full_only', # Should simply not be False
- 'support_authorization': True, # To create transaction in the 'authorized' state
+ 'support_manual_capture': True, # To create transaction in the 'authorized' state
})
tx = self.create_transaction('redirect', state='done')
tx._reconcile_after_done() # Create the payment
diff --git a/addons/payment/views/payment_acquirer_views.xml b/addons/payment/views/payment_acquirer_views.xml
index f9b8bf92ac2..ff0e819321b 100644
--- a/addons/payment/views/payment_acquirer_views.xml
+++ b/addons/payment/views/payment_acquirer_views.xml
@@ -6,8 +6,8 @@
payment.acquirer