from rest_framework import serializers from .models import CustomUser class UserSerializer(serializers.ModelSerializer): assigned_vehicle = serializers.SerializerMethodField() assigned_crane = serializers.SerializerMethodField() class Meta: model = CustomUser fields = ['id', 'email', 'first_name', 'last_name', 'is_serviser', 'is_kupac', 'is_team_member', 'telefon', 'oib', 'occupation', 'residence', 'work_position', 'client_profile', 'assigned_vehicle', 'assigned_crane'] read_only_fields = ['id', 'email'] extra_kwargs = { 'first_name': {'required': True, 'allow_blank': False} } def _get_assigned_assets(self, obj): return obj.assigned_vehicles.all() def _serialize_asset(self, vehicle): if not vehicle: return None return { 'id': vehicle.id, 'asset_type': vehicle.asset_type, 'registration_number': vehicle.registration_number, 'make': vehicle.make, 'model': vehicle.model, 'current_mileage': vehicle.current_mileage, 'service_interval_km': vehicle.service_interval_km, } def get_assigned_vehicle(self, obj): assigned = self._get_assigned_assets(obj) vehicle = assigned.filter(asset_type='vehicle').first() or assigned.first() return self._serialize_asset(vehicle) def get_assigned_crane(self, obj): assigned = self._get_assigned_assets(obj) crane = assigned.filter(asset_type='crane').first() or assigned.first() return self._serialize_asset(crane) def validate(self, data): """ Provodi poslovnu logiku na razini serializer-a. """ is_kupac = data.get('is_kupac') client_profile = data.get('client_profile') # Logika: Ako je kupac, mora imati profil if is_kupac and not client_profile: raise serializers.ValidationError({ "client_profile": "Korisnik označen kao kupac mora imati dodijeljen klijentski profil." }) # Logika: Ako ima profil, trebao bi biti kupac (opcionalno, ali preporučeno) if client_profile and not is_kupac: raise serializers.ValidationError({ "is_kupac": "Korisnik s dodijeljenim klijentskim profilom mora biti označen kao kupac." }) return data class TeamMemberSerializer(serializers.ModelSerializer): full_name = serializers.SerializerMethodField() class Meta: model = CustomUser fields = ['id', 'email', 'full_name', 'is_team_member'] read_only_fields = fields def get_full_name(self, obj): return obj.get_full_name() or obj.email