gestioCOF/kfet/management/commands/loadkfetdevdata.py

145 lines
4.6 KiB
Python
Raw Normal View History

2017-02-08 02:22:31 +01:00
"""
Crée des utilisateurs, des articles et des opérations aléatoires
"""
import os
import random
from datetime import timedelta
from django.utils import timezone
from django.contrib.auth.models import User, Group, Permission, ContentType
from gestioncof.management.base import MyBaseCommand
from gestioncof.models import CofProfile
from kfet.models import Account, Article, OperationGroup, Operation, Transfer, \
Checkout
# 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__in=ContentType.objects.filter(
app_label='kfet'))
permissions_boy = Permission.objects.filter(
codename__in=['is_team', 'perform_deposit'])
group_chef.permissions.add(*permissions_chef)
group_boy.permissions.add(*permissions_boy)
# ---
# Comptes
# ---
gaulois = CofProfile.objects.filter(user__last_name='Gaulois')
gaulois_trigramme = map('{:03d}'.format, range(50))
romains = CofProfile.objects.filter(user__last_name='Romain')
2017-02-08 18:11:38 +01:00
romains_trigramme = map(lambda x: str(100+x), range(99))
2017-02-08 02:22:31 +01:00
for (profile, trigramme) in zip(gaulois, gaulois_trigramme):
account, _ = Account.objects.get_or_create(
trigramme=trigramme,
2017-02-08 18:11:38 +01:00
cofprofile=profile,
defaults={'balance': random.randint(1, 999)/10}
2017-02-08 02:22:31 +01:00
)
if profile.user.first_name == 'Abraracourcix':
profile.user.groups.add(group_chef)
for (profile, trigramme) in zip(romains, romains_trigramme):
account, _ = Account.objects.get_or_create(
trigramme=trigramme,
2017-02-08 18:11:38 +01:00
cofprofile=profile,
defaults={'balance': random.randint(1, 999)/10}
2017-02-08 02:22:31 +01:00
)
if random.random() > 0.75:
profile.user.groups.add(group_boy)
# Compte liquide
liq_user, _ = User.objects.get_or_create(username='liquide')
liq_profile, _ = CofProfile.objects.get_or_create(user=liq_user)
2017-02-08 18:11:38 +01:00
liq_account = Account.objects.get_or_create(cofprofile=liq_profile,
trigramme='LIQ')
2017-02-08 02:22:31 +01:00
# ---
# Opérations
# ---
articles = Article.objects.all()
2017-02-08 18:11:38 +01:00
accounts = Account.objects.exclude(trigramme='LIQ')
2017-02-08 02:22:31 +01:00
checkout = Checkout.objects.all()[0]
num_op = 100
2017-02-08 18:11:38 +01:00
# Operations are put uniformly over the span of a week
past_date = 3600*24*7
2017-02-08 02:22:31 +01:00
for i in range(num_op):
2017-02-08 18:11:38 +01:00
if random.random() > 0.25:
account = random.choice(accounts)
else:
account = liq_account
2017-02-08 02:22:31 +01:00
amount = 0
at = timezone.now() - timedelta(
seconds=random.randint(0, past_date))
opegroup = OperationGroup(
on_acc=account,
checkout=checkout,
at=at,
is_cof=account.cofprofile.is_cof)
opegroup.save()
for j in range(random.randint(1, 4)):
2017-02-08 18:11:38 +01:00
typevar = random.random()
if typevar > 0.9 and account != liq_account:
ope = Operation(
group=opegroup,
type=Operation.DEPOSIT,
amount=random.randint(1, 99)/10,
)
elif typevar > 0.8 and account != liq_account:
ope = Operation(
group=opegroup,
type=Operation.WITHDRAW,
amount=random.randint(1, 99)/10,
)
else:
article = random.choice(articles)
nb = random.randint(1, 5)
ope = Operation(
group=opegroup,
type=Operation.PURCHASE,
amount=-article.price*nb,
article=article,
article_nb=nb
)
2017-02-08 02:22:31 +01:00
ope.save()
amount += ope.amount
opegroup.amount = amount
opegroup.save()