Add bulk add functionality for user and CID groups to exam collections
This commit is contained in:
@@ -86,6 +86,7 @@ from .forms import (
|
||||
UserUserForm,
|
||||
UserUserGroupForm,
|
||||
UsersAutocompleteForm, # Added import
|
||||
ExamCollectionBulkAddGroupsForm,
|
||||
)
|
||||
|
||||
from .models import (
|
||||
@@ -144,6 +145,7 @@ from shorts.models import Question as ShortsQuestion, ExamQuestionDetail as Shor
|
||||
|
||||
from django.db.models import Case, When
|
||||
from django.conf import settings
|
||||
from django.db import transaction
|
||||
|
||||
from datetime import datetime
|
||||
from django.utils import timezone
|
||||
@@ -378,6 +380,49 @@ def create_examination(request):
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
@user_passes_test(lambda u: u.is_superuser or u.groups.filter(name="cid_user_manager").exists())
|
||||
def exam_collection_bulk_add_groups(request, collection_id):
|
||||
"""HTMX endpoint: show form (GET) and process bulk-adding of CID/User groups (POST).
|
||||
|
||||
Renders small partials suitable for HTMX swaps.
|
||||
"""
|
||||
collection = get_object_or_404(ExamCollection, pk=collection_id)
|
||||
|
||||
if request.method == "GET":
|
||||
form = ExamCollectionBulkAddGroupsForm(user=request.user)
|
||||
return render(request, "generic/partials/examcollection_bulk_add_groups_form.html", {"form": form, "collection": collection})
|
||||
|
||||
# POST
|
||||
form = ExamCollectionBulkAddGroupsForm(request.POST, user=request.user)
|
||||
if not form.is_valid():
|
||||
return render(request, "generic/partials/examcollection_bulk_add_groups_form.html", {"form": form, "collection": collection})
|
||||
|
||||
cid_groups = form.cleaned_data.get("cid_user_groups")
|
||||
user_groups = form.cleaned_data.get("user_user_groups")
|
||||
exam_types = form.cleaned_data.get("exam_types")
|
||||
# If 'all' is selected (or no selection), treat as None -> all exams
|
||||
if exam_types:
|
||||
if "all" in exam_types:
|
||||
exam_types = None
|
||||
else:
|
||||
exam_types = None
|
||||
|
||||
total_user = 0
|
||||
total_cid = 0
|
||||
try:
|
||||
with transaction.atomic():
|
||||
if user_groups:
|
||||
total_user = collection.bulk_add_user_user_groups(user_groups, exam_types=exam_types)
|
||||
if cid_groups:
|
||||
total_cid = collection.bulk_add_cid_user_groups(cid_groups, exam_types=exam_types)
|
||||
except Exception as e:
|
||||
# render an error fragment
|
||||
return render(request, "generic/partials/examcollection_bulk_add_groups_result.html", {"error": str(e), "collection": collection})
|
||||
|
||||
return render(request, "generic/partials/examcollection_bulk_add_groups_result.html", {"total_user": total_user, "total_cid": total_cid, "collection": collection})
|
||||
|
||||
|
||||
@login_required
|
||||
@user_passes_test(lambda u: u.is_superuser)
|
||||
def examination_detail(request, pk):
|
||||
|
||||
Reference in New Issue
Block a user