fixed duration conversion
This commit is contained in:
parent
b24cb55ba8
commit
58a8ae750a
@ -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 = []
|
||||
|
@ -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()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user