""" Django admin configuration for notifications app. """ from django.contrib import admin from django.utils.translation import gettext_lazy as _ from .models import ( MessageTemplate, Message, NotificationPreference, MessageLog, ) @admin.register(MessageTemplate) class MessageTemplateAdmin(admin.ModelAdmin): """Admin interface for MessageTemplate model.""" list_display = ['code', 'name', 'channel', 'is_active', 'tenant'] list_filter = ['channel', 'is_active', 'tenant'] search_fields = ['code', 'name', 'body_en', 'body_ar'] readonly_fields = ['id', 'created_at', 'updated_at'] fieldsets = ( (None, { 'fields': ('code', 'name', 'channel', 'tenant', 'is_active') }), (_('Email Subject'), { 'fields': ('subject',), 'classes': ('collapse',) }), (_('Content (English)'), { 'fields': ('body_en',) }), (_('Content (Arabic)'), { 'fields': ('body_ar',), 'classes': ('collapse',) }), (_('Variables'), { 'fields': ('variables',), 'classes': ('collapse',) }), (_('Metadata'), { 'fields': ('id', 'created_at', 'updated_at'), 'classes': ('collapse',) }), ) @admin.register(Message) class MessageAdmin(admin.ModelAdmin): """Admin interface for Message model.""" list_display = ['recipient', 'channel', 'status', 'sent_at', 'delivered_at', 'tenant'] list_filter = ['channel', 'status', 'tenant', 'sent_at', 'delivered_at'] search_fields = ['recipient', 'subject', 'body', 'provider_message_id'] readonly_fields = ['id', 'is_successful', 'can_retry', 'created_at', 'updated_at'] date_hierarchy = 'created_at' fieldsets = ( (None, { 'fields': ('template', 'channel', 'tenant', 'status') }), (_('Recipient & Content'), { 'fields': ('recipient', 'subject', 'body') }), (_('Variables'), { 'fields': ('variables_used',), 'classes': ('collapse',) }), (_('Delivery Status'), { 'fields': ('sent_at', 'delivered_at', 'is_successful', 'can_retry', 'retry_count') }), (_('Provider Information'), { 'fields': ('provider_message_id', 'provider_response'), 'classes': ('collapse',) }), (_('Error Information'), { 'fields': ('error_message',), 'classes': ('collapse',) }), (_('Metadata'), { 'fields': ('id', 'created_at', 'updated_at'), 'classes': ('collapse',) }), ) @admin.register(NotificationPreference) class NotificationPreferenceAdmin(admin.ModelAdmin): """Admin interface for NotificationPreference model.""" list_display = ['patient', 'preferred_channel', 'preferred_language', 'sms_enabled', 'whatsapp_enabled', 'email_enabled'] list_filter = ['preferred_channel', 'preferred_language', 'sms_enabled', 'whatsapp_enabled', 'email_enabled'] search_fields = ['patient__mrn', 'patient__first_name_en', 'patient__last_name_en'] readonly_fields = ['id', 'created_at', 'updated_at'] fieldsets = ( (None, { 'fields': ('patient', 'preferred_channel', 'preferred_language') }), (_('Channel Preferences'), { 'fields': ('sms_enabled', 'whatsapp_enabled', 'email_enabled') }), (_('Notification Type Preferences'), { 'fields': ('appointment_reminders', 'appointment_confirmations', 'results_notifications', 'billing_notifications', 'marketing_communications') }), (_('Metadata'), { 'fields': ('id', 'created_at', 'updated_at'), 'classes': ('collapse',) }), ) @admin.register(MessageLog) class MessageLogAdmin(admin.ModelAdmin): """Admin interface for MessageLog model.""" list_display = ['message', 'event_type', 'created_at'] list_filter = ['event_type', 'created_at'] search_fields = ['message__recipient', 'message__provider_message_id'] readonly_fields = ['id', 'created_at', 'updated_at'] date_hierarchy = 'created_at' fieldsets = ( (None, { 'fields': ('message', 'event_type') }), (_('Details'), { 'fields': ('details',), 'classes': ('collapse',) }), (_('Metadata'), { 'fields': ('id', 'created_at', 'updated_at'), 'classes': ('collapse',) }), ) def has_add_permission(self, request): """Message logs should not be manually created.""" return False def has_change_permission(self, request, obj=None): """Message logs should not be modified.""" return False