Skip to content

Commit 65d8415

Browse files
author
Sasha Romijn
committed
Fix ietf-tools#2074, fix ietf-tools#2358 - Add history for assignments, requests and unavailability.
Commit ready for merge. - Legacy-Id: 17069
1 parent 6e55f26 commit 65d8415

File tree

9 files changed

+393
-31
lines changed

9 files changed

+393
-31
lines changed

ietf/doc/views_review.py

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
from __future__ import absolute_import, print_function, unicode_literals
66

77
import io
8+
import itertools
89
import json
910
import os
1011
import datetime
1112
import requests
1213
import email.utils
1314

1415
from django.utils.http import is_safe_url
16+
from simple_history.utils import update_change_reason
1517

1618
import debug # pyflakes:ignore
1719

@@ -135,12 +137,15 @@ def request_review(request, name):
135137
review_req.team = team
136138
review_req.save()
137139

140+
descr = "Requested {} review by {}".format(review_req.type.name,
141+
review_req.team.acronym.upper())
142+
update_change_reason(review_req, descr)
138143
ReviewRequestDocEvent.objects.create(
139144
type="requested_review",
140145
doc=doc,
141146
rev=doc.rev,
142147
by=request.user.person,
143-
desc="Requested {} review by {}".format(review_req.type.name, review_req.team.acronym.upper()),
148+
desc=descr,
144149
time=review_req.time,
145150
review_request=review_req,
146151
state=None,
@@ -226,12 +231,17 @@ def review_request(request, name, request_id):
226231
if assignment.can_accept_reviewer_assignment:
227232
assignment.state = ReviewAssignmentStateName.objects.get(slug="accepted")
228233
assignment.save()
234+
update_change_reason(assignment, 'Assignment for {} accepted'.format(assignment.reviewer.person))
229235
return redirect(review_request, name=review_req.doc.name, request_id=review_req.pk)
230236

231237
wg_chairs = None
232238
if review_req.doc.group:
233239
wg_chairs = [role.person for role in review_req.doc.group.role_set.filter(name__slug='chair')]
234240

241+
history = list(review_req.history.all())
242+
history += itertools.chain(*[list(r.history.all()) for r in review_req.reviewassignment_set.all()])
243+
history.sort(key=lambda h: h.history_date, reverse=True)
244+
235245
return render(request, 'doc/review/review_request.html', {
236246
'doc': doc,
237247
'review_req': review_req,
@@ -241,6 +251,7 @@ def review_request(request, name, request_id):
241251
'can_edit_deadline': can_edit_deadline,
242252
'assignments': assignments,
243253
'wg_chairs': wg_chairs,
254+
'history': history,
244255
})
245256

246257

@@ -348,16 +359,18 @@ def reject_reviewer_assignment(request, name, assignment_id):
348359
review_assignment.state = ReviewAssignmentStateName.objects.get(slug="rejected")
349360
review_assignment.save()
350361

362+
descr = "Assignment of request for {} review by {} to {} was rejected".format(
363+
review_assignment.review_request.type.name,
364+
review_assignment.review_request.team.acronym.upper(),
365+
review_assignment.reviewer.person
366+
)
367+
update_change_reason(review_assignment, descr)
351368
ReviewAssignmentDocEvent.objects.create(
352369
type="closed_review_assignment",
353370
doc=review_assignment.review_request.doc,
354371
rev=review_assignment.review_request.doc.rev,
355372
by=request.user.person,
356-
desc="Assignment of request for {} review by {} to {} was rejected".format(
357-
review_assignment.review_request.type.name,
358-
review_assignment.review_request.team.acronym.upper(),
359-
review_assignment.reviewer.person,
360-
),
373+
desc=descr,
361374
review_assignment=review_assignment,
362375
state=review_assignment.state,
363376
)
@@ -393,17 +406,17 @@ def withdraw_reviewer_assignment(request, name, assignment_id):
393406
if request.method == "POST" and request.POST.get("action") == "withdraw":
394407
review_assignment.state_id = 'withdrawn'
395408
review_assignment.save()
396-
409+
descr = "Assignment of request for {} review by {} to {} was withdrawn".format(
410+
review_assignment.review_request.type.name,
411+
review_assignment.review_request.team.acronym.upper(),
412+
review_assignment.reviewer.person, )
413+
update_change_reason(review_assignment, descr)
397414
ReviewAssignmentDocEvent.objects.create(
398415
type="closed_review_assignment",
399416
doc=review_assignment.review_request.doc,
400417
rev=review_assignment.review_request.doc.rev,
401418
by=request.user.person,
402-
desc="Assignment of request for {} review by {} to {} was withdrawn".format(
403-
review_assignment.review_request.type.name,
404-
review_assignment.review_request.team.acronym.upper(),
405-
review_assignment.reviewer.person,
406-
),
419+
desc=descr,
407420
review_assignment=review_assignment,
408421
state=review_assignment.state,
409422
)
@@ -431,16 +444,17 @@ def mark_reviewer_assignment_no_response(request, name, assignment_id):
431444
review_assignment.state_id = 'no-response'
432445
review_assignment.save()
433446

447+
descr = "Assignment of request for {} review by {} to {} was marked no-response".format(
448+
review_assignment.review_request.type.name,
449+
review_assignment.review_request.team.acronym.upper(),
450+
review_assignment.reviewer.person)
451+
update_change_reason(review_assignment, descr)
434452
ReviewAssignmentDocEvent.objects.create(
435453
type="closed_review_assignment",
436454
doc=review_assignment.review_request.doc,
437455
rev=review_assignment.review_request.doc.rev,
438456
by=request.user.person,
439-
desc="Assignment of request for {} review by {} to {} was marked no-response".format(
440-
review_assignment.review_request.type.name,
441-
review_assignment.review_request.team.acronym.upper(),
442-
review_assignment.reviewer.person,
443-
),
457+
desc=descr,
444458
review_assignment=review_assignment,
445459
state=review_assignment.state,
446460
)
@@ -737,7 +751,7 @@ def complete_review(request, name, assignment_id=None, acronym=None):
737751
assignment.review = review
738752
assignment.completed_on = completion_datetime
739753
assignment.save()
740-
754+
741755
need_to_email_review = review_submission != "link" and assignment.review_request.team.list_email and not revising_review
742756

743757
submitted_on_different_date = completion_datetime.date() != datetime.date.today()
@@ -748,6 +762,7 @@ def complete_review(request, name, assignment_id=None, acronym=None):
748762
assignment.result.name,
749763
assignment.reviewer.person,
750764
)
765+
update_change_reason(assignment, desc)
751766
if need_to_email_review:
752767
desc += " " + "Sent review to list."
753768
if revising_review:

ietf/group/views.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@
9191
from ietf.meeting.utils import group_sessions
9292
from ietf.name.models import GroupTypeName, StreamName
9393
from ietf.person.models import Email
94-
from ietf.review.models import ReviewRequest, ReviewAssignment, ReviewerSettings, ReviewSecretarySettings
94+
from ietf.review.models import ReviewRequest, ReviewAssignment, ReviewerSettings, \
95+
ReviewSecretarySettings, UnavailablePeriod
9596
from ietf.review.utils import (can_manage_review_requests_for_team,
9697
can_access_review_stats_for_team,
9798

@@ -1754,6 +1755,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
17541755
period.team = group
17551756
period.person = reviewer
17561757
period.save()
1758+
update_change_reason(period, "Added unavailability period: {}".format(period))
17571759

17581760
today = datetime.date.today()
17591761

@@ -1794,6 +1796,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
17941796
for period in unavailable_periods:
17951797
if str(period.pk) == period_id:
17961798
period.delete()
1799+
update_change_reason(period, "Removed unavailability period: {}".format(period))
17971800

17981801
today = datetime.date.today()
17991802

@@ -1821,6 +1824,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
18211824
if not period.end_date and period.end_form.is_valid():
18221825
period.end_date = period.end_form.cleaned_data["end_date"]
18231826
period.save()
1827+
update_change_reason(period, "Set end date of unavailability period: {}".format(period))
18241828

18251829
msg = "Set end date of unavailable period: {} - {} ({})".format(
18261830
period.start_date.isoformat() if period.start_date else "indefinite",
@@ -1840,6 +1844,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
18401844
'settings_form': settings_form,
18411845
'period_form': period_form,
18421846
'unavailable_periods': unavailable_periods,
1847+
'unavailable_periods_history': UnavailablePeriod.history.filter(person=reviewer, team=group),
18431848
'reviewersettings': settings,
18441849
})
18451850

ietf/review/admin.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class ReviewSecretarySettingsAdmin(admin.ModelAdmin):
2727
raw_id_fields = ['team', 'person']
2828
admin.site.register(ReviewSecretarySettings, ReviewSecretarySettingsAdmin)
2929

30-
class UnavailablePeriodAdmin(admin.ModelAdmin):
30+
class UnavailablePeriodAdmin(simple_history.admin.SimpleHistoryAdmin):
3131
list_display = ["person", "team", "start_date", "end_date", "availability", "reason"]
3232
list_display_links = ["person"]
3333
list_filter = ["team"]
@@ -56,7 +56,7 @@ class NextReviewerInTeamAdmin(admin.ModelAdmin):
5656

5757
admin.site.register(NextReviewerInTeam, NextReviewerInTeamAdmin)
5858

59-
class ReviewRequestAdmin(admin.ModelAdmin):
59+
class ReviewRequestAdmin(simple_history.admin.SimpleHistoryAdmin):
6060
list_display = ["doc", "time", "type", "team", "deadline"]
6161
list_display_links = ["doc"]
6262
list_filter = ["team", "type", "state"]
@@ -67,7 +67,7 @@ class ReviewRequestAdmin(admin.ModelAdmin):
6767

6868
admin.site.register(ReviewRequest, ReviewRequestAdmin)
6969

70-
class ReviewAssignmentAdmin(admin.ModelAdmin):
70+
class ReviewAssignmentAdmin(simple_history.admin.SimpleHistoryAdmin):
7171
list_display = ["review_request", "reviewer", "assigned_on", "result"]
7272
list_filter = ["result", "state"]
7373
ordering = ["-id"]

0 commit comments

Comments
 (0)