HH/apps/px_sources/serializers.py
2026-01-15 14:31:58 +03:00

114 lines
3.6 KiB
Python

"""
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