diff --git a/doc/development/api/payment.rst b/doc/development/api/payment.rst index 747e0229a0..5f097e25d7 100644 --- a/doc/development/api/payment.rst +++ b/doc/development/api/payment.rst @@ -62,6 +62,8 @@ The provider class .. autoattribute:: is_enabled + .. autoattribute:: priority + .. autoattribute:: settings_form_fields .. automethod:: settings_form_clean diff --git a/src/pretix/base/models/event.py b/src/pretix/base/models/event.py index 6eadc8e5f2..fbee95c12a 100644 --- a/src/pretix/base/models/event.py +++ b/src/pretix/base/models/event.py @@ -632,7 +632,9 @@ class Event(EventMixin, LoggedModel): pp = p(self) providers[pp.identifier] = pp - self._cached_payment_providers = OrderedDict(sorted(providers.items(), key=lambda v: str(v[1].verbose_name))) + self._cached_payment_providers = OrderedDict(sorted( + providers.items(), key=lambda v: (-v[1].priority, str(v[1].verbose_name)) + )) return self._cached_payment_providers def get_html_mail_renderer(self): diff --git a/src/pretix/base/payment.py b/src/pretix/base/payment.py index b4df86cfbd..1c88106e04 100644 --- a/src/pretix/base/payment.py +++ b/src/pretix/base/payment.py @@ -83,6 +83,14 @@ class BasePaymentProvider: """ return False + @property + def priority(self) -> int: + """ + Returns a priority that is used for sorting payment providers. Higher priority means higher up in the list. + Default to 100. Providers with same priority are sorted alphabetically. + """ + return 100 + @property def is_enabled(self) -> bool: """ @@ -925,6 +933,7 @@ class OffsettingProvider(BasePaymentProvider): class GiftCardPayment(BasePaymentProvider): identifier = "giftcard" verbose_name = _("Gift card") + priority = 10 @property def settings_form_fields(self):