Compare commits

...

3 commits

Author SHA1 Message Date
Benjamin Bach 3af6ae0097
Add some more admin controls 2024-08-04 12:27:02 +02:00
Benjamin Bach a93a879f50
Don't Error 500 when using other member's Order PK etc 2024-08-04 12:06:52 +02:00
Benjamin Bach 1070e93885 Divide the amount received from Stripe by 100.0 (#40)
Reviewed-on: data.coop/membersystem#40
Reviewed-by: valberg <valberg@orn.li>
Co-authored-by: Benjamin Bach <benjamin@overtag.dk>
Co-committed-by: Benjamin Bach <benjamin@overtag.dk>
2024-08-04 07:34:50 +00:00
6 changed files with 35 additions and 4 deletions

View file

@ -43,7 +43,9 @@ class OrderAdmin(admin.ModelAdmin):
inlines = (OrderProductInline,)
form = OrderAdminForm
list_display = ("member", "description", "created", "is_paid")
list_display = ("member", "description", "created", "is_paid", "total_with_vat")
search_fields = ("member__email", "membership__membership_type__name", "description")
list_filter = ("is_paid", "membership__membership_type")
@admin.register(models.Payment)

View file

@ -4,6 +4,7 @@ from hashlib import md5
from typing import Self
from django.conf import settings
from django.contrib import admin
from django.db import models
from django.db.models.aggregates import Sum
from django.utils.translation import gettext as _
@ -96,6 +97,11 @@ class Order(CreatedModifiedAbstract):
return sum(item.vat * item.quantity for item in self.items.all())
@property
@admin.display(
ordering=None,
description="Total (incl. VAT)",
boolean=False,
)
def total_with_vat(self) -> Money:
"""Return the TOTAL amount WITH VAT."""
return self.total + self.total_vat

View file

@ -102,7 +102,7 @@ def success(request: HttpRequest, order_id: int) -> HttpResponse:
quickly as possible.
"""
user = request.user # People just need to login to pay something, not necessarily be a member
order = models.Order.objects.get(pk=order_id, member=user)
order = get_object_or_404(models.Order, pk=order_id, member=user)
context = {
"order": order,
@ -168,7 +168,7 @@ def stripe_webhook(request: HttpRequest) -> HttpResponse:
if not models.Payment.objects.filter(order=order).exists():
models.Payment.objects.create(
order=order,
amount=Money(event["data"]["object"]["amount_total"], event["data"]["object"]["currency"]),
amount=Money(event["data"]["object"]["amount_total"] / 100.0, event["data"]["object"]["currency"]),
description="Paid via Stripe",
payment_type=models.PaymentType.objects.get_or_create(name="Stripe")[0],
external_transaction_id=event["id"],

View file

@ -29,6 +29,10 @@ admin.site.unregister(User)
class MembershipAdmin(admin.ModelAdmin):
"""Admin for Membership model."""
list_display = ("user", "period", "membership_type", "activated", "revoked")
list_filter = ("period", "membership_type", "activated", "revoked")
search_fields = ("membership_type__name", "user__email", "user__first_name", "user__last_name")
@admin.register(MembershipType)
class MembershipTypeAdmin(admin.ModelAdmin):

View file

@ -0,0 +1,19 @@
# Generated by Django 5.1b1 on 2024-08-04 10:26
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('membership', '0007_membership_activated_membership_activated_on_and_more'),
]
operations = [
migrations.AlterField(
model_name='membership',
name='membership_type',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='memberships', to='membership.membershiptype', verbose_name='membership type'),
),
]

View file

@ -125,7 +125,7 @@ class Membership(CreatedModifiedAbstract):
membership_type = models.ForeignKey(
"membership.MembershipType",
related_name="memberships",
verbose_name=_("subscription type"),
verbose_name=_("membership type"),
on_delete=models.PROTECT,
)