Skip to content

Commit

Permalink
Add deferred donation admin view
Browse files Browse the repository at this point in the history
  • Loading branch information
stefanw committed Mar 11, 2025
1 parent 834dd4d commit 16d5412
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 0 deletions.
82 changes: 82 additions & 0 deletions fragdenstaat_de/fds_donation/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from django.utils.translation import gettext_lazy as _

from adminsortable2.admin import SortableAdminMixin
from froide_payment.models import PaymentStatus

from froide.helper.admin_utils import (
ForeignKeyFilter,
Expand All @@ -40,6 +41,7 @@
from .models import (
DONATION_PROJECTS,
DefaultDonation,
DeferredDonation,
Donation,
DonationGift,
DonationGiftOrder,
Expand Down Expand Up @@ -955,3 +957,83 @@ class DefaultDonationAdmin(DonationAdmin):
admin.site.register(DonationGiftOrder, DonationGiftOrderAdmin)
admin.site.register(DonorTag, DonorTagAdmin)
admin.site.register(DefaultDonation, DefaultDonationAdmin)


class DeferredDonationAdmin(admin.ModelAdmin):
list_display = (
"timestamp",
"amount",
"donor_details",
"number",
"donor_email_confirmed",
"payment_fraud_message",
"payment_details",
"project",
"purpose",
"method",
"reference",
"keyword",
)

actions = ["confirm", "cancel"]

def get_queryset(self, request):
return (
super()
.get_queryset(request)
.filter(payment__status=PaymentStatus.DEFERRED)
.select_related("payment", "donor")
)

def donor_details(self, obj):
return str(obj.donor)

donor_details.short_description = _("Donor")
donor_details.admin_order_field = Concat(
"donor__first_name", Value(" "), "donor__last_name"
)

def donor_email_confirmed(self, obj):
return obj.donor.email_confirmed

donor_email_confirmed.short_description = _("Email confirmed")

def payment_fraud_message(self, obj):
return obj.payment.fraud_message

payment_fraud_message.short_description = _("Suspicious")

def payment_fraud_message(self, obj):
return obj.payment.fraud_message

payment_fraud_message.short_description = _("Suspicious")

def payment_details(self, obj):
try:
iban = obj.payment.attrs.iban
except AttributeError:
iban = "n/a"
iban = iban[:4]
return "IBAN[4]: {iban}, IP: {ip}".format(
iban=iban,
ip=obj.payment.customer_ip_address,
)

payment_details.short_description = _("Payment details")

@admin.action(description=_("✅ Confirm donations"))
def confirm(self, request, queryset):
for donation in queryset:
obj = donation.payment
provider = obj.get_provider()
provider.confirm_payment(obj)

@admin.action(description=_("❌ Cancel donations"))
def cancel(self, request, queryset):
for donation in queryset:
obj = donation.payment
provider = obj.get_provider()
provider.cancel_payment(obj)


admin.site.register(DeferredDonation, DeferredDonationAdmin)
26 changes: 26 additions & 0 deletions fragdenstaat_de/fds_donation/migrations/0049_deferreddonation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Generated by Django 4.2.16 on 2025-03-11 10:55

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('fds_donation', '0048_alter_donationformcmsplugin_next_url'),
]

operations = [
migrations.CreateModel(
name='DeferredDonation',
fields=[
],
options={
'verbose_name': 'Deferred Donation',
'verbose_name_plural': 'Deferred Donation',
'proxy': True,
'indexes': [],
'constraints': [],
},
bases=('fds_donation.donation',),
),
]
7 changes: 7 additions & 0 deletions fragdenstaat_de/fds_donation/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,13 @@ class Meta:
verbose_name_plural = "FragDenStaat Spenden"


class DeferredDonation(Donation):
class Meta:
proxy = True
verbose_name = _("Deferred Donation")
verbose_name_plural = _("Deferred Donation")


class DonationGift(models.Model):
name = models.CharField(max_length=255)
description = models.TextField(blank=True)
Expand Down

0 comments on commit 16d5412

Please sign in to comment.