fix: sync multi-day work hours accounting
Aggregate task work-hour rows into travel-cost calculations and monthly servicer reporting, and keep the frontend calendar aligned with the task work-hours source.
This commit is contained in:
@@ -91,6 +91,7 @@ class TaskSerializer(serializers.ModelSerializer):
|
||||
vehicle_owner_name = serializers.SerializerMethodField()
|
||||
vehicle_asset_type = serializers.SerializerMethodField()
|
||||
crane_serial_number = serializers.SerializerMethodField()
|
||||
work_hours_table = serializers.SerializerMethodField()
|
||||
template_id = serializers.UUIDField(write_only=True, required=False, allow_null=True)
|
||||
auto_close_work_order = serializers.BooleanField(write_only=True, required=False)
|
||||
|
||||
@@ -100,7 +101,7 @@ class TaskSerializer(serializers.ModelSerializer):
|
||||
'id', 'title', 'description', 'status',
|
||||
'assigned_to', 'assigned_to_name',
|
||||
'vehicle', 'vehicle_registration', 'vehicle_make', 'vehicle_model',
|
||||
'vehicle_owner_name', 'vehicle_asset_type', 'crane_serial_number',
|
||||
'vehicle_owner_name', 'vehicle_asset_type', 'crane_serial_number', 'work_hours_table',
|
||||
'work_order', 'work_order_label',
|
||||
'scheduled_date',
|
||||
'service_report_note',
|
||||
@@ -212,3 +213,9 @@ class TaskSerializer(serializers.ModelSerializer):
|
||||
if not obj.vehicle_id:
|
||||
return None
|
||||
return obj.vehicle.crane_serial_number or None
|
||||
|
||||
def get_work_hours_table(self, obj):
|
||||
table = getattr(obj, 'work_hours_table', None)
|
||||
if not table:
|
||||
return None
|
||||
return TaskWorkHoursTableSerializer(table).data
|
||||
|
||||
@@ -2,7 +2,7 @@ from django.test import TestCase
|
||||
from modules.task_management.serializers import TaskSerializer
|
||||
from rest_framework.exceptions import ValidationError
|
||||
from django.contrib.auth import get_user_model
|
||||
from modules.task_management.models import Task
|
||||
from modules.task_management.models import Task, TaskWorkHoursTable
|
||||
from modules.fleet.models import Vehicle, WorkOrder
|
||||
from modules.crm.models import Client
|
||||
|
||||
@@ -86,6 +86,22 @@ class TaskSerializerTests(TestCase):
|
||||
assert serializer.data['vehicle_owner_name'] == 'Klijent zadatka'
|
||||
assert serializer.data['vehicle_asset_type'] == 'crane'
|
||||
|
||||
def test_work_hours_table_is_included_in_serialized_output(self):
|
||||
task = Task.objects.create(title="Task work hours", assigned_to=self.user, vehicle=self.vehicle)
|
||||
TaskWorkHoursTable.objects.create(
|
||||
task=task,
|
||||
data={
|
||||
'rows': [
|
||||
{'date': '12.07.2026', 'work_hours': '8', 'travel_hours': '2'},
|
||||
]
|
||||
},
|
||||
)
|
||||
|
||||
serializer = TaskSerializer(instance=task)
|
||||
assert serializer.data['work_hours_table']['data']['rows'][0]['date'] == '12.07.2026'
|
||||
assert serializer.data['work_hours_table']['data']['rows'][0]['work_hours'] == '8'
|
||||
assert serializer.data['work_hours_table']['data']['rows'][0]['travel_hours'] == '2'
|
||||
|
||||
def test_scheduled_date_accepts_valid_date(self):
|
||||
serializer = TaskSerializer(
|
||||
data={"title": "Task mit datum", "status": "aktivan",
|
||||
|
||||
Reference in New Issue
Block a user