Skip to content
Snippets Groups Projects
Commit 0068c345 authored by Dominik Seeger's avatar Dominik Seeger :ghost:
Browse files

added dedicated logic for reviewer final validation

parent 32561377
Branches
Tags
No related merge requests found
Pipeline #105209 failed
# Generated by Django 2.2 on 2019-07-09 15:26
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0017_auto_20190604_1631'),
]
operations = [
migrations.AddField(
model_name='feedback',
name='final_by_reviewer',
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name='feedbacklabel',
name='name',
field=models.CharField(max_length=50, unique=True),
),
]
......@@ -25,10 +25,13 @@ class Feedback(models.Model):
points a student receives for his submission.
origin : IntegerField
Of whom was this feedback originally created. She below for the choices
final_by_reviewer: BooleanField
Whether or not this feedback was set to final by a reviewer once
"""
score = models.DecimalField(max_digits=5, decimal_places=2, default=0)
created = models.DateTimeField(auto_now_add=True)
is_final = models.BooleanField(default=False)
final_by_reviewer = models.BooleanField(default=False)
of_submission = models.OneToOneField(
Submission,
......
......@@ -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 = 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 = 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(
......
......@@ -28,12 +28,9 @@ class FeedbackApiView(
lookup_url_kwarg = 'submission_pk'
def _tutor_attempts_to_change_final_feedback_of_reviewer(self, serializer):
feedback_is_final = serializer.instance.is_final
feedback_final_by_reviewer = serializer.instance.final_by_reviewer
user_is_tutor = self.request.user.role == models.UserAccount.TUTOR
authors = serializer.instance.of_submission.meta.feedback_authors
set_by_reviewer = authors.filter(
role=models.UserAccount.REVIEWER).exists()
return feedback_is_final and set_by_reviewer and user_is_tutor
return feedback_final_by_reviewer and user_is_tutor
def _get_implicit_assignment_for_user(self, submission):
""" Check for tutor if it exists. Not relevant for reviewer """
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment