54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
import structlog
|
|
from rest_framework.decorators import api_view
|
|
from rest_framework.exceptions import PermissionDenied
|
|
from rest_framework.response import Response
|
|
|
|
from vbv_lernwelt.assignment.models import AssignmentCompletion
|
|
from vbv_lernwelt.iam.permissions import can_evaluate_assignments
|
|
|
|
logger = structlog.get_logger(__name__)
|
|
|
|
|
|
@api_view(["GET", "POST"])
|
|
def request_assignment_completion_status(request, assignment_id, course_session_id):
|
|
# TODO quickfix before GraphQL...
|
|
|
|
user_selection_ids = request.data.get("user_selection_ids", [])
|
|
|
|
if can_evaluate_assignments(
|
|
request.user, course_session_id, assignment_user_ids=user_selection_ids
|
|
):
|
|
qs = AssignmentCompletion.objects.filter(
|
|
course_session_id=course_session_id,
|
|
assignment_id=assignment_id,
|
|
)
|
|
if len(user_selection_ids) > 0:
|
|
qs = qs.filter(assignment_user_id__in=user_selection_ids)
|
|
|
|
values = qs.values(
|
|
"id",
|
|
"assignment_user_id",
|
|
"completion_status",
|
|
"evaluation_points",
|
|
"evaluation_points_deducted",
|
|
"evaluation_max_points",
|
|
"evaluation_passed",
|
|
"learning_content_page_id",
|
|
)
|
|
|
|
# Convert the learning_content_page_id to a string
|
|
data = list(values) # Evaluate the queryset
|
|
for item in data:
|
|
if item["evaluation_points"] is not None:
|
|
# only `evaluation_points_final` is relevant for the frontend
|
|
item["evaluation_points_final"] = (
|
|
item["evaluation_points"] - item["evaluation_points_deducted"]
|
|
)
|
|
else:
|
|
item["evaluation_points_final"] = None
|
|
item["learning_content_page_id"] = str(item["learning_content_page_id"])
|
|
|
|
return Response(status=200, data=data)
|
|
|
|
raise PermissionDenied()
|