From 1e68c663f2e680b21bc36ff523cf38b2c3388bf4 Mon Sep 17 00:00:00 2001 From: mariomitte Date: Mon, 31 Aug 2026 08:32:41 +0200 Subject: [PATCH] fix: scope inferred work-order tasks to the current work order Prevent service-record inference from pulling tasks from other work orders that share the same vehicle. This keeps task-service-context, service reports, and related work-order widgets isolated to the selected nalog. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../tests/test_work_order_images_endpoint.py | 33 ++++++++++++++++++- backend/modules/fleet/views.py | 1 + 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/backend/modules/fleet/tests/test_work_order_images_endpoint.py b/backend/modules/fleet/tests/test_work_order_images_endpoint.py index 8f311db..37e00e5 100644 --- a/backend/modules/fleet/tests/test_work_order_images_endpoint.py +++ b/backend/modules/fleet/tests/test_work_order_images_endpoint.py @@ -26,7 +26,11 @@ from modules.fleet.models import ( ) from modules.task_management.models import Task, TaskWorkHoursTable from modules.fleet.tasks import build_monthly_archive_cached_task -from modules.fleet.views import _build_monthly_servicer_report_rows, _calculate_daily_quantity_from_hours +from modules.fleet.views import ( + _build_monthly_servicer_report_rows, + _calculate_daily_quantity_from_hours, + _work_order_related_tasks_queryset, +) def create_test_image(filename='test.jpg', size=(40, 40), color='red'): @@ -236,6 +240,33 @@ class WorkOrderImagesEndpointTests(TestCase): self.assertIn('additional_costs_table', payload) self.assertEqual(payload['additional_costs_table']['total_for_payout'], '5.00') + def test_work_order_related_tasks_queryset_excludes_other_work_orders_for_same_vehicle(self): + other_work_order = WorkOrder.objects.create( + vehicle=self.vehicle, + creator=self.user, + display_code='MT160726', + purpose='kontrola', + ) + other_task = Task.objects.create( + title='Drugi nalog isti stroj', + assigned_to=self.user, + vehicle=self.vehicle, + work_order=other_work_order, + scheduled_date=date(2033, 12, 25), + ) + VehicleServiceRecord.objects.create( + vehicle=self.vehicle, + task=other_task, + performed_by=self.user, + description='Ne smije se pojaviti u prvom nalogu.', + service_title='Krivi nalog', + ) + + resolved_ids = list(_work_order_related_tasks_queryset(self.work_order).values_list('id', flat=True)) + + self.assertIn(self.task.pk, resolved_ids) + self.assertNotIn(other_task.pk, resolved_ids) + def test_invoice_upload_immediately_appears_in_additional_costs_table(self): create_response = self.client.post( reverse('work-order-invoice-list'), diff --git a/backend/modules/fleet/views.py b/backend/modules/fleet/views.py index b8c6f06..aa782d6 100644 --- a/backend/modules/fleet/views.py +++ b/backend/modules/fleet/views.py @@ -155,6 +155,7 @@ def _work_order_related_tasks_queryset(work_order): vehicle_id=work_order.vehicle_id, task_id__isnull=False, task__is_active=True, + task__work_order=work_order, ).values_list('task_id', flat=True) ) task_ids = list({*direct_task_ids, *inferred_task_ids})