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

1.5 KB · 59 lines · Python Raw History
 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