Skip to content
Snippets Groups Projects
Commit a394002e authored by Tom Teichler's avatar Tom Teichler :beers:
Browse files

Merge branch 'payment-backends' into 3-add-payment-processing-ui-2

parents 4c91c9b0 9d5664c1
No related branches found
No related tags found
2 merge requests!9Resolve "Add payment processing UI",!3Implement payment backends and interaction
Pipeline #59242 canceled
...@@ -17,6 +17,7 @@ Licence ...@@ -17,6 +17,7 @@ Licence
:: ::
Copyright © 2022 Dominik George <dominik.george@teckids.org> Copyright © 2022 Dominik George <dominik.george@teckids.org>
Copyright © 2022 Tom Teichler <tom.teichler@teckids.org>
Licenced under the EUPL, version 1.2 or later Licenced under the EUPL, version 1.2 or later
......
...@@ -13,7 +13,7 @@ class DefaultConfig(AppConfig): ...@@ -13,7 +13,7 @@ class DefaultConfig(AppConfig):
"Repository": "https://edugit.org/AlekSIS/onboarding//AlekSIS-App-Tezor", "Repository": "https://edugit.org/AlekSIS/onboarding//AlekSIS-App-Tezor",
} }
licence = "EUPL-1.2+" licence = "EUPL-1.2+"
copyright_info = (([2022], "Dominik George", "dominik.george@teckids.org"),) copyright_info = (([2022], "Dominik George", "dominik.george@teckids.org"), ([2022], "Tom Teichler", "tom.teichler@teckids.org"),)
def ready(self): def ready(self):
from django.conf import settings # noqa from django.conf import settings # noqa
......
...@@ -46,6 +46,14 @@ class Invoice(BasePayment, PureDjangoModel): ...@@ -46,6 +46,14 @@ class Invoice(BasePayment, PureDjangoModel):
def get_purchased_items(self): def get_purchased_items(self):
return self.for_object.get_purchased_items() return self.for_object.get_purchased_items()
def get_person(self):
if hasattr(self.for_object, "person"):
return self.for_object.person
elif hasattr(self.for_object, "get_person"):
return self.for_object.get_person()
return None
class Meta: class Meta:
constraints = [ constraints = [
models.UniqueConstraint(fields=["transaction_id", "group"], name="number_uniq_per_group") models.UniqueConstraint(fields=["transaction_id", "group"], name="number_uniq_per_group")
......
from django.contrib.auth import get_user_model
from rules import predicate
from .models.invoice import Invoice
@predicate
def is_own_invoice(user: User, obj: Invoice):
"""Predicate which checks if the invoice is linked to the current user."""
return obj.get_person() == user.person
@predicate
def has_no_payment_variant(user: User, obj: Invoice):
"""Predicate which checks that the invoice has no payment variant."""
return not obj.variant
@predicate
def is_in_payment_status(status: str):
"""Predicate which checks whether the invoice is in a specific state."""
def _predicate(user: User, obj: Invoice):
return obj.status == status
return _predicate
...@@ -8,6 +8,18 @@ from aleksis.core.registries import site_preferences_registry ...@@ -8,6 +8,18 @@ from aleksis.core.registries import site_preferences_registry
payments = Section("payments", verbose_name=_("Payments")) payments = Section("payments", verbose_name=_("Payments"))
@site_preferences_registry.register
class EnablePledge(BooleanPreference):
"""Allow payments to be made by anyone, not only invoice recipient."""
section = payments
name = "public_payments"
verbose_name = _("Public payments")
help_text = _("Allow anyone (including guests) to make payments. Basic invoice information will be visible to anyone who knows the invoice token.")
default = True
required = False
@site_preferences_registry.register @site_preferences_registry.register
class SofortAPIID(StringPreference): class SofortAPIID(StringPreference):
"""Sofort payment backend - API ID.""" """Sofort payment backend - API ID."""
......
import rules import rules
from payments import PaymentStatus
from aleksis.core.util.predicates import has_person, has_global_perm, has_any_object, has_object_perm, is_site_preference_set
from .models.base import Client from .models.base import Client
from .models.invoice import Invoice, InvoiceGroup from .models.invoice import Invoice, InvoiceGroup
from .predicates import has_no_payment_variant, is_own_invoice, is_in_payment_status
from aleksis.core.util.predicates import has_person, has_global_perm, has_any_object, has_object_perm
# View clients # View clients
view_clients_predicate = has_person & ( view_clients_predicate = has_person & (
...@@ -65,8 +67,22 @@ delete_invoice_groups_predicate = has_person & ( ...@@ -65,8 +67,22 @@ delete_invoice_groups_predicate = has_person & (
) )
rules.add_perm("tezor.delete_invoice_groups_rule", delete_invoice_groups_predicate) rules.add_perm("tezor.delete_invoice_groups_rule", delete_invoice_groups_predicate)
# Display invoice billing information
display_billing_predicate = has_person & (is_own_invoice | has_global_perm("tezor.display_billing") | has_object_perm("tezor.display_billing"))
rules.add_perm("tezor.display_billing_rule", display_billing_predicate)
# Display invoice purchased items
display_purchased_items_predicate = has_person & (is_own_invoice | has_global_perm("tezor.display_purchased_items") | has_object_perm("tezor.display_purchased_items"))
rules.add_perm("tezor.display_purchased_items_rule", display_purchased_items_predicate)
# Change payment variant
change_payment_variant_predicate = has_person & is_in_payment_status(PaymentStatus.WAITING) & ((is_own_invoice & has_no_payment_variant) | has_global_perm("tezor.change_payment_variant") | has_object_perm("tezor.change_payment_variant"))
rules.add_perm("tezor.change_payment_variant", change_payment_variant_predicate)
# Start payment
do_payment_predicate = has_person & (is_in_payment_status(PaymentStatus.WAITING) | is_in_payment_status(PaymentStatus.INPUT) | is_in_payment_status(PaymentStatus.ERROR) | is_in_payment_status(PaymentStatus.REJECTED)) & ((is_own_invoice | is_site_preference_set("payments", "public_payments")) | has_global_perm("tezor.do_payment") | has_object_perm("tezor.do_payment"))
rules.add_perm("tezor.do_payment", do_payment_predicate)
# View invoice # View invoice
view_invoice_predicate = has_person & ( view_invoice_predicate = is_own_invoice | is_site_preference_set("payments", "public_payments") | has_global_perm("tezor.view_invoice") | has_object_perm("tezor.view_invoice")
has_global_perm("tezor.view_invoice") | has_object_perm("tezor.view_invoice")
)
rules.add_perm("tezor.view_invoice_rule", view_invoice_predicate) rules.add_perm("tezor.view_invoice_rule", view_invoice_predicate)
...@@ -12,7 +12,7 @@ include = [ ...@@ -12,7 +12,7 @@ include = [
] ]
description = "AlekSIS (School Information System) — App Tezor (account and payment system)" description = "AlekSIS (School Information System) — App Tezor (account and payment system)"
authors = ["Dominik George <dominik.george@teckids.org>"] authors = ["Dominik George <dominik.george@teckids.org>", "Tom Teichler <tom.teichler@teckids.org>"]
license = "EUPL-1.2-or-later" license = "EUPL-1.2-or-later"
homepage = "https://aleksis.org" homepage = "https://aleksis.org"
repository = "https://edugit.org/AlekSIS/onboarding//AlekSIS-App-Tezor" repository = "https://edugit.org/AlekSIS/onboarding//AlekSIS-App-Tezor"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment