diff --git a/dispatcher/core.py b/dispatcher/core.py index 90c74b1..3be015b 100644 --- a/dispatcher/core.py +++ b/dispatcher/core.py @@ -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 = [] diff --git a/dispatcher/views.py b/dispatcher/views.py index 4290a06..5b35d65 100644 --- a/dispatcher/views.py +++ b/dispatcher/views.py @@ -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()