""" PX Sources serializers """ from rest_framework import serializers from .models import PXSource, SourceUser class PXSourceSerializer(serializers.ModelSerializer): """Serializer for PXSource model""" class Meta: model = PXSource fields = [ 'id', 'name_en', 'name_ar', 'description', 'is_active', 'created_at', 'updated_at' ] read_only_fields = ['id', 'created_at', 'updated_at'] class PXSourceListSerializer(serializers.ModelSerializer): """Simplified serializer for list views""" class Meta: model = PXSource fields = [ 'id', 'name_en', 'name_ar', 'is_active' ] class PXSourceDetailSerializer(PXSourceSerializer): """Detailed serializer including usage statistics""" usage_count = serializers.SerializerMethodField() class Meta(PXSourceSerializer.Meta): fields = PXSourceSerializer.Meta.fields + ['usage_count'] def get_usage_count(self, obj): """Get total usage count for this source""" return obj.usage_records.count() class SourceUserSerializer(serializers.ModelSerializer): """Serializer for SourceUser model""" user_email = serializers.EmailField(source='user.email', read_only=True) user_full_name = serializers.CharField(source='user.get_full_name', read_only=True) source_name = serializers.CharField(source='source.name_en', read_only=True) source_name_ar = serializers.CharField(source='source.name_ar', read_only=True) class Meta: model = SourceUser fields = [ 'id', 'user', 'user_email', 'user_full_name', 'source', 'source_name', 'source_name_ar', 'is_active', 'can_create_complaints', 'can_create_inquiries', 'created_at', 'updated_at' ] read_only_fields = ['id', 'created_at', 'updated_at'] class SourceUserListSerializer(serializers.ModelSerializer): """Simplified serializer for source user list views""" user_email = serializers.EmailField(source='user.email', read_only=True) user_full_name = serializers.CharField(source='user.get_full_name', read_only=True) source_name = serializers.CharField(source='source.name_en', read_only=True) class Meta: model = SourceUser fields = [ 'id', 'user_email', 'user_full_name', 'source_name', 'is_active', 'can_create_complaints', 'can_create_inquiries' ] class SourceUsageSerializer(serializers.ModelSerializer): """Serializer for SourceUsage model""" source_name = serializers.CharField(source='source.name_en', read_only=True) content_type_name = serializers.CharField(source='content_type.model', read_only=True) class Meta: model = PXSource fields = [ 'id', 'source', 'source_name', 'content_type', 'content_type_name', 'object_id', 'hospital', 'user', 'created_at' ] read_only_fields = ['id', 'created_at'] class PXSourceChoiceSerializer(serializers.Serializer): """Simple serializer for dropdown choices""" id = serializers.UUIDField() name = serializers.SerializerMethodField() def get_name(self, obj): """Get localized name based on request language""" request = self.context.get('request') if request: language = getattr(request, 'LANGUAGE_CODE', 'en') return obj.get_localized_name(language) return obj.name_en