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
|
2017-02-08 18:38:27 +01:00
|
|
|
from decimal import Decimal
|
2017-02-08 02:22:31 +01:00
|
|
|
|
|
|
|
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
|
2017-03-18 23:01:51 +01:00
|
|
|
from kfet.models import (Account, Article, OperationGroup, Operation,
|
|
|
|
Checkout, CheckoutStatement)
|
2017-02-08 02:22:31 +01:00
|
|
|
|
|
|
|
# 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
|
|
|
|
# ---
|
|
|
|
|
2017-02-08 18:54:49 +01:00
|
|
|
self.stdout.write("Création des comptes K-Fêt")
|
|
|
|
|
2017-02-08 02:22:31 +01:00
|
|
|
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
|
|
|
|
2017-02-08 18:54:49 +01:00
|
|
|
created_accounts = 0
|
|
|
|
team_accounts = 0
|
|
|
|
|
2017-02-08 02:22:31 +01:00
|
|
|
for (profile, trigramme) in zip(gaulois, gaulois_trigramme):
|
2017-02-08 18:54:49 +01:00
|
|
|
account, created = Account.objects.get_or_create(
|
2017-02-08 02:22:31 +01:00
|
|
|
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
|
|
|
)
|
2017-02-08 18:54:49 +01:00
|
|
|
created_accounts += int(created)
|
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):
|
2017-02-08 18:54:49 +01:00
|
|
|
account, created = Account.objects.get_or_create(
|
2017-02-08 02:22:31 +01:00
|
|
|
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
|
|
|
)
|
2017-02-08 18:54:49 +01:00
|
|
|
created_accounts += int(created)
|
2017-02-08 02:22:31 +01:00
|
|
|
|
2017-02-08 18:54:49 +01:00
|
|
|
if random.random() > 0.75 and created:
|
2017-02-08 02:22:31 +01:00
|
|
|
profile.user.groups.add(group_boy)
|
2017-02-08 18:54:49 +01:00
|
|
|
team_accounts += 1
|
|
|
|
|
|
|
|
self.stdout.write("- {:d} comptes créés, {:d} dans l'équipe K-Fêt"
|
|
|
|
.format(created_accounts, team_accounts))
|
2017-02-08 02:22:31 +01:00
|
|
|
|
|
|
|
# Compte liquide
|
|
|
|
|
2017-03-18 23:02:08 +01:00
|
|
|
self.stdout.write("Création du compte liquide")
|
2017-02-08 02:22:31 +01:00
|
|
|
liq_user, _ = User.objects.get_or_create(username='liquide')
|
|
|
|
liq_profile, _ = CofProfile.objects.get_or_create(user=liq_user)
|
2017-02-08 18:32:05 +01:00
|
|
|
liq_account, _ = Account.objects.get_or_create(cofprofile=liq_profile,
|
|
|
|
trigramme='LIQ')
|
2017-02-08 02:22:31 +01:00
|
|
|
|
2017-03-18 22:02:33 +01:00
|
|
|
# Root account if existing
|
|
|
|
|
|
|
|
root_profile = CofProfile.objects.filter(user__username='root')
|
|
|
|
if root_profile.exists():
|
2017-03-18 23:02:08 +01:00
|
|
|
self.stdout.write("Création du compte K-Fêt root")
|
2017-03-18 22:02:33 +01:00
|
|
|
root_profile = root_profile.get()
|
|
|
|
Account.objects.get_or_create(cofprofile=root_profile,
|
|
|
|
trigramme='AAA')
|
|
|
|
|
2017-02-08 18:26:56 +01:00
|
|
|
# ---
|
|
|
|
# Caisse
|
|
|
|
# ---
|
|
|
|
|
2017-03-18 22:02:23 +01:00
|
|
|
checkout, created = Checkout.objects.get_or_create(
|
2017-02-08 18:29:40 +01:00
|
|
|
created_by=Account.objects.get(trigramme='000'),
|
2017-02-08 18:26:56 +01:00
|
|
|
name='Chaudron',
|
2017-03-18 22:02:23 +01:00
|
|
|
defaults={
|
|
|
|
'valid_from': timezone.now(),
|
|
|
|
'valid_to': timezone.now() + timedelta(days=730)
|
|
|
|
},
|
2017-02-08 18:26:56 +01:00
|
|
|
)
|
|
|
|
|
2017-03-18 22:02:23 +01:00
|
|
|
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
|
|
|
|
)
|
|
|
|
|
2017-02-08 02:22:31 +01:00
|
|
|
# ---
|
|
|
|
# Opérations
|
|
|
|
# ---
|
|
|
|
|
2017-02-08 18:54:49 +01:00
|
|
|
self.stdout.write("Génération d'opérations")
|
|
|
|
|
2017-02-08 02:22:31 +01:00
|
|
|
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
|
|
|
|
|
|
|
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 18:38:27 +01:00
|
|
|
amount = Decimal('0')
|
2017-02-08 02:22:31 +01:00
|
|
|
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,
|
2017-02-08 18:38:27 +01:00
|
|
|
amount=Decimal(random.randint(1, 99)/10,)
|
2017-02-08 18:11:38 +01:00
|
|
|
)
|
|
|
|
elif typevar > 0.8 and account != liq_account:
|
|
|
|
ope = Operation(
|
|
|
|
group=opegroup,
|
|
|
|
type=Operation.WITHDRAW,
|
2017-02-08 18:38:59 +01:00
|
|
|
amount=-Decimal(random.randint(1, 99)/10,)
|
2017-02-08 18:11:38 +01:00
|
|
|
)
|
|
|
|
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()
|