From 6a159ebdfdaff5a005e11fdb6a3daa01e862d5e8 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Thu, 28 Mar 2019 11:02:52 +0000 Subject: [PATCH] Merged in [16094] from magnus.westerlund@ericsson.com: Added sortable columns to Review Team Reviewers page. Partially addresses issue #2656 - Legacy-Id: 16112 Note: SVN reference [16094] has been migrated to Git commit 0c0e75861edda17f8b67ff6f7baf87fbd1d44ddf --- bin/mergedevbranch | 10 ++++++---- ietf/group/forms.py | 3 ++- ietf/group/tests_review.py | 6 +++++- ietf/group/views.py | 12 ++++++++++++ ietf/review/admin.py | 2 +- ietf/review/models.py | 2 ++ ietf/templates/group/reviewer_overview.html | 16 ++++++++++++++-- ready-for-merge | 2 ++ 8 files changed, 44 insertions(+), 9 deletions(-) diff --git a/bin/mergedevbranch b/bin/mergedevbranch index 0c1aae81f..453357439 100755 --- a/bin/mergedevbranch +++ b/bin/mergedevbranch @@ -167,6 +167,12 @@ if [ "$REPLY" != "" ]; then fi echo "" + +note "Writing commit script" +echo -e "#!/bin/bash\n\nsvn commit -m \"Merged in [$rev] from $who:\n ${comment//\"/\'} ${fix//\"/\'}\"" > ../cicmd/commit-${rev}-merge.sh +chmod +x ../cicmd/commit-${rev}-merge.sh + + read -p "Continue with the merge? [Y/n] " [ "$REPLY" = "Y" -o "$REPLY" = "y" -o "$REPLY" = "" ] || exit @@ -179,10 +185,6 @@ else svn merge -c $rev ${repo}/$branch ." fi -note "Writing commit script" -echo -e "#!/bin/bash\n\nsvn commit -m \"Merged in [$rev] from $who:\n ${comment//\"/\'} ${fix//\"/\'}\"" > ../cicmd/commit-${rev}-merge.sh -chmod +x ../cicmd/commit-${rev}-merge.sh - M=$(svn st | cut -c 1-7 | grep -oh 'M' | head -n 1) C=$(svn st | cut -c 1-7 | grep -oh 'C' | head -n 1) G=$(svn st | cut -c 1-7 | grep -oh 'G' | head -n 1) diff --git a/ietf/group/forms.py b/ietf/group/forms.py index 1cbc56ee8..d2d937cb0 100644 --- a/ietf/group/forms.py +++ b/ietf/group/forms.py @@ -323,6 +323,7 @@ class EndUnavailablePeriodForm(forms.Form): class ReviewSecretarySettingsForm(forms.ModelForm): class Meta: model = ReviewSecretarySettings - fields = ['remind_days_before_deadline'] + fields = ['remind_days_before_deadline', 'max_items_to_show_in_reviewer_list', + 'days_to_show_in_reviewer_list'] diff --git a/ietf/group/tests_review.py b/ietf/group/tests_review.py index 92bed8aab..e08cf8457 100644 --- a/ietf/group/tests_review.py +++ b/ietf/group/tests_review.py @@ -519,11 +519,15 @@ class ReviewTests(TestCase): # set settings r = self.client.post(url, { - "remind_days_before_deadline": "6" + "remind_days_before_deadline": "6", + "max_items_to_show_in_reviewer_list": 10, + "days_to_show_in_reviewer_list": 365 }) self.assertEqual(r.status_code, 302) settings = ReviewSecretarySettings.objects.get(person=secretary, team=review_req.team) self.assertEqual(settings.remind_days_before_deadline, 6) + self.assertEqual(settings.max_items_to_show_in_reviewer_list, 10) + self.assertEqual(settings.days_to_show_in_reviewer_list, 365) def test_review_reminders(self): review_req = ReviewRequestFactory() diff --git a/ietf/group/views.py b/ietf/group/views.py index ccc7e547d..fd2f373d4 100644 --- a/ietf/group/views.py +++ b/ietf/group/views.py @@ -36,6 +36,7 @@ from __future__ import unicode_literals, print_function import os import re +import sys import json import math import itertools @@ -1388,6 +1389,7 @@ def reviewer_overview(request, acronym, group_type=None): MAX_CLOSED_REQS = 10 + days_since = sys.maxsize req_data = req_data_for_reviewers.get(person.pk, []) open_reqs = sum(1 for d in req_data if d.state in ["requested", "accepted"]) latest_reqs = [] @@ -1396,7 +1398,17 @@ def reviewer_overview(request, acronym, group_type=None): latest_reqs.append((d.req_pk, d.doc, d.reviewed_rev, d.assigned_time, d.deadline, review_state_by_slug.get(d.state), int(math.ceil(d.assignment_to_closure_days)) if d.assignment_to_closure_days is not None else None)) + if d.state in ["completed", "completed_in_time", "completed_late"]: + if d.assigned_time is not None: + delta = datetime.datetime.now() - d.assigned_time + if d.assignment_to_closure_days is not None: + days = int(delta.days - d.assignment_to_closure_days) + if days_since > days: days_since = days + + if days_since == sys.maxsize: + days_since = None person.latest_reqs = latest_reqs + person.days_since_completed_review = days_since return render(request, 'group/reviewer_overview.html', construct_group_menu_context(request, group, "reviewers", group_type, { diff --git a/ietf/review/admin.py b/ietf/review/admin.py index 691cee738..ec8b7ac91 100644 --- a/ietf/review/admin.py +++ b/ietf/review/admin.py @@ -17,7 +17,7 @@ class ReviewerSettingsAdmin(simple_history.admin.SimpleHistoryAdmin): admin.site.register(ReviewerSettings, ReviewerSettingsAdmin) class ReviewSecretarySettingsAdmin(admin.ModelAdmin): - list_display = [u'id', 'team', 'person', 'remind_days_before_deadline'] + list_display = [u'id', 'team', 'person', 'remind_days_before_deadline', 'max_items_to_show_in_reviewer_list', 'days_to_show_in_reviewer_list'] raw_id_fields = ['team', 'person'] admin.site.register(ReviewSecretarySettings, ReviewSecretarySettingsAdmin) diff --git a/ietf/review/models.py b/ietf/review/models.py index d4a89619d..cb09f52dd 100644 --- a/ietf/review/models.py +++ b/ietf/review/models.py @@ -42,6 +42,8 @@ class ReviewSecretarySettings(models.Model): team = ForeignKey(Group, limit_choices_to=~models.Q(reviewteamsettings=None)) person = ForeignKey(Person) remind_days_before_deadline = models.IntegerField(null=True, blank=True, help_text="To get an email reminder in case a reviewer forgets to do an assigned review, enter the number of days before review deadline you want to receive it. Clear the field if you don't want a reminder.") + max_items_to_show_in_reviewer_list = models.IntegerField(null=True, blank=True, help_text="Maximum number of completed items to show for one reviewer in the reviewer list view, the list is also filtered by the days to show in reviews list setting.") + days_to_show_in_reviewer_list = models.IntegerField(null=True, blank=True, help_text="Maximum number of days to show in reviewer list for completed items.") def __unicode__(self): return u"{} in {}".format(self.person, self.team) diff --git a/ietf/templates/group/reviewer_overview.html b/ietf/templates/group/reviewer_overview.html index 8f6f90006..e5ae0b788 100644 --- a/ietf/templates/group/reviewer_overview.html +++ b/ietf/templates/group/reviewer_overview.html @@ -9,6 +9,10 @@ {% block group_content %} {% origin %} + {% block pagehead %} + + {% endblock %} + {% if can_access_stats %}

  

{% endif %} @@ -25,11 +29,13 @@ {% if reviewers %} - +
+ + @@ -39,12 +45,13 @@ {% elif person.busy %}class="busy" {% elif person.settings.skip_next %}class="skip-next" {% endif %}> + +
Next Reviewer Assigned/Deadline/state/time between assignment and closure for latest assignmentsDays Since Completed Settings
{{ forloop.counter }} {% if person.settings_url %}{% endif %}{{ person }}{% if person.settings_url %}{% endif %} {% for req_pk, doc_name, reviewed_rev, assigned_time, deadline, state, assignment_to_closure_days in person.latest_reqs %} - +
{{ assigned_time|date }}X{{ assigned_time|date }} {{ deadline|date }} {{ state.name }} @@ -57,6 +64,7 @@ {% endfor %}
{% if person.days_since_completed_review %} {{ person.days_since_completed_review }} {% else %} 99999{% endif %} {% if person.settings.min_interval %} {{ person.settings.get_min_interval_display }}
@@ -84,3 +92,7 @@ {% endif %} {% endblock %} + +{% block js %} + +{% endblock %} diff --git a/ready-for-merge b/ready-for-merge index 3a163ea40..7c4862420 100644 --- a/ready-for-merge +++ b/ready-for-merge @@ -7,6 +7,8 @@ # --- Add entries at the top --- +/personal/fenton/6.94.2.dev0@16108 + /personal/housley/6.87.4.dev0@15683 /personal/rcross/6.81.3.dev0@15265