Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • AlekSIS/onboarding/AlekSIS-App-Tezor
  • sunweaver/AlekSIS-App-Tezor
  • 3lisvequii/AlekSIS-App-Tezor
3 results
Show changes
Commits on Source (9)
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,50 @@ 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",
})
if prefs["payments__pledge_enabled"]:
variants["pledge"] = ("djp_sepa.providers.PaymentPledgeProvider", {
})
if prefs["payments__sdd_creditor_identifier"]:
variants["sdd"] = ("djp_sepa.providers.DirectDebitProvider", {
"creditor": prefs["payments__sdd_creditor"],
"creditor_identifier": prefs["payments__sdd_creditor_identifier"],
})
return variants
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.shortcuts import reverse
from django.utils.translation import gettext_lazy as _
from djmoney.models.fields import CurrencyField, MoneyField
......@@ -77,3 +78,9 @@ class Invoice(BasePayment, PureDjangoModel):
})
return TotalsTable(values)
def get_success_url(self):
return reverse("invoice_by_pk", kwargs={"pk": self.pk})
def get_failure_url(self):
return reverse("invoice_by_pk", kwargs={"pk": self.pk})
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
@site_preferences_registry.register
class EnablePledge(BooleanPreference):
"""Payment pledge payment backend - enable or not."""
section = payments
name = "pledge_enabled"
verbose_name = _("Enabledp ledged payments")
default = False
required = False
@site_preferences_registry.register
class SDDCreditor(StringPreference):
"""SEPA direct debit backend - creditor name."""
section = payments
name = "sdd_creditor"
verbose_name = _("SEPA Direct Debit - Creditor name")
default = ""
required = False
@site_preferences_registry.register
class SDDCreditorIdentifier(StringPreference):
"""SEPA direct debit backend - creditor identifier."""
section = payments
name = "sdd_creditor_identifier"
verbose_name = _("SEPA Direct Debit - Creditor identifier")
default = ""
required = False
INSTALLED_APPS = ["payments"]
INSTALLED_APPS = ["payments", "djp_sepa"]
......@@ -98,7 +98,7 @@ class InvoicesTable(tables.Table):
text=_("View"),
)
print = tables.LinkColumn(
"get_invoice_by_pk",
"print_invoice",
args=[A("id")],
verbose_name=_("Print"),
text=_("Print"),
......
{% extends 'core/base.html' %}
{% load i18n %}
{% load material_form %}
{% block page_title %}{% blocktrans %}Make payment for{% endblocktrans %} {{ payment.transaction_id }}{% endblock %}
{% block browser_title %}{% blocktrans %}Make payment for{% endblocktrans %} {{ payment.transaction_id }}{% endblock %}
{% block content %}
<form action="{{ form.action }}" method="{{ form.method }}">
{% csrf_token %}
{% form form=form %}{% endform %}
{% trans "Confirm payment" as caption %}
{% include "core/partials/save_button.html" with caption=caption icon="shopping_cart_checkout" %}
</form>
{% endblock %}
......@@ -4,49 +4,50 @@ from . import views
urlpatterns = [
path("payments/", include("payments.urls")),
path("invoice/<int:pk>/print", views.GetInvoicePDF.as_view(), name="get_invoice_by_pk"),
path("invoice/<int:pk>/print/", views.GetInvoicePDF.as_view(), name="print_invoice"),
path("invoice/<str:token>/pay", views.do_payment, name="do_payment"),
path(
"clients/list",
"clients/",
views.ClientListView.as_view(),
name="clients",
),
path(
"clients/create",
"client/create/",
views.ClientCreateView.as_view(),
name="create_client",
),
path(
"clients/<int:pk>/edit",
"client/<int:pk>/edit/",
views.ClientEditView.as_view(),
name="edit_client_by_pk",
),
path(
"clients/<int:pk>/delete",
"client/<int:pk>/delete/",
views.ClientDeleteView.as_view(),
name="delete_client_by_pk",
),
path(
"clients/<int:pk>/",
"client/<int:pk>/",
views.ClientDetailView.as_view(),
name="client_by_pk",
),
path(
"client/<int:pk>/invoice_groups/create",
"client/<int:pk>/invoice_groups/create/",
views.InvoiceGroupCreateView.as_view(),
name="create_invoice_group",
),
path(
"invoice_groups/<int:pk>/edit",
"invoice_group/<int:pk>/edit/",
views.InvoiceGroupEditView.as_view(),
name="edit_invoice_group_by_pk",
),
path(
"invoice_groups/<int:pk>/",
"invoice_group/<int:pk>/",
views.InvoiceGroupDetailView.as_view(),
name="invoice_group_by_pk",
),
path(
"invoice_groups/<int:pk>/delete",
"invoice_group/<int:pk>/delete/",
views.InvoiceGroupDeleteView.as_view(),
name="delete_invoice_group_by_pk",
),
......
from django.views.generic import View
from django.shortcuts import render
from django.shortcuts import redirect, render, get_object_or_404
from django.views.decorators.cache import never_cache
from django.views.generic import FormView, TemplateView, View
from django.views.generic.detail import DetailView
from django.urls import reverse, reverse_lazy
from django.utils.decorators import method_decorator
from django.views.generic import FormView, TemplateView
from django.utils.translation import ugettext as _
from django.urls import reverse, reverse_lazy
from django.views.generic.detail import DetailView
from payments import get_payment_model, PaymentStatus, RedirectNeeded
from rules.contrib.views import PermissionRequiredMixin
from django_tables2.views import SingleTableView, RequestConfig
......@@ -32,6 +32,26 @@ class GetInvoicePDF(PermissionRequiredMixin, RenderPDFView):
print(invoice.group.__dict__)
return context
def do_payment(request, token):
payment = get_object_or_404(get_payment_model(), token=token)
if payment.status not in [PaymentStatus.WAITING, PaymentStatus.INPUT, PaymentStatus.REJECTED]:
return redirect(payment.get_success_url())
try:
form = payment.get_form(data=request.POST or None)
except RedirectNeeded as redirect_to:
return redirect(str(redirect_to))
context = {
"form": form,
"payment": payment,
}
return render(request, "tezor/invoice/payment.html", context)
class ClientListView(PermissionRequiredMixin, SingleTableView):
"""Table of all clients."""
......
......@@ -31,7 +31,9 @@ secondary = true
[tool.poetry.dependencies]
python = "^3.9"
aleksis-core = "^2.7"
django-payments = "^0.15.0"
django-payments = "^0.15.1"
pycountry = "22.1.10"
django-payments-sepa = "^1.0.dev0"
[tool.poetry.dev-dependencies]
aleksis-builddeps = "*"
......