Time tracking you can host anywhere, built on Django. Full export support in multiple formats and easily extensible.
djangodockerhandcodedpythonself-hostedtime-trackingtimetracker
1from django.utils.duration import _get_duration_components
2
3from datetime import timedelta
4
5from decimal import Decimal
6
7
8def parse_duration(duration):
9 hours = None
10 minutes = None
11
12 if duration.isdigit():
13 hours = int(duration)
14 elif ":" in duration:
15 duration_split = duration.split(":")
16 hours = int(duration_split[0])
17 minutes = int(duration_split[1])
18 elif "." in duration:
19 if duration.index(".") == 0:
20 duration = "0" + duration
21 duration_split = duration.split(".")
22 # TODO: Fix error here when not appending a 0, ex .5 instead of 0.5
23 hours = int(duration_split[0])
24 minutes = int(60 * float("." + duration_split[1]))
25
26 if minutes is None:
27 minutes = 0
28
29 if hours or minutes:
30 return timedelta(hours=hours, minutes=minutes)
31 else:
32 return None
33
34
35def duration_string(duration):
36 if duration is not None:
37 days, hours, minutes, seconds, microseconds = _get_duration_components(
38 duration
39 ) # noqa: E501
40 hours += days * 24
41
42 string = "{}:{:02d}".format(hours, minutes)
43 else:
44 string = "0:00"
45 return string
46
47
48def duration_decimal(duration):
49 if duration is not None:
50 days, hours, minutes, seconds, microseconds = _get_duration_components(
51 duration
52 ) # noqa: E501
53 hours += days * 24
54
55 decimal = Decimal(hours) + Decimal(minutes / 60)
56 else:
57 decimal = Decimal(0)
58 return decimal