64c792b11f
In some places we used to refer to permissions based on their codename only (the part after the dot "." in the following examples) which can be ambiguous. Typically, we might define permissions like "bds.is_team" or "cof.is_team" in the near future ;)
159 lines
4.8 KiB
Python
159 lines
4.8 KiB
Python
"""
|
|
Crée des utilisateurs, des articles et des opérations aléatoires
|
|
"""
|
|
|
|
import os
|
|
import random
|
|
from datetime import timedelta
|
|
|
|
from django.contrib.auth.models import Group, Permission, User
|
|
from django.core.management import call_command
|
|
from django.utils import timezone
|
|
|
|
from gestioncof.management.base import MyBaseCommand
|
|
from gestioncof.models import CofProfile
|
|
from kfet.models import (
|
|
Account,
|
|
Article,
|
|
Checkout,
|
|
CheckoutStatement,
|
|
Supplier,
|
|
SupplierArticle,
|
|
)
|
|
|
|
# Où sont stockés les fichiers json
|
|
DATA_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data")
|
|
|
|
|
|
class Command(MyBaseCommand):
|
|
help = "Crée des utilisateurs, des articles et des opérations aléatoires"
|
|
|
|
def handle(self, *args, **options):
|
|
# ---
|
|
# Groupes
|
|
# ---
|
|
|
|
Group.objects.filter(name__icontains="K-Fêt").delete()
|
|
|
|
group_chef = Group(name="K-Fêt César")
|
|
group_boy = Group(name="K-Fêt Légionnaire")
|
|
|
|
group_chef.save()
|
|
group_boy.save()
|
|
|
|
permissions_chef = Permission.objects.filter(content_type__app_label="kfet",)
|
|
permissions_boy = Permission.objects.filter(
|
|
content_type__app_label="kfet", codename__in=["is_team", "perform_deposit"]
|
|
)
|
|
|
|
group_chef.permissions.add(*permissions_chef)
|
|
group_boy.permissions.add(*permissions_boy)
|
|
|
|
# ---
|
|
# Comptes
|
|
# ---
|
|
|
|
self.stdout.write("Création des comptes K-Fêt")
|
|
|
|
gaulois = CofProfile.objects.filter(user__last_name="Gaulois")
|
|
gaulois_trigramme = map("{:03d}".format, range(50))
|
|
|
|
romains = CofProfile.objects.filter(user__last_name="Romain")
|
|
romains_trigramme = map(lambda x: str(100 + x), range(99))
|
|
|
|
created_accounts = 0
|
|
team_accounts = 0
|
|
|
|
for (profile, trigramme) in zip(gaulois, gaulois_trigramme):
|
|
account, created = Account.objects.get_or_create(
|
|
trigramme=trigramme,
|
|
cofprofile=profile,
|
|
defaults={"balance": random.randint(1, 999) / 10},
|
|
)
|
|
created_accounts += int(created)
|
|
|
|
if profile.user.first_name == "Abraracourcix":
|
|
profile.user.groups.add(group_chef)
|
|
|
|
for (profile, trigramme) in zip(romains, romains_trigramme):
|
|
account, created = Account.objects.get_or_create(
|
|
trigramme=trigramme,
|
|
cofprofile=profile,
|
|
defaults={"balance": random.randint(1, 999) / 10},
|
|
)
|
|
created_accounts += int(created)
|
|
|
|
if random.random() > 0.75 and created:
|
|
profile.user.groups.add(group_boy)
|
|
team_accounts += 1
|
|
|
|
self.stdout.write(
|
|
"- {:d} comptes créés, {:d} dans l'équipe K-Fêt".format(
|
|
created_accounts, team_accounts
|
|
)
|
|
)
|
|
|
|
# Compte liquide
|
|
|
|
self.stdout.write("Création du compte liquide")
|
|
liq_user, _ = User.objects.get_or_create(username="liquide")
|
|
liq_profile, _ = CofProfile.objects.get_or_create(user=liq_user)
|
|
liq_account, _ = Account.objects.get_or_create(
|
|
cofprofile=liq_profile, trigramme="LIQ"
|
|
)
|
|
|
|
# Root account if existing
|
|
|
|
root_profile = CofProfile.objects.filter(user__username="root")
|
|
if root_profile.exists():
|
|
self.stdout.write("Création du compte K-Fêt root")
|
|
root_profile = root_profile.get()
|
|
Account.objects.get_or_create(cofprofile=root_profile, trigramme="AAA")
|
|
|
|
# ---
|
|
# Caisse
|
|
# ---
|
|
|
|
checkout, created = Checkout.objects.get_or_create(
|
|
created_by=Account.objects.get(trigramme="000"),
|
|
name="Chaudron",
|
|
defaults={
|
|
"valid_from": timezone.now(),
|
|
"valid_to": timezone.now() + timedelta(days=730),
|
|
},
|
|
)
|
|
|
|
if created:
|
|
CheckoutStatement.objects.create(
|
|
by=Account.objects.get(trigramme="000"),
|
|
checkout=checkout,
|
|
balance_old=0,
|
|
balance_new=0,
|
|
amount_taken=0,
|
|
amount_error=0,
|
|
)
|
|
|
|
# ---
|
|
# Fournisseur
|
|
# ---
|
|
|
|
supplier, created = Supplier.objects.get_or_create(name="Panoramix")
|
|
if created:
|
|
articles = random.sample(list(Article.objects.all()), 40)
|
|
to_create = []
|
|
for article in articles:
|
|
to_create.append(SupplierArticle(supplier=supplier, article=article))
|
|
|
|
SupplierArticle.objects.bulk_create(to_create)
|
|
|
|
# ---
|
|
# Opérations
|
|
# ---
|
|
|
|
call_command("createopes", "100", "7", "--transfers=20")
|
|
|
|
# ---
|
|
# Wagtail CMS
|
|
# ---
|
|
|
|
call_command("kfet_loadwagtail")
|