diff --git a/aleksis/apps/tezor/apps.py b/aleksis/apps/tezor/apps.py index 91be7bb899eae1e9d1a56bd40651423b41fe37e8..a5af98e35bf1d586fd015df471427724cf82fe71 100644 --- a/aleksis/apps/tezor/apps.py +++ b/aleksis/apps/tezor/apps.py @@ -1,4 +1,7 @@ +from django.apps import apps + from aleksis.core.util.apps import AppConfig +from aleksis.core.util.core_helpers import get_site_preferences class DefaultConfig(AppConfig): @@ -11,3 +14,39 @@ class DefaultConfig(AppConfig): } licence = "EUPL-1.2+" copyright_info = (([2022], "Dominik George", "dominik.george@teckids.org"),) + + def ready(self): + from django.conf import settings # noqa + settings.PAYMENT_MODEL = "tezor.Invoice" + settings.PAYMENT_VARIANTS = { + "dummy": ("payments.dummy.DummyProvider", {}) + } + + for app_config in apps.app_configs.values(): + if hasattr(app_config, "get_payment_variants"): + variants = app_config.get_payment_variants() + for name, config in variants.items(): + if name not in settings.PAYMENT_VARIANTS: + settings.PAYMENT_VARIANTS[name] = config + + def get_payment_variants(self): + prefs = get_site_preferences() + variants = {} + + if prefs["payments__sofort_api_id"]: + variants["sofort"] = ("payments.sofort.SofortProvider", { + "id": prefs["payments__sofort_api_id"], + "key": prefs["payments__sofort_api_key"], + "project_id": prefs["payments__sofort_project_id"], + "endpoint": "https://api.sofort.com/api/xml", + }) + + if prefs["payments__paypal_client_id"]: + variants["paypal"] = ("payments.paypal.PaypalProvider", { + "client_id": prefs["payments__paypal_client_id"], + "secret": prefs["payments__paypal_secret"], + "capture": not prefs["payments__paypal_capture"], + "endpoint": "https://api.paypal.com", + }) + + return variants diff --git a/aleksis/apps/tezor/preferences.py b/aleksis/apps/tezor/preferences.py new file mode 100644 index 0000000000000000000000000000000000000000..adf2b2925cd7dee7659c63a522c50335096482fa --- /dev/null +++ b/aleksis/apps/tezor/preferences.py @@ -0,0 +1,74 @@ +from django.utils.translation import gettext_lazy as _ + +from dynamic_preferences.preferences import Section +from dynamic_preferences.types import BooleanPreference, StringPreference + +from aleksis.core.registries import site_preferences_registry + +payments = Section("payments", verbose_name=_("Payments")) + + +@site_preferences_registry.register +class SofortAPIID(StringPreference): + """Sofort payment backend - API ID.""" + + section = payments + name = "sofort_api_id" + verbose_name = _("Sofort / Klarna - API ID") + default = "" + required = False + + +@site_preferences_registry.register +class SofortAPIKey(StringPreference): + """Sofort payment backend - API key.""" + + section = payments + name = "sofort_api_key" + verbose_name = _("Sofort / Klarna - API Key") + default = "" + required = False + + +@site_preferences_registry.register +class SofortProjectID(StringPreference): + """Sofort payment backend - project ID.""" + + section = payments + name = "sofort_project_id" + verbose_name = _("Sofort / Klarna - Project ID") + default = "" + required = False + + +@site_preferences_registry.register +class PaypalClientID(StringPreference): + """PayPal payment backend - client ID.""" + + section = payments + name = "paypal_client_id" + verbose_name = _("PayPal - Client ID") + default = "" + required = False + + +@site_preferences_registry.register +class PaypalSecret(StringPreference): + """PayPal payment backend - secret.""" + + section = payments + name = "paypal_secret" + verbose_name = _("PayPal - Secret") + default = "" + required = False + + +@site_preferences_registry.register +class PaypalCapture(BooleanPreference): + """PayPal payment backend - use Authorize & Capture.""" + + section = payments + name = "paypal_capture" + verbose_name = _("PayPal - Use Authorize & Capture") + default = False + required = False