Files
guilan-ace-backend/apps/communications/admin.py
Amirhossein Khalili 3ec28638d1 feat: replace email flows with in-app notifications
Add recipient notification detail and filtering, a queued admin composer, and contextual automatic titles. Retire email delivery, obsolete auth routes, newsletter data, and related templates and settings.
2026-09-26 12:23:10 +03:30

73 lines
2.4 KiB
Python

from django import forms
from django.contrib import admin
from django.utils import timezone
from simplemde.widgets import SimpleMDEEditor
from import_export.admin import ImportExportModelAdmin
from core.admin import SoftDeleteListFilter, BaseModelAdmin
from apps.communications.models import Announcement, PushNotificationDevice
class AnnouncementAdminForm(forms.ModelForm):
content = forms.CharField(
widget=SimpleMDEEditor(),
help_text="Announcement content in Markdown format with live preview"
)
class Meta:
model = Announcement
fields = '__all__'
@admin.register(Announcement)
class AnnouncementAdmin(BaseModelAdmin, ImportExportModelAdmin):
form = AnnouncementAdminForm
list_display = [
'title', 'announcement_type', 'priority', 'author',
'is_published', 'publish_date', 'created_at'
]
list_filter = [
'announcement_type', 'priority', 'is_published',
SoftDeleteListFilter, 'created_at'
]
search_fields = ['title', 'content', 'author__username']
readonly_fields = ['created_at', 'updated_at']
fieldsets = (
('Content', {
'fields': ('title', 'content', 'author')
}),
('Settings', {
'fields': ('announcement_type', 'priority', 'is_published', 'publish_date')
}),
('Timestamps', {
'fields': ('created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
actions = BaseModelAdmin.actions + ['publish_announcements']
def publish_announcements(self, request, queryset):
queryset.update(is_published=True, publish_date=timezone.now())
self.message_user(request, f"{queryset.count()} announcements published.")
publish_announcements.short_description = "Publish selected announcements"
@admin.register(PushNotificationDevice)
class PushNotificationDeviceAdmin(BaseModelAdmin, ImportExportModelAdmin):
list_display = ['user', 'device_type', 'is_active', 'created_at']
list_filter = ['device_type', 'is_active', SoftDeleteListFilter, 'created_at']
search_fields = ['user__username', 'user__email', 'device_token']
readonly_fields = ['created_at', 'updated_at']
fieldsets = (
('Device', {
'fields': ('user', 'device_token', 'device_type', 'is_active')
}),
('Timestamps', {
'fields': ('created_at', 'updated_at'),
'classes': ('collapse',)
}),
)