from django.contrib import admin from django.db.models import JSONField from vbv_lernwelt.assignment.models import ( AssignmentCompletion, AssignmentCompletionAuditLog, ) from vbv_lernwelt.core.admin import LogAdmin from vbv_lernwelt.core.admin_utils import PrettyJSONWidget @admin.register(AssignmentCompletion) class AssignmentCompletionAdmin(admin.ModelAdmin): formfield_overrides = { JSONField: {"widget": PrettyJSONWidget(attrs={"rows": 16, "cols": 80})}, } date_hierarchy = "created_at" list_display = [ "id", "assignment", "get_circle", "assignment_user", "evaluation_user", "course_session", "completion_status", "evaluation_points", "evaluation_points_deducted", ] list_filter = [ "completion_status", "assignment__assignment_type", "course_session__course", "course_session", ] search_fields = [ "assignment_user__email", "assignment_user__first_name", "assignment_user__last_name", "evaluation_user__email", "evaluation_user__first_name", "evaluation_user__last_name", ] readonly_fields = [ "assignment_user", "assignment", "completion_data", "course_session", "learning_content_page", "evaluation_points", "submitted_at", "evaluation_user", "evaluation_submitted_at", "evaluation_points_deducted_user", ] def get_circle(self, obj): try: return obj.learning_content_page.specific.get_circle().title except Exception: return "" get_circle.short_description = "Circle" def save_model(self, request, obj, form, change): if change and "evaluation_points_deducted" in form.changed_data: obj.evaluation_points_deducted_user = request.user super().save_model(request, obj, form, change) @admin.register(AssignmentCompletionAuditLog) class AssignmentCompletionAuditLogAdmin(LogAdmin): date_hierarchy = "created_at" list_display = [ "created_at", "assignment", "get_circle", "assignment_user", "evaluation_user", "course_session", "completion_status", "evaluation_points", ] list_filter = [ "completion_status", "assignment__assignment_type", "course_session__course", "course_session", ] search_fields = [ "assignment_user__email", "assignment_user__first_name", "assignment_user__last_name", "evaluation_user__email", "evaluation_user__first_name", "evaluation_user__last_name", ] def get_circle(self, obj): try: return obj.learning_content_page.specific.get_circle().title except Exception: return "" get_circle.short_description = "Circle"