repos
/ timestrap-django master

timestrap-django

mirror archived upstream

Time tracking you can host anywhere, built on Django. Full export support in multiple formats and easily extensible.

djangodockerhandcodedpythonself-hostedtime-trackingtimetracker

3.0 KB · 91 lines · Python Raw History
 1from random import randint, choice
 2from datetime import datetime, timedelta
 3from decimal import Decimal
 4
 5from django.core.management.base import BaseCommand
 6from django.contrib.auth.models import User
 7
 8from faker import Factory
 9
10from core.models import Client, Entry, Project, Task
11
12
13class Command(BaseCommand):
14    help = "Generates a bunch of fake clients, projects, and entries"
15
16    def add_arguments(self, parser):
17        parser.add_argument(
18            "--iterations",
19            dest="iterations",
20            default=5,
21            help="The amount of data we add do the database",
22        )
23
24    def handle(self, *args, **kwargs):
25        fake = Factory.create()
26        verbosity = kwargs["verbosity"]
27        iterations = kwargs["iterations"]
28
29        for _ in range(iterations):
30            task_name = (
31                fake.sentence(nb_words=3, variable_nb_words=True)
32                .replace(".", "")
33                .title()
34            )
35            Task.objects.create(
36                name=task_name,
37                hourly_rate=Decimal("%d.%d" % (randint(1, 200), randint(1, 99))),
38            )
39
40        for _ in range(iterations):
41            Client.objects.create(name=fake.company())
42
43        for client in Client.objects.iterator():
44            for i in range(randint(1, iterations)):
45                estimated = choice([True, False])
46                estimate = None
47                if estimated:
48                    estimate = randint(1000, 20000)
49                project_name = (
50                    fake.sentence(nb_words=3, variable_nb_words=True)
51                    .replace(".", "")
52                    .title()
53                )
54                Project.objects.create(
55                    client=client, estimate=estimate, name=project_name
56                )
57
58        for _ in range(iterations):
59            fake_user = fake.simple_profile(sex=None)
60            username = fake_user["username"]
61            email = fake_user["mail"]
62            password = fake.password(
63                length=10,
64                special_chars=True,
65                digits=True,
66                upper_case=True,
67                lower_case=True,
68            )
69            User.objects.create_user(username, email, password)
70
71        users = User.objects.all()
72        projects = Project.objects.all()
73        tasks = Task.objects.all()
74
75        for user in users:
76            for day in range(iterations):
77                date = (datetime.now() - timedelta(days=day)).date()
78                for _ in range(randint(1, iterations)):
79                    duration = timedelta(minutes=randint(1, 180))
80                    Entry.objects.create(
81                        project=choice(projects),
82                        task=choice(tasks),
83                        user=user,
84                        date=date,
85                        duration=duration,
86                        note=fake.sentence(nb_words=6, variable_nb_words=True),
87                    )
88
89        if verbosity > 0:
90            self.stdout.write(self.style.SUCCESS("Successfully added fake data."))