Skip to content
Snippets Groups Projects
Commit d45a5898 authored by Dominik Seeger's avatar Dominik Seeger Committed by Dominik Seeger
Browse files

put the final by reviewer logic in the serializer

parent 1492d2f5
No related branches found
No related tags found
1 merge request!171Resolve "Changing feedback that a reviewer worken on is forbidden after set to final"
......@@ -7,7 +7,7 @@ from rest_framework import serializers
from rest_framework.utils import html
from core import models
from core.models import Feedback
from core.models import Feedback, UserAccount
from util.factories import GradyUserFactory
from .generic import DynamicFieldsModelSerializer
......@@ -121,8 +121,12 @@ class FeedbackSerializer(DynamicFieldsModelSerializer):
submission = validated_data.pop('of_submission')
feedback_lines = validated_data.pop('feedback_lines', [])
labels = validated_data.pop('labels', [])
user = UserAccount.objects.get(username=str(self.context['request'].user))
feedback = Feedback.objects.create(of_submission=submission,
**validated_data)
if user.role == UserAccount.REVIEWER:
feedback.final_by_reviewer = self.context['request'].data['is_final']
for label in labels:
feedback.labels.add(label)
......@@ -141,6 +145,11 @@ class FeedbackSerializer(DynamicFieldsModelSerializer):
@transaction.atomic
def update(self, feedback, validated_data):
user = UserAccount.objects.get(username=str(self.context['request'].user))
if user.role == UserAccount.REVIEWER:
feedback.final_by_reviewer = self.context['request'].data['is_final']
for comment in validated_data.pop('feedback_lines', []):
labels = comment.pop('labels', [])
comment_instance, _ = models.FeedbackComment.objects.update_or_create(
......
......@@ -32,10 +32,6 @@ class FeedbackApiView(
user_is_tutor = self.request.user.role == models.UserAccount.TUTOR
return feedback_final_by_reviewer and user_is_tutor
def _set_final_by_reviewer(self, serializer):
feedback_final_by_reviewer = serializer.validated_data.get('is_final', True)
serializer.save(final_by_reviewer=feedback_final_by_reviewer)
def _get_implicit_assignment_for_user(self, submission):
""" Check for tutor if it exists. Not relevant for reviewer """
try:
......@@ -97,8 +93,6 @@ class FeedbackApiView(
{'For tutors it is not allowed to create feedback final.'},
status=status.HTTP_403_FORBIDDEN)
self._set_final_by_reviewer(serializer)
self.perform_create(serializer)
return Response(serializer.data,
status=status.HTTP_201_CREATED)
......@@ -119,8 +113,6 @@ class FeedbackApiView(
raise PermissionDenied(
detail='Cannot set the first feedback final.')
self._set_final_by_reviewer(serializer)
serializer.save()
return Response(serializer.data)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment