Skip to content

Commit 7ec0955

Browse files
committed
Merged in [17069] from sasha@dashcare.nl:
Fix ietf-tools#2074, fix ietf-tools#2358 - Add history for assignments, requests and unavailability. - Legacy-Id: 17104 Note: SVN reference [17069] has been migrated to Git commit 65d8415
2 parents 47c3afc + 65d8415 commit 7ec0955

File tree

9 files changed

+393
-30
lines changed

9 files changed

+393
-30
lines changed

ietf/doc/views_review.py

Lines changed: 34 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

@@ -27,8 +29,8 @@
2729

2830
from ietf.doc.models import (Document, NewRevisionDocEvent, State, DocAlias,
2931
LastCallDocEvent, ReviewRequestDocEvent, ReviewAssignmentDocEvent, DocumentAuthor)
30-
from ietf.name.models import ReviewRequestStateName, ReviewAssignmentStateName, ReviewResultName, \
31-
DocTypeName, ReviewTypeName
32+
from ietf.name.models import (ReviewRequestStateName, ReviewAssignmentStateName, ReviewResultName,
33+
DocTypeName, ReviewTypeName)
3234
from ietf.person.models import Person
3335
from ietf.review.models import ReviewRequest, ReviewAssignment, ReviewWish
3436
from ietf.group.models import Group
@@ -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,
@@ -228,12 +233,17 @@ def review_request(request, name, request_id):
228233
if assignment.can_accept_reviewer_assignment:
229234
assignment.state = ReviewAssignmentStateName.objects.get(slug="accepted")
230235
assignment.save()
236+
update_change_reason(assignment, 'Assignment for {} accepted'.format(assignment.reviewer.person))
231237
return redirect(review_request, name=review_req.doc.name, request_id=review_req.pk)
232238

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

243+
history = list(review_req.history.all())
244+
history += itertools.chain(*[list(r.history.all()) for r in review_req.reviewassignment_set.all()])
245+
history.sort(key=lambda h: h.history_date, reverse=True)
246+
237247
return render(request, 'doc/review/review_request.html', {
238248
'doc': doc,
239249
'review_req': review_req,
@@ -243,6 +253,7 @@ def review_request(request, name, request_id):
243253
'can_edit_deadline': can_edit_deadline,
244254
'assignments': assignments,
245255
'wg_chairs': wg_chairs,
256+
'history': history,
246257
})
247258

248259

@@ -351,16 +362,18 @@ def reject_reviewer_assignment(request, name, assignment_id):
351362
review_assignment.completed_on = datetime.datetime.now()
352363
review_assignment.save()
353364

365+
descr = "Assignment of request for {} review by {} to {} was rejected".format(
366+
review_assignment.review_request.type.name,
367+
review_assignment.review_request.team.acronym.upper(),
368+
review_assignment.reviewer.person
369+
)
370+
update_change_reason(review_assignment, descr)
354371
ReviewAssignmentDocEvent.objects.create(
355372
type="closed_review_assignment",
356373
doc=review_assignment.review_request.doc,
357374
rev=review_assignment.review_request.doc.rev,
358375
by=request.user.person,
359-
desc="Assignment of request for {} review by {} to {} was rejected".format(
360-
review_assignment.review_request.type.name,
361-
review_assignment.review_request.team.acronym.upper(),
362-
review_assignment.reviewer.person,
363-
),
376+
desc=descr,
364377
review_assignment=review_assignment,
365378
state=review_assignment.state,
366379
)
@@ -397,16 +410,17 @@ def withdraw_reviewer_assignment(request, name, assignment_id):
397410
review_assignment.state_id = 'withdrawn'
398411
review_assignment.save()
399412

413+
descr = "Assignment of request for {} review by {} to {} was withdrawn".format(
414+
review_assignment.review_request.type.name,
415+
review_assignment.review_request.team.acronym.upper(),
416+
review_assignment.reviewer.person, )
417+
update_change_reason(review_assignment, descr)
400418
ReviewAssignmentDocEvent.objects.create(
401419
type="closed_review_assignment",
402420
doc=review_assignment.review_request.doc,
403421
rev=review_assignment.review_request.doc.rev,
404422
by=request.user.person,
405-
desc="Assignment of request for {} review by {} to {} was withdrawn".format(
406-
review_assignment.review_request.type.name,
407-
review_assignment.review_request.team.acronym.upper(),
408-
review_assignment.reviewer.person,
409-
),
423+
desc=descr,
410424
review_assignment=review_assignment,
411425
state=review_assignment.state,
412426
)
@@ -434,16 +448,17 @@ def mark_reviewer_assignment_no_response(request, name, assignment_id):
434448
review_assignment.state_id = 'no-response'
435449
review_assignment.save()
436450

451+
descr = "Assignment of request for {} review by {} to {} was marked no-response".format(
452+
review_assignment.review_request.type.name,
453+
review_assignment.review_request.team.acronym.upper(),
454+
review_assignment.reviewer.person)
455+
update_change_reason(review_assignment, descr)
437456
ReviewAssignmentDocEvent.objects.create(
438457
type="closed_review_assignment",
439458
doc=review_assignment.review_request.doc,
440459
rev=review_assignment.review_request.doc.rev,
441460
by=request.user.person,
442-
desc="Assignment of request for {} review by {} to {} was marked no-response".format(
443-
review_assignment.review_request.type.name,
444-
review_assignment.review_request.team.acronym.upper(),
445-
review_assignment.reviewer.person,
446-
),
461+
desc=descr,
447462
review_assignment=review_assignment,
448463
state=review_assignment.state,
449464
)
@@ -751,6 +766,7 @@ def complete_review(request, name, assignment_id=None, acronym=None):
751766
assignment.result.name,
752767
assignment.reviewer.person,
753768
)
769+
update_change_reason(assignment, desc)
754770
if need_to_email_review:
755771
desc += " " + "Sent review to list."
756772
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

@@ -1773,6 +1774,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
17731774
period.team = group
17741775
period.person = reviewer
17751776
period.save()
1777+
update_change_reason(period, "Added unavailability period: {}".format(period))
17761778

17771779
today = datetime.date.today()
17781780

@@ -1813,6 +1815,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
18131815
for period in unavailable_periods:
18141816
if str(period.pk) == period_id:
18151817
period.delete()
1818+
update_change_reason(period, "Removed unavailability period: {}".format(period))
18161819

18171820
today = datetime.date.today()
18181821

@@ -1840,6 +1843,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
18401843
if not period.end_date and period.end_form.is_valid():
18411844
period.end_date = period.end_form.cleaned_data["end_date"]
18421845
period.save()
1846+
update_change_reason(period, "Set end date of unavailability period: {}".format(period))
18431847

18441848
msg = "Set end date of unavailable period: {} - {} ({})".format(
18451849
period.start_date.isoformat() if period.start_date else "indefinite",
@@ -1859,6 +1863,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
18591863
'settings_form': settings_form,
18601864
'period_form': period_form,
18611865
'unavailable_periods': unavailable_periods,
1866+
'unavailable_periods_history': UnavailablePeriod.history.filter(person=reviewer, team=group),
18621867
'reviewersettings': settings,
18631868
})
18641869

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)