fixed duration conversion

This commit is contained in:
Louis Heredero 2025-02-12 13:53:17 +01:00
parent b24cb55ba8
commit 58a8ae750a
Signed by: HEL
GPG Key ID: 8D83DE470F8544E7
2 changed files with 14 additions and 27 deletions

View File

@ -1,4 +1,5 @@
import datetime
from datetime import timedelta
from dispatcher.models import Task, Project
@ -9,6 +10,12 @@ def convert_timedelta(td: datetime.timedelta):
minutes, seconds = divmod(remainder, 60)
return f"{int(hours):02d}:{int(minutes):02d}:{int(seconds):02d}"
def str_to_timedelta(duration: str):
parts = duration.split(":")
hours = int(parts[0])
minutes = int(parts[1])
return timedelta(hours=hours, minutes=minutes)
def import_tasks(csv_content: str):
tasks = []

View File

@ -10,7 +10,7 @@ from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
from rest_framework.status import HTTP_400_BAD_REQUEST
from dispatcher.core import import_tasks, convert_timedelta
from dispatcher.core import import_tasks, convert_timedelta, str_to_timedelta
from dispatcher.forms import ProjectForm, ImportForm, ParentForm
from dispatcher.models import Project, Parent, Clocking, Task, RealSageXHours
from dispatcher.serializers import ClockingSerializer, RealSageXHoursSerializer
@ -175,31 +175,6 @@ def get_stats_by_month(request, year: int, month: int):
)
return JsonResponse({"status": "success", "data": format_stats(parents, projects, clockings)})
def get_stats_between(request, start_date: datetime.date, end_date: datetime.date):
parents = Parent.objects.annotate(
total_duration=Sum(
"project__task__duration",
filter=Q(
project__task__date__gte=start_date,
project__task__date__lt=end_date + timedelta(days=1)
)
)
)
projects = Project.objects.annotate(
total_duration=Sum(
"task__duration",
filter=Q(
task__date__gte=start_date,
task__date__lt=end_date + timedelta(days=1)
)
)
)
clockings = Clocking.objects.filter(
date__gte=start_date,
date__lt=end_date + timedelta(days=1)
)
return JsonResponse({"status": "success", "data": format_stats(parents, projects, clockings)})
def format_stats(parents: QuerySet[Parent], projects: QuerySet[Project], clockings: QuerySet[Clocking]):
data = {
"parents": [
@ -290,7 +265,12 @@ def set_clocking(request, date: datetime.date):
clocking.out_am = request.POST.get("out_am", clocking.out_am) or None
clocking.in_pm = request.POST.get("in_pm", clocking.in_pm) or None
clocking.out_pm = request.POST.get("out_pm", clocking.out_pm) or None
clocking.remote = request.POST.get("remote", clocking.remote) or None
remote = request.POST.get("remote", clocking.remote) or None
if remote is not None:
remote = str_to_timedelta(remote)
else:
remote = timedelta()
clocking.remote = remote
clocking.save()
clocking.refresh_from_db()