Files
004.erp.generic/backend/core/users/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

73 lines
2.6 KiB
Python

from rest_framework import serializers
from django.core.exceptions import ObjectDoesNotExist
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_asset(self, obj):
try:
return obj.assigned_vehicles
except ObjectDoesNotExist:
return None
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):
return self._serialize_asset(self._get_assigned_asset(obj))
def get_assigned_crane(self, obj):
return self._serialize_asset(self._get_assigned_asset(obj))
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