diff --git a/junction/base/constants.py b/junction/base/constants.py index 0384cdfd..fa12d2c7 100644 --- a/junction/base/constants.py +++ b/junction/base/constants.py @@ -80,7 +80,8 @@ class ProposalReviewerComment: class ProposalVotesFilter: _NO_VOTES = [0, "No votes"] _MIN_ONE_VOTE = [1, "Minimum 1 vote"] - _SORT = [2, "Sort by vote value"] + _SORT_BY_SUM = [2, "Sort by total votes"] + _SORT_BY_REVIEWER = [3, "Sort by your votes"] class ConferenceSettingConstants: diff --git a/junction/proposals/dashboard.py b/junction/proposals/dashboard.py index 62ba46f2..469377c0 100644 --- a/junction/proposals/dashboard.py +++ b/junction/proposals/dashboard.py @@ -247,10 +247,16 @@ def reviewer_votes_dashboard(request, conference_slug): elif votes == ProposalVotesFilter.MIN_ONE_VOTE: proposals_qs = [ p for p in proposals_qs if p.get_reviewer_votes_count() >= votes] - elif votes == ProposalVotesFilter.SORT: + elif votes == ProposalVotesFilter.SORT_BY_SUM: proposals_qs = sorted( proposals_qs, key=lambda x: x.get_reviewer_votes_sum(), reverse=True) + elif votes == ProposalVotesFilter.SORT_BY_REVIEWER: + proposals_qs = sorted( + proposals_qs, + key=lambda x: x.get_reviewer_vote_value(reviewer=request.user), + reverse=True, + ) for section in proposal_sections: section_proposals = [ diff --git a/junction/proposals/models.py b/junction/proposals/models.py index 03dc87d7..cfcb0b11 100644 --- a/junction/proposals/models.py +++ b/junction/proposals/models.py @@ -187,6 +187,16 @@ def get_reviewer_votes_sum(self): sum_of_votes = sum((v.vote_value.vote_value for v in votes)) return sum_of_votes + def get_reviewer_vote_value(self, reviewer): + try: + vote = ProposalSectionReviewerVote.objects.get( + proposal=self, voter__conference_reviewer__reviewer=reviewer, + ) + return vote.vote_value.vote_value + except ProposalSectionReviewerVote.DoesNotExist as e: + print('{}'.format(e)) + return 0 + def get_reviewers_count(self): """ Count of reviewers for given proposal section """ return ProposalSectionReviewer.objects.filter(