membersystem/src/accounting/admin.py

74 lines
2.1 KiB
Python
Raw Normal View History

2024-07-15 00:19:37 +02:00
"""Admin for the accounting app."""
from django import forms
from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from . import models
class OrderProductInline(admin.TabularInline):
"""Administer contents of an order inline."""
model = models.OrderProduct
class OrderAdminForm(forms.ModelForm):
"""Special Form for the OrderAdmin so we don't need to require the account field."""
account = forms.ModelChoiceField(
required=False,
queryset=models.Account.objects.all(),
help_text=_("Leave empty to auto-choose the member's own account or to create one."),
)
class Meta:
model = models.Order
exclude = () # noqa: DJ006
def clean(self): # noqa: D102, ANN201
cd = super().clean()
if not cd["account"] and cd["member"]:
try:
cd["account"] = models.Account.objects.get_or_create(owner=cd["member"])[0]
except models.Account.MultipleObjectsReturned:
cd["account"] = models.Account.objects.filter(owner=cd["member"]).first()
return cd
@admin.register(models.Order)
class OrderAdmin(admin.ModelAdmin):
2024-07-15 00:19:37 +02:00
"""Admin for the Order model."""
inlines = (OrderProductInline,)
form = OrderAdminForm
list_display = ("member", "description", "created", "is_paid")
2019-09-01 00:27:36 +02:00
@admin.register(models.Payment)
class PaymentAdmin(admin.ModelAdmin):
2024-07-15 00:19:37 +02:00
"""Admin for the Payment model."""
list_display = ("order__member", "description", "order_id", "created")
2019-09-01 00:27:36 +02:00
@admin.display(description=_("Order ID"))
def order_id(self, instance: models.Payment) -> int:
2024-07-15 00:19:37 +02:00
"""Return the ID of the order."""
return instance.order.id
@admin.register(models.Product)
class ProductAdmin(admin.ModelAdmin): # noqa: D101
list_display = ("name", "price", "vat")
class TransactionInline(admin.TabularInline): # noqa: D101
model = models.Transaction
@admin.register(models.Account)
class AccountAdmin(admin.ModelAdmin): # noqa: D101
list_display = ("owner", "balance")
inlines = (TransactionInline,)