117 lines
3.7 KiB
Python
117 lines
3.7 KiB
Python
from django.shortcuts import get_object_or_404
|
|
from rest_framework.decorators import api_view, permission_classes
|
|
from rest_framework.exceptions import PermissionDenied
|
|
from rest_framework.permissions import IsAuthenticated
|
|
from rest_framework.response import Response
|
|
|
|
from vbv_lernwelt.core.models import User
|
|
from vbv_lernwelt.course.models import CourseCompletion
|
|
from vbv_lernwelt.learning_mentor.models import LearningMentor
|
|
from vbv_lernwelt.learnpath.models import LearningUnit
|
|
from vbv_lernwelt.self_evaluation_feedback.models import (
|
|
CourseCompletionFeedback,
|
|
SelfEvaluationFeedback,
|
|
)
|
|
from vbv_lernwelt.self_evaluation_feedback.serializers import (
|
|
SelfEvaluationFeedbackSerializer,
|
|
)
|
|
|
|
|
|
@api_view(["POST"])
|
|
@permission_classes([IsAuthenticated])
|
|
def start_self_evaluation_feedback(request, learning_unit_id):
|
|
feedback_provider_user_id = request.data.get("feedback_provider_user_id")
|
|
|
|
learning_unit = get_object_or_404(LearningUnit, id=learning_unit_id)
|
|
feedback_provider_user = get_object_or_404(User, id=feedback_provider_user_id)
|
|
|
|
if not LearningMentor.objects.filter(
|
|
course=learning_unit.get_course(),
|
|
mentor=feedback_provider_user,
|
|
participants__user=request.user,
|
|
).exists():
|
|
raise PermissionDenied()
|
|
|
|
# calling start multiple times shall be a no-op
|
|
_, created = SelfEvaluationFeedback.objects.get_or_create(
|
|
feedback_requester_user=request.user,
|
|
feedback_provider_user=feedback_provider_user,
|
|
learning_unit=learning_unit,
|
|
)
|
|
|
|
if created:
|
|
# TODO: Create notification for feedback_provider_user
|
|
...
|
|
|
|
return Response({"success": True})
|
|
|
|
|
|
@api_view(["PUT"])
|
|
@permission_classes([IsAuthenticated])
|
|
def submit_provider_self_evaluation_feedback(request, feedback_id):
|
|
feedback = get_object_or_404(
|
|
SelfEvaluationFeedback, id=feedback_id, feedback_provider_user=request.user
|
|
)
|
|
|
|
feedback.feedback_submitted = True
|
|
feedback.save()
|
|
|
|
return Response({"success": True})
|
|
|
|
|
|
@api_view(["GET"])
|
|
@permission_classes([IsAuthenticated])
|
|
def get_self_evaluation_feedback_as_provider(request, learning_unit_id):
|
|
feedback = get_object_or_404(
|
|
SelfEvaluationFeedback,
|
|
learning_unit_id=learning_unit_id,
|
|
feedback_provider_user=request.user,
|
|
)
|
|
|
|
return Response(SelfEvaluationFeedbackSerializer(feedback).data)
|
|
|
|
|
|
@api_view(["GET"])
|
|
@permission_classes([IsAuthenticated])
|
|
def get_self_evaluation_feedback_as_requester(request, learning_unit_id):
|
|
learning_unit = get_object_or_404(LearningUnit, id=learning_unit_id)
|
|
|
|
feedback = get_object_or_404(
|
|
SelfEvaluationFeedback,
|
|
learning_unit=learning_unit,
|
|
feedback_requester_user=request.user,
|
|
)
|
|
|
|
return Response(SelfEvaluationFeedbackSerializer(feedback).data)
|
|
|
|
|
|
@api_view(["PUT"])
|
|
@permission_classes([IsAuthenticated])
|
|
def add_provider_self_evaluation_feedback(request, feedback_id):
|
|
feedback_assessment = request.data.get("feedback_assessment")
|
|
|
|
feedback = get_object_or_404(
|
|
SelfEvaluationFeedback, id=feedback_id, feedback_provider_user=request.user
|
|
)
|
|
|
|
course_completion = get_object_or_404(
|
|
CourseCompletion,
|
|
id=request.data.get("course_completion_id"),
|
|
user=feedback.feedback_requester_user,
|
|
)
|
|
|
|
(
|
|
course_completion_feedback,
|
|
created,
|
|
) = CourseCompletionFeedback.objects.get_or_create(
|
|
feedback=feedback,
|
|
course_completion=course_completion,
|
|
defaults={"feedback_assessment": feedback_assessment},
|
|
)
|
|
|
|
if not created:
|
|
course_completion_feedback.feedback_assessment = feedback_assessment
|
|
course_completion_feedback.save()
|
|
|
|
return Response({"success": True})
|