From 2baf9e46e74ce5f0f3d40c9d5b051176fcfa4cf2 Mon Sep 17 00:00:00 2001 From: Salim Elliye Date: Thu, 28 Aug 2025 00:21:52 +0300 Subject: [PATCH] new --- osinaweb/osinacore/api/serializers.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/osinaweb/osinacore/api/serializers.py b/osinaweb/osinacore/api/serializers.py index b0093d24..0030a55e 100644 --- a/osinaweb/osinacore/api/serializers.py +++ b/osinaweb/osinacore/api/serializers.py @@ -190,6 +190,7 @@ class TaskSerializer(serializers.ModelSerializer): class DailyReportSerializer(serializers.ModelSerializer): staff = StaffProfileSerializer(read_only=True) date = serializers.SerializerMethodField() + total_time = serializers.SerializerMethodField() class Meta: @@ -201,5 +202,25 @@ class DailyReportSerializer(serializers.ModelSerializer): try: # Combine the date and time strings into one datetime object return datetime.strptime(f"{obj.date} {obj.time}", "%Y-%m-%d %I:%M %p") + except Exception: + return None + + + def get_total_time(self, obj): + try: + # Parse report.date string into date object + report_date = datetime.strptime(obj.date, "%Y-%m-%d").date() + + total_time = PointActivity.objects.filter( + point__task__assigned_to=obj.staff, + start_time__date=report_date + ).aggregate(Sum('total_time'))['total_time__sum'] or timedelta() + + # Convert to H:M:S string + total_seconds = int(total_time.total_seconds()) + hours = total_seconds // 3600 + minutes = (total_seconds % 3600) // 60 + seconds = total_seconds % 60 + return f"{hours:02d}:{minutes:02d}:{seconds:02d}" except Exception: return None \ No newline at end of file