handle model changes in management commands
This commit is contained in:
@@ -3,35 +3,20 @@ from django.contrib.auth import get_user_model
|
|||||||
from django.contrib.auth.admin import UserAdmin
|
from django.contrib.auth.admin import UserAdmin
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
|
|
||||||
from gaehsnitz.models import Donation, Payment, Drink, Consumption, Payback
|
from gaehsnitz.models import Donation, Payment, Drink, Consumption
|
||||||
from gaehsnitz.templatetags.money import euro
|
from gaehsnitz.templatetags.money import euro
|
||||||
|
|
||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
class DonationInline(admin.TabularInline):
|
|
||||||
model = Donation
|
|
||||||
extra = 0
|
|
||||||
|
|
||||||
|
|
||||||
class ConsumptionInline(admin.TabularInline):
|
class ConsumptionInline(admin.TabularInline):
|
||||||
model = Consumption
|
model = Consumption
|
||||||
extra = 0
|
extra = 0
|
||||||
|
|
||||||
|
|
||||||
class PaymentInline(admin.TabularInline):
|
|
||||||
model = Payment
|
|
||||||
extra = 0
|
|
||||||
|
|
||||||
|
|
||||||
class PaybackInline(admin.TabularInline):
|
|
||||||
model = Payback
|
|
||||||
extra = 0
|
|
||||||
|
|
||||||
|
|
||||||
@admin.register(User)
|
@admin.register(User)
|
||||||
class CustomUserAdmin(UserAdmin):
|
class CustomUserAdmin(UserAdmin):
|
||||||
list_display = ("username", "balance")
|
list_display = ("username", "consumed_drinks_price")
|
||||||
ordering = ("username",)
|
ordering = ("username",)
|
||||||
list_filter = []
|
list_filter = []
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
@@ -40,54 +25,21 @@ class CustomUserAdmin(UserAdmin):
|
|||||||
"password",
|
"password",
|
||||||
)}),
|
)}),
|
||||||
("BALANCE", {"fields": (
|
("BALANCE", {"fields": (
|
||||||
"donations_made",
|
|
||||||
"consumed_drinks_price",
|
"consumed_drinks_price",
|
||||||
"other_payments_made",
|
|
||||||
"paybacks_received",
|
|
||||||
"balance",
|
|
||||||
)}),
|
)}),
|
||||||
)
|
)
|
||||||
readonly_fields = (
|
readonly_fields = (
|
||||||
"donations_made",
|
|
||||||
"consumed_drinks_price",
|
"consumed_drinks_price",
|
||||||
"other_payments_made",
|
|
||||||
"paybacks_received",
|
|
||||||
"balance",
|
|
||||||
)
|
)
|
||||||
inlines = (DonationInline, ConsumptionInline, PaymentInline, PaybackInline)
|
inlines = (ConsumptionInline,)
|
||||||
|
|
||||||
def donations_made(self, user: User):
|
|
||||||
return euro(user.donations_made)
|
|
||||||
|
|
||||||
def consumed_drinks_price(self, user: User):
|
def consumed_drinks_price(self, user: User):
|
||||||
return euro(user.consumed_drinks_price)
|
return euro(user.consumed_drinks_price)
|
||||||
|
|
||||||
def other_payments_made(self, user: User):
|
|
||||||
return euro(user.other_payments_made)
|
|
||||||
|
|
||||||
def paybacks_received(self, user: User):
|
|
||||||
return euro(user.paybacks_received)
|
|
||||||
|
|
||||||
def balance(self, user: User):
|
|
||||||
val = user.balance
|
|
||||||
if val < 0:
|
|
||||||
color = "#FF8844"
|
|
||||||
elif val < 20:
|
|
||||||
color = "#EEEE33"
|
|
||||||
elif val < 40:
|
|
||||||
color = "#66FF33"
|
|
||||||
else:
|
|
||||||
color = "#5599FF"
|
|
||||||
return mark_safe(
|
|
||||||
f'<span style="color: {color};"><b>'
|
|
||||||
f'{euro(val)}'
|
|
||||||
f'</b></span>'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Donation)
|
@admin.register(Donation)
|
||||||
class DonationAdmin(admin.ModelAdmin):
|
class DonationAdmin(admin.ModelAdmin):
|
||||||
list_display = ("date", "from_user", "amount", "note")
|
list_display = ("date", "amount", "note")
|
||||||
ordering = ("-date",)
|
ordering = ("-date",)
|
||||||
|
|
||||||
@admin.display(ordering="amount")
|
@admin.display(ordering="amount")
|
||||||
@@ -97,7 +49,7 @@ class DonationAdmin(admin.ModelAdmin):
|
|||||||
|
|
||||||
@admin.register(Payment)
|
@admin.register(Payment)
|
||||||
class PaymentAdmin(admin.ModelAdmin):
|
class PaymentAdmin(admin.ModelAdmin):
|
||||||
list_display = ("date", "purpose", "amount", "from_user")
|
list_display = ("date", "purpose", "amount")
|
||||||
ordering = ("-date",)
|
ordering = ("-date",)
|
||||||
|
|
||||||
@admin.display(ordering="amount")
|
@admin.display(ordering="amount")
|
||||||
@@ -105,16 +57,6 @@ class PaymentAdmin(admin.ModelAdmin):
|
|||||||
return euro(payment.amount)
|
return euro(payment.amount)
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Payback)
|
|
||||||
class PaybackAdmin(admin.ModelAdmin):
|
|
||||||
list_display = ("date", "to_user", "amount", "note")
|
|
||||||
ordering = ("-date",)
|
|
||||||
|
|
||||||
@admin.display(ordering="amount")
|
|
||||||
def amount(self, payback: Payback):
|
|
||||||
return euro(payback.amount)
|
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Drink)
|
@admin.register(Drink)
|
||||||
class DrinkAdmin(admin.ModelAdmin):
|
class DrinkAdmin(admin.ModelAdmin):
|
||||||
list_display = ("name", "purchase_price_per_crate", "crates_purchased", "purchase_price_total")
|
list_display = ("name", "purchase_price_per_crate", "crates_purchased", "purchase_price_total")
|
||||||
|
|||||||
@@ -17,17 +17,3 @@ class Command(BaseCommand):
|
|||||||
balance = all_donations_sum - all_payments_sum
|
balance = all_donations_sum - all_payments_sum
|
||||||
print("-------------------------")
|
print("-------------------------")
|
||||||
print(f"Bilanz: {euro(balance)}")
|
print(f"Bilanz: {euro(balance)}")
|
||||||
print()
|
|
||||||
|
|
||||||
print("Leute mit Schulden:")
|
|
||||||
awaited_sum = 0
|
|
||||||
for user in User.objects.all().order_by("username"):
|
|
||||||
if (value := user.balance) < 0:
|
|
||||||
print(f"{user}: {euro(-value)}")
|
|
||||||
awaited_sum -= value
|
|
||||||
print("-------------------------")
|
|
||||||
print(f"gesamt: {euro(awaited_sum)}")
|
|
||||||
balance_after_payments = balance + awaited_sum
|
|
||||||
print("-------------------------")
|
|
||||||
print(f"Bilanz danach: {euro(balance_after_payments)}")
|
|
||||||
print()
|
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ class Command(BaseCommand):
|
|||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
id_to_name = {d.id: d.name for d in Drink.objects.all()}
|
id_to_name = {d.id: d.name for d in Drink.objects.all()}
|
||||||
for user in User.objects.all().order_by("username"):
|
for user in User.objects.all().order_by("username"):
|
||||||
print(f">>> {user.username.capitalize()}")
|
|
||||||
to_pay = user.consumed_drinks_price
|
to_pay = user.consumed_drinks_price
|
||||||
if to_pay != 0:
|
if to_pay != 0:
|
||||||
paid_consumption = user.consumption_list.filter(for_free=False)
|
paid_consumption = user.consumption_list.filter(for_free=False)
|
||||||
@@ -21,27 +20,4 @@ class Command(BaseCommand):
|
|||||||
name = id_to_name[drink_dict["drink_id"]]
|
name = id_to_name[drink_dict["drink_id"]]
|
||||||
amount = drink_dict["amount"]
|
amount = drink_dict["amount"]
|
||||||
drink_list.append(f"{amount}x {name}")
|
drink_list.append(f"{amount}x {name}")
|
||||||
drink_list_str = ", ".join(drink_list)
|
print(f"{user.username.capitalize()}: {euro(to_pay)} ({", ".join(drink_list)})")
|
||||||
print(f"zu zahlen: {euro(to_pay)} ({drink_list_str})")
|
|
||||||
|
|
||||||
donated = user.donations_made
|
|
||||||
if donated != 0:
|
|
||||||
don_list = [f"{don.date:%d.%m.} {euro(don.amount)}" for don in user.donations.order_by("date")]
|
|
||||||
don_list_str = ", ".join(don_list)
|
|
||||||
print(f"gespendet: {euro(donated)} ({don_list_str})")
|
|
||||||
|
|
||||||
paid = user.other_payments_made
|
|
||||||
if paid != 0:
|
|
||||||
pay_list = [f"{pay.purpose} {euro(pay.amount)}" for pay in user.payments.order_by("date")]
|
|
||||||
pay_list_str = ", ".join(pay_list)
|
|
||||||
print(f"bezahlt: {euro(paid)} ({pay_list_str})")
|
|
||||||
|
|
||||||
paid_back = user.paybacks_received
|
|
||||||
if paid_back != 0:
|
|
||||||
pb_list = [f"{pb.date:%d.%m.} {euro(pb.amount)}" for pb in user.paybacks.order_by("date")]
|
|
||||||
pb_list_str = ", ".join(pb_list)
|
|
||||||
print(f"zurückbekommen: {euro(paid_back)} ({pb_list_str})")
|
|
||||||
|
|
||||||
balance = donated + paid - to_pay - paid_back
|
|
||||||
print(f"==> STAND: {euro(balance)}")
|
|
||||||
print()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user