Refactor the calculated_sum and manual_sum
This commit is contained in:
parent
9c56ed4ce8
commit
5172c38c16
|
@ -6,7 +6,7 @@ RUN npm install && \
|
||||||
|
|
||||||
FROM python:3.10-slim-bullseye
|
FROM python:3.10-slim-bullseye
|
||||||
|
|
||||||
ENV VERSION_NUMBER 0.1.0-43-gd00bb1c
|
ENV VERSION_NUMBER 0.1.0-44-g9c56ed4
|
||||||
ENV PROD 1
|
ENV PROD 1
|
||||||
|
|
||||||
RUN useradd --create-home --uid 1000 timetracker
|
RUN useradd --create-home --uid 1000 timetracker
|
||||||
|
|
|
@ -3,6 +3,7 @@ from datetime import datetime, timedelta
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from zoneinfo import ZoneInfo
|
from zoneinfo import ZoneInfo
|
||||||
from common.util.time import format_duration
|
from common.util.time import format_duration
|
||||||
|
from django.db.models import Sum
|
||||||
|
|
||||||
|
|
||||||
class Game(models.Model):
|
class Game(models.Model):
|
||||||
|
@ -46,7 +47,7 @@ class Session(models.Model):
|
||||||
def finish_now(self):
|
def finish_now(self):
|
||||||
self.timestamp_end = datetime.now(ZoneInfo(settings.TIME_ZONE))
|
self.timestamp_end = datetime.now(ZoneInfo(settings.TIME_ZONE))
|
||||||
|
|
||||||
def duration_seconds(self):
|
def duration_seconds(self) -> timedelta:
|
||||||
if self.duration_manual == None:
|
if self.duration_manual == None:
|
||||||
if self.timestamp_end == None or self.timestamp_start == None:
|
if self.timestamp_end == None or self.timestamp_start == None:
|
||||||
return timedelta(0)
|
return timedelta(0)
|
||||||
|
@ -54,11 +55,10 @@ class Session(models.Model):
|
||||||
value = self.timestamp_end - self.timestamp_start
|
value = self.timestamp_end - self.timestamp_start
|
||||||
else:
|
else:
|
||||||
value = self.duration_manual
|
value = self.duration_manual
|
||||||
return value.total_seconds()
|
return timedelta(seconds=value.total_seconds())
|
||||||
|
|
||||||
def duration_formatted(self) -> str:
|
def duration_formatted(self) -> str:
|
||||||
dur = self.duration_seconds()
|
result = format_duration(self.duration_seconds(), "%H:%m")
|
||||||
result = format_duration(dur, "%H:%m")
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def duration_any(self):
|
def duration_any(self):
|
||||||
|
@ -68,6 +68,32 @@ class Session(models.Model):
|
||||||
else self.duration_manual
|
else self.duration_manual
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def calculated_sum() -> timedelta:
|
||||||
|
calculated_sum_query = Session.objects.all().aggregate(
|
||||||
|
Sum("duration_calculated")
|
||||||
|
)
|
||||||
|
calculated_sum = (
|
||||||
|
timedelta(0)
|
||||||
|
if calculated_sum_query["duration_calculated__sum"] == None
|
||||||
|
else calculated_sum_query["duration_calculated__sum"]
|
||||||
|
)
|
||||||
|
return calculated_sum
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def manual_sum() -> timedelta:
|
||||||
|
manual_sum_query = Session.objects.all().aggregate(Sum("duration_manual"))
|
||||||
|
manual_sum = (
|
||||||
|
timedelta(0)
|
||||||
|
if manual_sum_query["duration_manual__sum"] == None
|
||||||
|
else manual_sum_query["duration_manual__sum"]
|
||||||
|
)
|
||||||
|
return manual_sum
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def total_sum() -> timedelta:
|
||||||
|
return Session.manual_sum() + Session.calculated_sum()
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
if self.timestamp_start != None and self.timestamp_end != None:
|
if self.timestamp_start != None and self.timestamp_end != None:
|
||||||
self.duration_calculated = self.timestamp_end - self.timestamp_start
|
self.duration_calculated = self.timestamp_end - self.timestamp_start
|
||||||
|
|
|
@ -2,11 +2,12 @@ from django.shortcuts import render, redirect
|
||||||
|
|
||||||
from .models import Game, Platform, Purchase, Session
|
from .models import Game, Platform, Purchase, Session
|
||||||
from .forms import SessionForm, PurchaseForm, GameForm, PlatformForm
|
from .forms import SessionForm, PurchaseForm, GameForm, PlatformForm
|
||||||
from datetime import datetime
|
from datetime import datetime, timedelta
|
||||||
from zoneinfo import ZoneInfo
|
from zoneinfo import ZoneInfo
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from common.util.time import now as now_with_tz, format_duration
|
from common.util.time import now as now_with_tz, format_duration
|
||||||
from django.db.models import Sum
|
from django.db.models import Sum
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
def model_counts(request):
|
def model_counts(request):
|
||||||
|
@ -107,10 +108,9 @@ def index(request):
|
||||||
if Session.objects.count() == 0:
|
if Session.objects.count() == 0:
|
||||||
duration: str = ""
|
duration: str = ""
|
||||||
else:
|
else:
|
||||||
result = Session.objects.all().aggregate(Sum("duration_calculated"))
|
context["total_duration"] = format_duration(
|
||||||
duration = format_duration(
|
Session.total_sum(),
|
||||||
result["duration_calculated__sum"], "%H hours %m minutes"
|
"%H hours %m minutes",
|
||||||
)
|
)
|
||||||
context["total_duration"] = duration
|
|
||||||
context["title"] = "Index"
|
context["title"] = "Index"
|
||||||
return render(request, "index.html", context)
|
return render(request, "index.html", context)
|
||||||
|
|
Loading…
Reference in New Issue