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',) }), )