add different commands for evaluation
This commit is contained in:
32
gaehsnitz/management/commands/drink_stats.py
Normal file
32
gaehsnitz/management/commands/drink_stats.py
Normal file
@@ -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} €")
|
||||||
32
gaehsnitz/management/commands/total_balance.py
Normal file
32
gaehsnitz/management/commands/total_balance.py
Normal file
@@ -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()
|
||||||
46
gaehsnitz/management/commands/user_stats.py
Normal file
46
gaehsnitz/management/commands/user_stats.py
Normal file
@@ -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()
|
||||||
Reference in New Issue
Block a user