Files
004.erp.generic/backend/modules/task_management/serializers.py
mariomitte 5d39e048ba
Some checks failed
ERP CI Pipeline / test (push) Has been cancelled
prvi kod za live uporabu
2026-07-09 21:21:17 +02:00

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