This commit is contained in:
75
backend/modules/task_management/serializers.py
Normal file
75
backend/modules/task_management/serializers.py
Normal file
@@ -0,0 +1,75 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user