From 0cbcb4611dc88ba636103e7b04ea4e9524644a62 Mon Sep 17 00:00:00 2001 From: Flo Ha Date: Sun, 4 Sep 2022 13:38:15 +0200 Subject: [PATCH] add different commands for evaluation --- gaehsnitz/management/commands/drink_stats.py | 32 +++++++++++++ .../management/commands/total_balance.py | 32 +++++++++++++ gaehsnitz/management/commands/user_stats.py | 46 +++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 gaehsnitz/management/commands/drink_stats.py create mode 100644 gaehsnitz/management/commands/total_balance.py create mode 100644 gaehsnitz/management/commands/user_stats.py diff --git a/gaehsnitz/management/commands/drink_stats.py b/gaehsnitz/management/commands/drink_stats.py new file mode 100644 index 0000000..e88196b --- /dev/null +++ b/gaehsnitz/management/commands/drink_stats.py @@ -0,0 +1,32 @@ +from django.core.management import BaseCommand +from django.db.models import Sum + +from gaehsnitz.models import Drink + + +class Command(BaseCommand): + def handle(self, *args, **options): + for drink in Drink.objects.all(): + print(f"--- {drink.name} ---") + + print(f"Kästen (laut Abrechnung):") + ordered = drink.crates_ordered + print(f" bestellt: {ordered}") + purchased = drink.crates_purchased + print(f" gekauft: {purchased}") + full_ret = ordered - purchased + print(f" voll zurück: {full_ret}") + empty_ret = drink.crates_returned + print(f" leer zurück: {empty_ret}") + remaining = purchased - empty_ret + print(f" übrig: {remaining}") + + print("Flaschen (laut Strichliste):") + bought = drink.bottles_total + print(f" gekauft: {bought}") + consumed = drink.consumption_list.aggregate(sum=Sum("amount"))["sum"] + print(f" getrunken: {consumed}") + remaining = bought - consumed + print(f" übrig: {remaining}") + purchase_value = remaining * drink.purchase_price_per_bottle + print(f" Wert: {purchase_value:.2f} €") diff --git a/gaehsnitz/management/commands/total_balance.py b/gaehsnitz/management/commands/total_balance.py new file mode 100644 index 0000000..97a973d --- /dev/null +++ b/gaehsnitz/management/commands/total_balance.py @@ -0,0 +1,32 @@ +from django.contrib.auth import get_user_model +from django.core.management import BaseCommand +from django.db.models import Sum + +from gaehsnitz.models import Payment, Donation + +User = get_user_model() + + +class Command(BaseCommand): + def handle(self, *args, **options): + all_donations_sum = Donation.objects.all().aggregate(sum=Sum("amount"))["sum"] + print(f"Alle Spenden/Zahlungen: {all_donations_sum:.2f} €") + all_payments_sum = Payment.objects.all().aggregate(sum=Sum("amount"))["sum"] + print(f"Alle Ausgaben: {all_payments_sum:.2f} €") + balance = all_donations_sum - all_payments_sum + print("-------------------------") + print(f"Bilanz: {balance:.2f} €") + 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}: {-value:.2f} €") + awaited_sum -= value + print("-------------------------") + print(f"gesamt: {awaited_sum:.2f} €") + balance_after_payments = balance + awaited_sum + print("-------------------------") + print(f"Bilanz danach: {balance_after_payments:.2f} €") + print() diff --git a/gaehsnitz/management/commands/user_stats.py b/gaehsnitz/management/commands/user_stats.py new file mode 100644 index 0000000..8f93d62 --- /dev/null +++ b/gaehsnitz/management/commands/user_stats.py @@ -0,0 +1,46 @@ +from django.contrib.auth import get_user_model +from django.core.management import BaseCommand +from django.db.models import Sum + +from gaehsnitz.models import Drink + +User = get_user_model() + + +class Command(BaseCommand): + def handle(self, *args, **options): + id_to_name = {d.id: d.name for d in Drink.objects.all()} + for user in User.objects.all().order_by("username"): + print(f">>> {user.username.capitalize()}") + to_pay = user.consumed_drinks_price + if to_pay != 0: + paid_consumption = user.consumption_list.filter(for_free=False) + drink_list = [] + for drink_dict in paid_consumption.values("drink_id").annotate(amount=Sum("amount")): + name = id_to_name[drink_dict["drink_id"]] + amount = drink_dict["amount"] + drink_list.append(f"{amount}x {name}") + drink_list_str = ", ".join(drink_list) + print(f"zu zahlen: {to_pay:.2f} € ({drink_list_str})") + + donated = user.donations_made + if donated != 0: + don_list = [f"{don.date:%d.%m.} {don.amount:.2f} €" for don in user.donations.order_by("date")] + don_list_str = ", ".join(don_list) + print(f"gespendet: {donated:.2f} € ({don_list_str})") + + paid = user.other_payments_made + if paid != 0: + pay_list = [f"{pay.purpose} {pay.amount:.2f} €" for pay in user.payments.order_by("date")] + pay_list_str = ", ".join(pay_list) + print(f"bezahlt: {paid:.2f} € ({pay_list_str})") + + paid_back = user.paybacks_received + if paid_back != 0: + pb_list = [f"{pb.date:%d.%m.} {pb.amount:.2f} €" for pb in user.paybacks.order_by("date")] + pb_list_str = ", ".join(pb_list) + print(f"zurückbekommen: {paid_back:.2f} € ({pb_list_str})") + + balance = donated + paid - to_pay - paid_back + print(f"==> STAND: {balance:.2f} €") + print()