75 lines
2.7 KiB
Python
75 lines
2.7 KiB
Python
# backend/modules/task_management/serializers.py
|
|
|
|
from rest_framework import serializers
|
|
from .models import Task
|
|
|
|
class TaskSerializer(serializers.ModelSerializer):
|
|
assigned_to_name = serializers.SerializerMethodField()
|
|
work_order_label = serializers.SerializerMethodField()
|
|
vehicle_registration = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Task
|
|
fields = [
|
|
'id', 'title', 'description', 'status',
|
|
'assigned_to', 'assigned_to_name',
|
|
'vehicle', 'vehicle_registration',
|
|
'work_order', 'work_order_label',
|
|
'created_at',
|
|
]
|
|
read_only_fields = ['id', 'created_at']
|
|
|
|
def validate_title(self, value):
|
|
"""Primjer custom validacije: naziv ne smije biti prekratak."""
|
|
if len(value) < 3:
|
|
raise serializers.ValidationError("Naslov zadatka mora imati barem 3 znaka.")
|
|
return value
|
|
|
|
def validate(self, attrs):
|
|
current = getattr(self, 'instance', None)
|
|
status_value = attrs.get('status', getattr(current, 'status', 'aktivan'))
|
|
work_order = attrs.get('work_order', getattr(current, 'work_order', None))
|
|
vehicle = attrs.get('vehicle', getattr(current, 'vehicle', None))
|
|
|
|
if current is None and not vehicle:
|
|
raise serializers.ValidationError({
|
|
'vehicle': "Dizalica je obavezna pri kreiranju taska."
|
|
})
|
|
|
|
if work_order and not vehicle:
|
|
vehicle = work_order.vehicle
|
|
attrs['vehicle'] = vehicle
|
|
if work_order and vehicle and work_order.vehicle_id != vehicle.id:
|
|
raise serializers.ValidationError({
|
|
'work_order': "Putni nalog mora pripadati istoj dizalici kao task."
|
|
})
|
|
|
|
if status_value == 'neaktivan' and not work_order:
|
|
raise serializers.ValidationError({
|
|
'work_order': "Putni nalog je obavezan prije zatvaranja zadatka."
|
|
})
|
|
return attrs
|
|
|
|
def get_work_order_label(self, obj):
|
|
if not obj.work_order_id:
|
|
return None
|
|
return f"PN-{str(obj.work_order_id).split('-')[0].upper()}"
|
|
|
|
def get_assigned_to_name(self, obj):
|
|
if not obj.assigned_to_id:
|
|
return None
|
|
full_name = obj.assigned_to.get_full_name()
|
|
if full_name:
|
|
return full_name
|
|
email = getattr(obj.assigned_to, 'email', None)
|
|
if email:
|
|
return email
|
|
username = getattr(obj.assigned_to, 'username', None)
|
|
if username:
|
|
return username
|
|
return str(obj.assigned_to_id)
|
|
|
|
def get_vehicle_registration(self, obj):
|
|
if not obj.vehicle_id:
|
|
return None
|
|
return obj.vehicle.registration_number |