# 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