From 5106557b686c30d6117a97312c6a01d3da34e6c9 Mon Sep 17 00:00:00 2001 From: Flo Ha Date: Sun, 4 Sep 2022 13:37:54 +0200 Subject: [PATCH] add command to fill the db with data as of the end of August --- gaehsnitz/management/__init__.py | 0 gaehsnitz/management/commands/__init__.py | 0 gaehsnitz/management/commands/fill_data.py | 310 +++++++++++++++++++++ 3 files changed, 310 insertions(+) create mode 100644 gaehsnitz/management/__init__.py create mode 100644 gaehsnitz/management/commands/__init__.py create mode 100644 gaehsnitz/management/commands/fill_data.py diff --git a/gaehsnitz/management/__init__.py b/gaehsnitz/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gaehsnitz/management/commands/__init__.py b/gaehsnitz/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gaehsnitz/management/commands/fill_data.py b/gaehsnitz/management/commands/fill_data.py new file mode 100644 index 0000000..83d8c7e --- /dev/null +++ b/gaehsnitz/management/commands/fill_data.py @@ -0,0 +1,310 @@ +from datetime import date +from typing import Dict, List, Tuple + +from django.conf import settings +from django.contrib.auth import get_user_model +from django.core.management import BaseCommand, CommandError +from django.db import transaction + +from gaehsnitz.models import Drink, Consumption, Donation, Payment, Payback + +User = get_user_model() + + +def user(name: str): + obj, _ = User.objects.get_or_create(username=name) + return obj + + +def donation(user, day, month, amount, note): + return Donation.objects.create( + from_user=user, + date=date(2022, month, day), + amount=amount, + note=note, + ) + + +def payment(purpose, day, month, amount, user): + return Payment.objects.create( + from_user=user, + date=date(2022, month, day), + amount=amount, + purpose=purpose, + ) + + +def payback(user, day, month, amount, note): + return Payback.objects.create( + to_user=user, + date=date(2022, month, day), + amount=amount, + note=note, + ) + + +def consumption(day: int, for_free: bool, drink_dict: Dict[User, List[Tuple[int, Drink]]]): + for user, drink_list in drink_dict.items(): + for amount, drink in drink_list: + Consumption.objects.create( + user=user, drink=drink, amount=amount, day=day, for_free=for_free) + + +class Command(BaseCommand): + @transaction.atomic() + def handle(self, *args, **options): + if any(model.objects.exists() for model in [Donation, Payment, Drink, Consumption]): + raise CommandError( + "clear all donation, payment, drink and consumption objects before running this command") + + # --------------- PEOPLE --------------- + + aimee = user("aimee") + andrew = user("andrew") + annemarie = user("annemarie") + cathi_clemens = user("cathi_clemens") + domi = user("domi") + fiddi_melli = user("fiddi_melli") + flo = user("flo") + hans_welle = user("hans_welle") + herald = user("herald") + josi = user("josi") + kevin = user("kevin") + lasse = user("lasse") + lilly_simon = user("lilly_simon") + lutz = user("lutz") + melokomplott = user("melokomplott") + peter = user("peter") + rebecca = user("rebecca") + residudes = user("residudes") + resi_simon = user("resi_simon") + robert = user("robert") + robin = user("robin") + sandro_related = user("sandro_related") + seth_family = user("seth_family") + suse = user("suse") + thure = user("thure") + tobi = user("tobi") + + anonymous_spender = user("anonymous_spender") + anonymous_payer = user("anonymous_payer") + + # --------------- DONATIONS --------------- + + # via paypal + donation(herald, 22, 4, 50, "PayPal") + donation(josi, 29, 4, 30, "PayPal") + donation(robert, 9, 5, 15, "PayPal") + donation(domi, 21, 8, 30, "PayPal") + donation(cathi_clemens, 24, 8, 70, "PayPal") + donation(robert, 24, 8, 50, "PayPal") + donation(lilly_simon, 26, 8, 60, "PayPal") + + # via bank + donation(aimee, 28, 6, 50, "Überweisung") + donation(suse, 26, 8, 60, "Überweisung") + + # on the list + donation(annemarie, 26, 8, 25, "Kasse") + donation(peter, 26, 8, 25, "Kasse") + donation(fiddi_melli, 27, 8, 40, "Kasse") + donation(resi_simon, 27, 8, 20, "Kasse") + donation(sandro_related, 27, 8, 40, "Kasse") + donation(seth_family, 27, 8, 30, "Kasse") + + # unknown donations + money_in_register = 194.50 + direct_band_payments = 110 + donation_sum_on_the_list = 180 + remaining = money_in_register + direct_band_payments - donation_sum_on_the_list + donation(anonymous_spender, 28, 8, remaining, "übrig in Kasse") + + # hinterher + donation(seth_family, 30, 8, 30, "persönlich") + donation(lutz, 30, 8, 80, "PayPal") + donation(kevin, 8, 9, 15, "Paypal") + donation(robert, 9, 9, 33, "Paypal") + donation(kevin, 9, 9, 35, "Paypal") + + # --------------- PAYMENTS --------------- + + payment("Baumarkt/Elektrik", 16, 7, 70, flo) + payment("Baumarkt/Elektrik", 18, 7, 27, flo) + payment("Dixis", 8, 8, 328, josi) + payment("Getränke/Anzahlung", 22, 8, 400, fiddi_melli) + payment("Supermarkt/Essen", 25, 8, 193, herald) + payment("Band/Direct Juice", 27, 8, 50, anonymous_payer) + payment("Band/Melokomplott", 27, 8, 60, anonymous_payer) + payment("Getränke/Abrechnung", 1, 9, 122, fiddi_melli) + + # --------------- PAYBACKS --------------- + + # directly from the register + payback(flo, 28, 8, money_in_register, "Kasse") + + # --------------- DRINKS --------------- + + sterni = Drink.objects.create( + name="Sterni", + crates_ordered=30, + crates_purchased=15, + crates_returned=10, + purchase_price_per_crate=8.49, + deposit_per_crate=3.10, + bottles_per_crate=20, + bottle_size=0.5, + sale_price_per_bottle=1.50, + ) + krosti = Drink.objects.create( + name="Krosti", + crates_ordered=20, + crates_purchased=9, + crates_returned=5, + purchase_price_per_crate=13.49, + deposit_per_crate=3.10, + bottles_per_crate=20, + bottle_size=0.5, + sale_price_per_bottle=2.00, + ) + radler = Drink.objects.create( + name="Radler", + crates_ordered=8, + crates_purchased=5, + crates_returned=3, + purchase_price_per_crate=16.49, + deposit_per_crate=3.10, + bottles_per_crate=20, + bottle_size=0.5, + sale_price_per_bottle=2.00, + ) + wasser = Drink.objects.create( + name="Wasser", + crates_ordered=15, + crates_purchased=6, + crates_returned=4, + purchase_price_per_crate=5.99, + deposit_per_crate=3.30, + bottles_per_crate=12, + bottle_size=1.0, + sale_price_per_bottle=1.00, + ) + mate = Drink.objects.create( + name="Mate", + crates_ordered=5, + crates_purchased=3, + crates_returned=2, + purchase_price_per_crate=13.99, + deposit_per_crate=4.50, + bottles_per_crate=20, + bottle_size=0.5, + sale_price_per_bottle=2.00, + ) + cola = Drink.objects.create( + name="Vita Cola / Pepsi", + crates_ordered=4, + crates_purchased=3, + crates_returned=2, + purchase_price_per_crate=10.24, # equally 9.49 and 10.99 + deposit_per_crate=3.30, + bottles_per_crate=12, + bottle_size=1.0, + sale_price_per_bottle=2.00, + ) + wein = Drink.objects.create( + name="Wein (Glas)", + crates_ordered=0, + crates_purchased=6, + crates_returned=0, + purchase_price_per_crate=0, + deposit_per_crate=0, + bottles_per_crate=3, + bottle_size=0.25, + sale_price_per_bottle=1.50, + ) + + # --------------- THURSDAY --------------- + + consumption(day=1, for_free=False, drink_dict={ + robert: [(2, mate), (2, radler), (1, wasser)], + thure: [(4, sterni), (1, krosti), (2, radler)], + tobi: [(7, sterni), (2, krosti)], + herald: [(1, radler), (2, wasser), (4, wein)], + annemarie: [(1, sterni), (1, wasser), (2, wein)], + cathi_clemens: [(1, sterni), (2, radler)], + flo: [(6, sterni), (1, wasser)], + josi: [(4, sterni)], + aimee: [(5, sterni)], + lutz: [(1, sterni), (1, wasser)], + lasse: [(2, sterni), (1, wasser)], + domi: [(1, sterni), (1, radler)], + }) + consumption(day=1, for_free=True, drink_dict={ + seth_family: [(1, krosti), (1, radler)], + }) + + # --------------- FRIDAY --------------- + + consumption(day=2, for_free=False, drink_dict={ + robert: [(2, mate), (1, radler)], + thure: [(8, sterni), (2, krosti), (1, wasser)], + tobi: [(2, mate), (5, sterni), (5, krosti), (3, radler), (1, cola)], + herald: [(1, mate), (1, sterni), (2, radler), (1, cola), (4, wasser), (7, wein)], + annemarie: [(2, mate), (9, sterni), (1, krosti), (2, radler), (3, wasser)], + cathi_clemens: [(3, sterni), (3, radler)], + flo: [(1, mate), (6, sterni), (3, wasser)], + josi: [(8, sterni), (1, krosti), (2, radler)], + andrew: [(4, sterni)], + peter: [(7, sterni), (1, krosti), (2, wasser)], + fiddi_melli: [(6, sterni), (3, radler), (1, wasser)], + suse: [(1, krosti), (1, radler)], + lilly_simon: [(1, mate), (7, sterni), (3, wasser)] + }) + + consumption(day=2, for_free=True, drink_dict={ + seth_family: [(1, mate), (6, sterni), (3, wasser)], + aimee: [(1, mate), (9, sterni), (3, wasser)], + lutz: [(1, mate), (9, sterni), (3, wasser)], + lasse: [(7, sterni), (1, wasser)], + domi: [(1, mate), (4, sterni), (1, wasser)], + hans_welle: [(3, mate), (7, sterni), (7, krosti), (1, cola), (2, wasser)], + }) + + # --------------- SATURDAY --------------- + + consumption(day=3, for_free=False, drink_dict={ + robert: [(4, mate), (1, cola), (4, wasser)], + tobi: [(9, sterni), (1, krosti), (2, radler), (1, cola)], + herald: [(2, mate), (2, radler), (3, wasser), (5, wein)], + annemarie: [(2, mate), (6, sterni), (3, radler), (1, cola), (1, wasser)], + cathi_clemens: [(4, sterni), (8, radler), (1, wasser)], + flo: [(2, mate), (8, sterni), (1, radler), (3, wasser)], + josi: [(9, sterni), (2, radler), (2, wasser)], + aimee: [(10, sterni), (2, radler)], + lutz: [(1, krosti), (1, wasser)], + lasse: [(1, mate), (8, sterni)], + domi: [(6, sterni), (2, radler), (1, wasser)], + peter: [(3, sterni), (3, krosti), (2, radler)], + fiddi_melli: [(1, mate), (1, wasser)], + suse: [(1, mate), (1, sterni), (2, krosti), (4, radler)], + lilly_simon: [(1, mate), (2, radler), (7, wasser)], + kevin: [(1, mate), (1, radler)], + rebecca: [(1, radler)], + resi_simon: [(8, sterni), (1, radler), (1, wasser)], + }) + + consumption(day=3, for_free=True, drink_dict={ + thure: [(1, mate), (4, sterni), (5, radler), (3, wasser)], + seth_family: [(1, mate), (2, sterni), (12, krosti), (1, wasser)], + andrew: [(3, sterni), (2, krosti), (3, radler), (1, wasser)], + robin: [(1, mate), (4, krosti), (2, radler)], + melokomplott: [(5, mate), (13, sterni), (1, krosti), (1, radler)], + residudes: [(2, mate), (1, sterni), (15, krosti), (7, radler), (1, wasser)], + }) + + # --------------- ADMIN STUFF --------------- + + if not settings.PRODUCTION: + flo.set_password("123") + flo.is_staff = True + flo.is_superuser = True + flo.save()