feat: dodaj display_code polje za putne naloge (MT070626 format)
- Dodano polje 'display_code' na WorkOrder model (format: 2 inicijala + ddmmyy) - Migracije za kreiranje polja i backfill postojećih naloga - Ažuriran WorkOrderSerializer za validaciju i serijalizaciju display_code - Backend tasks za auto-generiranje display_code pri kreiranju - Frontend komponente ažurirane za prikaz display_code umjesto UUID: * FleetDashboardShell tablica putnih naloga * WorkOrderDetailModal * TaskCreateModal * Sve PDF stranice - displayIds.js utility za formatiranjeDisplay ID-eva - Admin interface prikazuje display_code
This commit is contained in:
@@ -3,7 +3,9 @@ from django.test import TestCase
|
||||
from django.contrib.auth import get_user_model
|
||||
from modules.fleet.services import VehicleService
|
||||
from modules.fleet.models import Vehicle, WorkOrder, VehicleServiceRecord
|
||||
from modules.fleet.serializers import WorkOrderSerializer
|
||||
from modules.task_management.models import Task
|
||||
from rest_framework.test import APIRequestFactory
|
||||
|
||||
|
||||
class FleetServiceTests(TestCase):
|
||||
@@ -72,4 +74,58 @@ class FleetServiceTests(TestCase):
|
||||
|
||||
VehicleService.update_work_order(work_order, {"status": "closed"})
|
||||
task.refresh_from_db()
|
||||
self.assertEqual(task.status, "spreman_za_zavrsetak")
|
||||
self.assertEqual(task.status, "spreman_za_zavrsetak")
|
||||
|
||||
def test_closing_work_order_moves_active_task_to_ready_for_completion(self):
|
||||
work_order = WorkOrder.objects.create(
|
||||
vehicle=self.vehicle,
|
||||
creator=self.user,
|
||||
purpose="kontrola",
|
||||
status="open",
|
||||
start_mileage=5000,
|
||||
end_mileage=5200,
|
||||
)
|
||||
task = Task.objects.create(
|
||||
title="Preventiva",
|
||||
description="",
|
||||
status="aktivan",
|
||||
assigned_to=self.user,
|
||||
vehicle=self.vehicle,
|
||||
work_order=work_order,
|
||||
)
|
||||
|
||||
VehicleService.update_work_order(work_order, {"status": "closed"})
|
||||
task.refresh_from_db()
|
||||
self.assertEqual(task.status, "spreman_za_zavrsetak")
|
||||
|
||||
def test_work_order_serializer_autogenerates_display_code(self):
|
||||
self.user.first_name = "Mario"
|
||||
self.user.last_name = "Tkalac"
|
||||
self.user.save(update_fields=["first_name", "last_name"])
|
||||
|
||||
request = APIRequestFactory().post('/api/fleet/work-orders/', {})
|
||||
request.user = self.user
|
||||
serializer = WorkOrderSerializer(
|
||||
data={
|
||||
"vehicle": str(self.vehicle.id),
|
||||
"purpose": "kontrola",
|
||||
},
|
||||
context={"request": request},
|
||||
)
|
||||
self.assertTrue(serializer.is_valid(), serializer.errors)
|
||||
work_order = serializer.save()
|
||||
self.assertRegex(work_order.display_code, r'^MT[0-9]{6}$')
|
||||
|
||||
def test_work_order_serializer_rejects_invalid_display_code(self):
|
||||
request = APIRequestFactory().post('/api/fleet/work-orders/', {})
|
||||
request.user = self.user
|
||||
serializer = WorkOrderSerializer(
|
||||
data={
|
||||
"vehicle": str(self.vehicle.id),
|
||||
"purpose": "kontrola",
|
||||
"display_code": "BAD-CODE",
|
||||
},
|
||||
context={"request": request},
|
||||
)
|
||||
self.assertFalse(serializer.is_valid())
|
||||
self.assertIn("display_code", serializer.errors)
|
||||
Reference in New Issue
Block a user