150 lines
4.8 KiB
Python
150 lines
4.8 KiB
Python
"""
|
|
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
|