Skip to content
Snippets Groups Projects

Implement payment backends and interaction

Merged Nik | Klampfradler requested to merge payment-backends into master
4 files
+ 65
5
Compare changes
  • Side-by-side
  • Inline
Files
4
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.db import models
 
from django.shortcuts import reverse
from django.utils.translation import gettext_lazy as _
from django.utils.translation import gettext_lazy as _
from djmoney.models.fields import CurrencyField, MoneyField
from djmoney.models.fields import CurrencyField, MoneyField
@@ -32,6 +33,13 @@ class InvoiceGroup(ExtensibleModel):
@@ -32,6 +33,13 @@ class InvoiceGroup(ExtensibleModel):
class Invoice(BasePayment, PureDjangoModel):
class Invoice(BasePayment, PureDjangoModel):
 
VARIANT_DISPLAY = {
 
"paypal": (_("PayPal"), "logos:paypal"),
 
"sofort": (_("Klarna / Sofort"), "simple-icons:klarna"),
 
"pledge": (_("Payment pledge / manual payment"), "mdi:hand-coin"),
 
"sdd": (_("SEPA Direct Debit"), "mdi:bank-transfer"),
 
}
 
group = models.ForeignKey(
group = models.ForeignKey(
InvoiceGroup, verbose_name=_("Invoice group"), related_name="invoices", on_delete=models.SET_NULL, null=True
InvoiceGroup, verbose_name=_("Invoice group"), related_name="invoices", on_delete=models.SET_NULL, null=True
)
)
@@ -42,12 +50,26 @@ class Invoice(BasePayment, PureDjangoModel):
@@ -42,12 +50,26 @@ class Invoice(BasePayment, PureDjangoModel):
for_object_id = models.PositiveIntegerField()
for_object_id = models.PositiveIntegerField()
for_object = GenericForeignKey("for_content_type", "for_object_id")
for_object = GenericForeignKey("for_content_type", "for_object_id")
 
def get_variant_name(self):
 
return self.__class__.VARIANT_DISPLAY[self.variant][0]
 
 
def get_variant_icon(self):
 
return self.__class__.VARIANT_DISPLAY[self.variant][1]
 
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=["number", "group"], name="number_uniq_per_group")
]
]
@property
@property
@@ -77,3 +99,9 @@ class Invoice(BasePayment, PureDjangoModel):
@@ -77,3 +99,9 @@ class Invoice(BasePayment, PureDjangoModel):
})
})
return TotalsTable(values)
return TotalsTable(values)
 
 
def get_success_url(self):
 
return reverse("invoice_by_token", kwargs={"slug": self.token})
 
 
def get_failure_url(self):
 
return reverse("invoice_by_token", kwargs={"slug": self.token})
Loading