add command to fill the db with data as of the end of August
This commit is contained in:
0
gaehsnitz/management/__init__.py
Normal file
0
gaehsnitz/management/__init__.py
Normal file
0
gaehsnitz/management/commands/__init__.py
Normal file
0
gaehsnitz/management/commands/__init__.py
Normal file
310
gaehsnitz/management/commands/fill_data.py
Normal file
310
gaehsnitz/management/commands/fill_data.py
Normal file
@@ -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()
|
||||||
Reference in New Issue
Block a user