|
|
|
@ -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
|