Time tracking you can host anywhere, built on Django. Full export support in multiple formats and easily extensible.
djangodockerhandcodedpythonself-hostedtime-trackingtimetracker
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."))