From 7c9ecf414a5834a3e347d555a830ed53705a279c Mon Sep 17 00:00:00 2001 From: Erin Mullaney <erin.mullaney@torchbox.com> Date: Wed, 20 Feb 2019 10:10:28 -0500 Subject: [PATCH] #962 review block: don't show _not_reviewed authors if they have left an opinion, display opinions for all types of reviews. --- .../funds/includes/review_table.html | 2 +- opentech/apply/review/views.py | 48 +++++++++++-------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/opentech/apply/funds/templates/funds/includes/review_table.html b/opentech/apply/funds/templates/funds/includes/review_table.html index e01ffccdc..7b724dae3 100644 --- a/opentech/apply/funds/templates/funds/includes/review_table.html +++ b/opentech/apply/funds/templates/funds/includes/review_table.html @@ -33,7 +33,7 @@ {% if reviews_block.external_reviewed or reviews_block.external_not_reviewed %} {% for review_data in reviews_block.external_reviewed %} - {% include 'funds/includes/review_table_row.html' with review=review_data.review reviewer=review_data.reviewer %} + {% include 'funds/includes/review_table_row.html' with review=review_data.review reviewer=review_data.reviewer opinions=review_data.opinions %} {% endfor %} {% for review_data in reviews_block.external_not_reviewed %} diff --git a/opentech/apply/review/views.py b/opentech/apply/review/views.py index 03514f515..2fae0ed08 100644 --- a/opentech/apply/review/views.py +++ b/opentech/apply/review/views.py @@ -16,6 +16,7 @@ from opentech.apply.review.blocks import RecommendationBlock, RecommendationComm from opentech.apply.review.forms import ReviewModelForm, ReviewOpinionForm from opentech.apply.stream_forms.models import BaseStreamForm from opentech.apply.users.decorators import staff_required +from opentech.apply.users.models import User from opentech.apply.utils.views import CreateOrUpdateView from .models import Review @@ -30,44 +31,49 @@ class ReviewContextMixin: for review in reviews: reviews_dict[review.author.pk] = review + # Get all the authors of opinions, these authors should not show up in the 'xxx_not_reviewed' lists + opinion_authors = set(User.objects.filter( + pk__in=ReviewOpinion.objects.filter(review__submission=self.object).values('author__pk'))) + reviews_block = defaultdict(list) for assigned_reviewer in assigned: reviewer = assigned_reviewer.reviewer role = assigned_reviewer.role review = reviews_dict.get(reviewer.pk, None) + key = None if role: if review: key = 'role_reviewed' - else: + elif reviewer not in opinion_authors: key = 'role_not_reviewed' elif reviewer.is_apply_staff: if review: key = 'staff_reviewed' - else: + elif review not in opinion_authors: key = 'staff_not_reviewed' else: if review: key = 'external_reviewed' - else: + elif review not in opinion_authors: key = 'external_not_reviewed' - - review_info_dict = { - 'reviewer': reviewer, - 'review': review, - 'role': role, - } - opinions_list = [] - if review and review.opinions: - for opinion in review.opinions.all(): - author_role = self.object.assigned.with_roles().filter(reviewer=opinion.author).first() - role = author_role.role if author_role else None - opinions_list.append({ - 'author': opinion.author, - 'opinion': opinion.get_opinion_display(), - 'role': role, - }) - review_info_dict['opinions'] = opinions_list - reviews_block[key].append(review_info_dict) + if key: # Do not add this reviewer to any list if they haven't reviewed but have left an opinion + review_info_dict = { + 'reviewer': reviewer, + 'review': review, + 'role': role, + } + opinions_list = [] + if review and review.opinions: + for opinion in review.opinions.all(): + author_role = self.object.assigned.with_roles().filter(reviewer=opinion.author).first() + role = author_role.role if author_role else None + opinions_list.append({ + 'author': opinion.author, + 'opinion': opinion.get_opinion_display(), + 'role': role, + }) + review_info_dict['opinions'] = opinions_list + reviews_block[key].append(review_info_dict) # Calculate the recommendation based on role and staff reviews recommendation = self.object.reviews.by_staff().recommendation() -- GitLab