""" 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') romains_trigramme = map(lambda x: str(100+x), range(50)) for (profile, trigramme) in zip(gaulois, gaulois_trigramme): account, _ = Account.objects.get_or_create( trigramme=trigramme, cofprofile=profile ) 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, cofprofile=profile ) 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) account = Account.objects.get_or_create(cofprofile=liq_profile, trigramme='LIQ') # --- # Opérations # --- articles = Article.objects.all() accounts = Account.objects.all() checkout = Checkout.objects.all()[0] num_op = 100 past_date = 3600*24*5 for i in range(num_op): account = random.choice(accounts) 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)): # For now, all operations are purchases, w/o addcost 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 ) ope.save() amount += ope.amount opegroup.amount = amount opegroup.save()