from django.contrib import admin from django.utils.translation import gettext_lazy as _ from unfold.admin import ModelAdmin from unfold.contrib.filters.admin import ( ChoicesDropdownFilter, MultipleRelatedDropdownFilter, RangeDateFilter, ) from utils.admin import project_admin_site from apps.course.models import ( CourseLiveSession, LiveSessionRecording, LiveSessionUser, USER_ROLE_CHOICES, RECORDING_TYPE_CHOICES, ) class CourseLiveSessionAdmin(ModelAdmin): list_display = ("subject", "course", "started_at", "ended_at", "created_at") list_filter = ( ("course", MultipleRelatedDropdownFilter), ("started_at", RangeDateFilter), ) search_fields = ("subject", "course__title") ordering = ("-started_at",) autocomplete_fields = ("course",) readonly_fields = ("created_at", "updated_at") fieldsets = ( (None, {"fields": ("course", "subject", "started_at", "ended_at")}), (_("Timestamps"), {"fields": ("created_at", "updated_at")}), ) class LiveSessionUserAdmin(ModelAdmin): list_display = ("user", "session", "role", "is_online", "entered_at", "exited_at") list_filter = ( ("session", MultipleRelatedDropdownFilter), ("user", MultipleRelatedDropdownFilter), ("role", ChoicesDropdownFilter), ("entered_at", RangeDateFilter), ("is_online", admin.BooleanFieldListFilter), ) search_fields = ( "user__email", "user__fullname", "session__subject", ) autocomplete_fields = ("user", "session") readonly_fields = ("created_at", "updated_at") fieldsets = ( (None, {"fields": ("session", "user", "role")}), (_("Session Timing"), {"fields": ("entered_at", "exited_at", "is_online")}), (_("Timestamps"), {"fields": ("created_at", "updated_at")}), ) def get_role_choices(self, request): return USER_ROLE_CHOICES class LiveSessionRecordingAdmin(ModelAdmin): list_display = ("title", "session", "recording_type", "is_active", "created_at") list_filter = ( ("session", MultipleRelatedDropdownFilter), ("recording_type", ChoicesDropdownFilter), ("created_at", RangeDateFilter), ("is_active", admin.BooleanFieldListFilter), ) search_fields = ("title", "session__subject", "session__course__title") autocomplete_fields = ("session",) readonly_fields = ("created_at", "updated_at") fieldsets = ( (None, {"fields": ("session", "title", "recording_type")}), (_("Files"), {"fields": ("file", "file_time", "thumbnail")}), (_("Status"), {"fields": ("is_active",)}), (_("Timestamps"), {"fields": ("created_at", "updated_at")}), ) def get_recording_type_choices(self, request): return RECORDING_TYPE_CHOICES project_admin_site.register(CourseLiveSession, CourseLiveSessionAdmin) project_admin_site.register(LiveSessionUser, LiveSessionUserAdmin) project_admin_site.register(LiveSessionRecording, LiveSessionRecordingAdmin)