82 lines
3.1 KiB
Python
82 lines
3.1 KiB
Python
"""
|
|
Административная панель для уведомлений.
|
|
"""
|
|
from django.contrib import admin
|
|
from django.utils.html import format_html
|
|
from .models import Notification, NotificationPreference, NotificationTemplate, ParentChildNotificationSettings
|
|
|
|
|
|
@admin.register(Notification)
|
|
class NotificationAdmin(admin.ModelAdmin):
|
|
"""Административная панель для уведомлений."""
|
|
|
|
list_display = [
|
|
'title', 'recipient', 'notification_type', 'channel',
|
|
'status_badge', 'priority', 'created_at'
|
|
]
|
|
list_filter = [
|
|
'notification_type', 'channel', 'priority', 'is_read',
|
|
'is_sent', 'created_at'
|
|
]
|
|
search_fields = [
|
|
'title', 'message', 'recipient__email',
|
|
'recipient__first_name', 'recipient__last_name'
|
|
]
|
|
date_hierarchy = 'created_at'
|
|
readonly_fields = ['created_at', 'sent_at', 'read_at']
|
|
|
|
def status_badge(self, obj):
|
|
"""Отображение статуса."""
|
|
if obj.is_read:
|
|
return format_html(
|
|
'<span style="background-color: #6B7280; color: white; padding: 3px 10px; border-radius: 3px;">Прочитано</span>'
|
|
)
|
|
elif obj.is_sent:
|
|
return format_html(
|
|
'<span style="background-color: #10B981; color: white; padding: 3px 10px; border-radius: 3px;">Отправлено</span>'
|
|
)
|
|
else:
|
|
return format_html(
|
|
'<span style="background-color: #F59E0B; color: white; padding: 3px 10px; border-radius: 3px;">Ожидает</span>'
|
|
)
|
|
status_badge.short_description = 'Статус'
|
|
|
|
|
|
@admin.register(NotificationPreference)
|
|
class NotificationPreferenceAdmin(admin.ModelAdmin):
|
|
"""Административная панель для настроек уведомлений."""
|
|
|
|
list_display = [
|
|
'user', 'enabled', 'email_enabled', 'telegram_enabled',
|
|
'in_app_enabled', 'quiet_hours_enabled'
|
|
]
|
|
list_filter = ['enabled', 'email_enabled', 'telegram_enabled', 'quiet_hours_enabled']
|
|
search_fields = ['user__email', 'user__first_name', 'user__last_name']
|
|
|
|
|
|
@admin.register(NotificationTemplate)
|
|
class NotificationTemplateAdmin(admin.ModelAdmin):
|
|
"""Административная панель для шаблонов уведомлений."""
|
|
|
|
list_display = ['notification_type', 'is_active', 'updated_at']
|
|
list_filter = ['is_active']
|
|
search_fields = ['notification_type']
|
|
|
|
|
|
@admin.register(ParentChildNotificationSettings)
|
|
class ParentChildNotificationSettingsAdmin(admin.ModelAdmin):
|
|
"""Административная панель для настроек уведомлений родителя для детей."""
|
|
|
|
list_display = ['parent', 'child', 'enabled', 'updated_at']
|
|
list_filter = ['enabled', 'created_at']
|
|
search_fields = [
|
|
'parent__user__email',
|
|
'parent__user__first_name',
|
|
'parent__user__last_name',
|
|
'child__user__email',
|
|
'child__user__first_name',
|
|
'child__user__last_name'
|
|
]
|
|
readonly_fields = ['created_at', 'updated_at']
|
|
raw_id_fields = ['parent', 'child']
|