""" User admin configuration. """ from django.contrib import admin from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from .models import User, DeviceToken @admin.register(User) class UserAdmin(BaseUserAdmin): """Admin configuration for User model.""" list_display = [ 'email', 'username', 'first_name', 'last_name', 'email_verified', 'is_approved', 'is_staff', 'created_at' ] list_filter = [ 'email_verified', 'is_approved', 'is_staff', 'is_superuser', 'is_active', 'created_at' ] search_fields = ['email', 'username', 'first_name', 'last_name'] ordering = ['-created_at'] actions = ['approve_users', 'unapprove_users'] fieldsets = BaseUserAdmin.fieldsets + ( ('Profile', {'fields': ('timezone', 'avatar')}), ('Preferences', { 'fields': ('default_reminder_minutes', 'email_notifications', 'push_notifications') }), ('Verification & Approval', { 'fields': ('email_verified', 'email_verified_at', 'is_approved', 'approved_by', 'approved_at') }), ) readonly_fields = ['email_verified_at', 'approved_by', 'approved_at'] add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ('email', 'username', 'password1', 'password2'), }), ) def approve_users(self, request, queryset): """Approve selected users.""" from django.utils import timezone from .utils import send_approval_notification count = 0 for user in queryset.filter(is_approved=False): user.is_approved = True user.approved_by = request.user user.approved_at = timezone.now() user.save(update_fields=['is_approved', 'approved_by', 'approved_at']) # Send notification email if user.email_notifications: try: send_approval_notification(user) except Exception: pass # Don't fail approval if email fails count += 1 self.message_user(request, f'{count} user(s) approved successfully.') approve_users.short_description = "Approve selected users" def unapprove_users(self, request, queryset): """Remove approval from selected users.""" count = queryset.filter(is_approved=True).update( is_approved=False, approved_by=None, approved_at=None ) self.message_user(request, f'{count} user(s) unapproved.') unapprove_users.short_description = "Remove approval from selected users" @admin.register(DeviceToken) class DeviceTokenAdmin(admin.ModelAdmin): """Admin configuration for DeviceToken model.""" list_display = ['user', 'platform', 'device_name', 'is_active', 'created_at'] list_filter = ['platform', 'is_active'] search_fields = ['user__email', 'device_name'] ordering = ['-created_at']