Time tracking you can host anywhere, built on Django. Full export support in multiple formats and easily extensible.
djangodockerhandcodedpythonself-hostedtime-trackingtimetracker
1from django.conf import settings
2from django.db import migrations, models
3import django.db.models.deletion
4
5
6class Migration(migrations.Migration):
7 initial = True
8
9 dependencies = [
10 ("sites", "0002_alter_domain_unique"),
11 migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12 ]
13
14 operations = [
15 migrations.CreateModel(
16 name="Conf",
17 fields=[
18 (
19 "id",
20 models.AutoField(
21 auto_created=True,
22 primary_key=True,
23 serialize=False,
24 verbose_name="ID",
25 ),
26 ),
27 (
28 "smtp_from_address",
29 models.EmailField(
30 blank=True,
31 default="webmaster@localhost",
32 max_length=254,
33 verbose_name='"From" Email Address',
34 ),
35 ),
36 (
37 "smtp_host",
38 models.CharField(
39 blank=True,
40 default="localhost",
41 max_length=255,
42 verbose_name="SMTP Host",
43 ),
44 ),
45 (
46 "smtp_user",
47 models.CharField(
48 blank=True,
49 default="",
50 max_length=255,
51 verbose_name="SMTP Username",
52 ),
53 ),
54 (
55 "smtp_password",
56 models.CharField(
57 blank=True,
58 default="",
59 help_text="This password is stored in plaintext. Use with caution!",
60 max_length=255,
61 verbose_name="SMTP Password",
62 ),
63 ),
64 (
65 "smtp_port",
66 models.PositiveIntegerField(
67 blank=True, default=25, verbose_name="SMTP Port"
68 ),
69 ),
70 (
71 "smtp_tls",
72 models.BooleanField(default=False, verbose_name="Use TLS"),
73 ),
74 (
75 "site",
76 models.OneToOneField(
77 on_delete=django.db.models.deletion.CASCADE,
78 related_name="conf",
79 to="sites.Site",
80 ),
81 ),
82 ],
83 options={
84 "verbose_name": "Configuration",
85 "verbose_name_plural": "Configuration",
86 },
87 ),
88 migrations.CreateModel(
89 name="SitePermission",
90 fields=[
91 (
92 "id",
93 models.AutoField(
94 auto_created=True,
95 primary_key=True,
96 serialize=False,
97 verbose_name="ID",
98 ),
99 ),
100 ("sites", models.ManyToManyField(blank=True, to="sites.Site")),
101 (
102 "user",
103 models.OneToOneField(
104 on_delete=django.db.models.deletion.CASCADE,
105 to=settings.AUTH_USER_MODEL,
106 ),
107 ),
108 ],
109 options={
110 "verbose_name": "Site permission",
111 "verbose_name_plural": "Site permissions",
112 },
113 ),
114 ]