Skip to content

Commit

Permalink
Merged in [17069] from [email protected]:
Browse files Browse the repository at this point in the history
    Fix #2074, fix #2358 - Add history for assignments, requests and unavailability.
 - Legacy-Id: 17104
Note: SVN reference [17069] has been migrated to Git commit 65d8415
  • Loading branch information
levkowetz committed Nov 26, 2019
2 parents 47c3afc + 65d8415 commit 7ec0955
Show file tree
Hide file tree
Showing 9 changed files with 393 additions and 30 deletions.
52 changes: 34 additions & 18 deletions ietf/doc/views_review.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@
from __future__ import absolute_import, print_function, unicode_literals

import io
import itertools
import json
import os
import datetime
import requests
import email.utils

from django.utils.http import is_safe_url
from simple_history.utils import update_change_reason

import debug # pyflakes:ignore

Expand All @@ -27,8 +29,8 @@

from ietf.doc.models import (Document, NewRevisionDocEvent, State, DocAlias,
LastCallDocEvent, ReviewRequestDocEvent, ReviewAssignmentDocEvent, DocumentAuthor)
from ietf.name.models import ReviewRequestStateName, ReviewAssignmentStateName, ReviewResultName, \
DocTypeName, ReviewTypeName
from ietf.name.models import (ReviewRequestStateName, ReviewAssignmentStateName, ReviewResultName,
DocTypeName, ReviewTypeName)
from ietf.person.models import Person
from ietf.review.models import ReviewRequest, ReviewAssignment, ReviewWish
from ietf.group.models import Group
Expand Down Expand Up @@ -135,12 +137,15 @@ def request_review(request, name):
review_req.team = team
review_req.save()

descr = "Requested {} review by {}".format(review_req.type.name,
review_req.team.acronym.upper())
update_change_reason(review_req, descr)
ReviewRequestDocEvent.objects.create(
type="requested_review",
doc=doc,
rev=doc.rev,
by=request.user.person,
desc="Requested {} review by {}".format(review_req.type.name, review_req.team.acronym.upper()),
desc=descr,
time=review_req.time,
review_request=review_req,
state=None,
Expand Down Expand Up @@ -228,12 +233,17 @@ def review_request(request, name, request_id):
if assignment.can_accept_reviewer_assignment:
assignment.state = ReviewAssignmentStateName.objects.get(slug="accepted")
assignment.save()
update_change_reason(assignment, 'Assignment for {} accepted'.format(assignment.reviewer.person))
return redirect(review_request, name=review_req.doc.name, request_id=review_req.pk)

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

history = list(review_req.history.all())
history += itertools.chain(*[list(r.history.all()) for r in review_req.reviewassignment_set.all()])
history.sort(key=lambda h: h.history_date, reverse=True)

return render(request, 'doc/review/review_request.html', {
'doc': doc,
'review_req': review_req,
Expand All @@ -243,6 +253,7 @@ def review_request(request, name, request_id):
'can_edit_deadline': can_edit_deadline,
'assignments': assignments,
'wg_chairs': wg_chairs,
'history': history,
})


Expand Down Expand Up @@ -351,16 +362,18 @@ def reject_reviewer_assignment(request, name, assignment_id):
review_assignment.completed_on = datetime.datetime.now()
review_assignment.save()

descr = "Assignment of request for {} review by {} to {} was rejected".format(
review_assignment.review_request.type.name,
review_assignment.review_request.team.acronym.upper(),
review_assignment.reviewer.person
)
update_change_reason(review_assignment, descr)
ReviewAssignmentDocEvent.objects.create(
type="closed_review_assignment",
doc=review_assignment.review_request.doc,
rev=review_assignment.review_request.doc.rev,
by=request.user.person,
desc="Assignment of request for {} review by {} to {} was rejected".format(
review_assignment.review_request.type.name,
review_assignment.review_request.team.acronym.upper(),
review_assignment.reviewer.person,
),
desc=descr,
review_assignment=review_assignment,
state=review_assignment.state,
)
Expand Down Expand Up @@ -397,16 +410,17 @@ def withdraw_reviewer_assignment(request, name, assignment_id):
review_assignment.state_id = 'withdrawn'
review_assignment.save()

descr = "Assignment of request for {} review by {} to {} was withdrawn".format(
review_assignment.review_request.type.name,
review_assignment.review_request.team.acronym.upper(),
review_assignment.reviewer.person, )
update_change_reason(review_assignment, descr)
ReviewAssignmentDocEvent.objects.create(
type="closed_review_assignment",
doc=review_assignment.review_request.doc,
rev=review_assignment.review_request.doc.rev,
by=request.user.person,
desc="Assignment of request for {} review by {} to {} was withdrawn".format(
review_assignment.review_request.type.name,
review_assignment.review_request.team.acronym.upper(),
review_assignment.reviewer.person,
),
desc=descr,
review_assignment=review_assignment,
state=review_assignment.state,
)
Expand Down Expand Up @@ -434,16 +448,17 @@ def mark_reviewer_assignment_no_response(request, name, assignment_id):
review_assignment.state_id = 'no-response'
review_assignment.save()

descr = "Assignment of request for {} review by {} to {} was marked no-response".format(
review_assignment.review_request.type.name,
review_assignment.review_request.team.acronym.upper(),
review_assignment.reviewer.person)
update_change_reason(review_assignment, descr)
ReviewAssignmentDocEvent.objects.create(
type="closed_review_assignment",
doc=review_assignment.review_request.doc,
rev=review_assignment.review_request.doc.rev,
by=request.user.person,
desc="Assignment of request for {} review by {} to {} was marked no-response".format(
review_assignment.review_request.type.name,
review_assignment.review_request.team.acronym.upper(),
review_assignment.reviewer.person,
),
desc=descr,
review_assignment=review_assignment,
state=review_assignment.state,
)
Expand Down Expand Up @@ -751,6 +766,7 @@ def complete_review(request, name, assignment_id=None, acronym=None):
assignment.result.name,
assignment.reviewer.person,
)
update_change_reason(assignment, desc)
if need_to_email_review:
desc += " " + "Sent review to list."
if revising_review:
Expand Down
7 changes: 6 additions & 1 deletion ietf/group/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,8 @@
from ietf.meeting.utils import group_sessions
from ietf.name.models import GroupTypeName, StreamName
from ietf.person.models import Email
from ietf.review.models import ReviewRequest, ReviewAssignment, ReviewerSettings, ReviewSecretarySettings
from ietf.review.models import (ReviewRequest, ReviewAssignment, ReviewerSettings,
ReviewSecretarySettings, UnavailablePeriod )
from ietf.review.utils import (can_manage_review_requests_for_team,
can_access_review_stats_for_team,

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

today = datetime.date.today()

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

today = datetime.date.today()

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

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

Expand Down
6 changes: 3 additions & 3 deletions ietf/review/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class ReviewSecretarySettingsAdmin(admin.ModelAdmin):
raw_id_fields = ['team', 'person']
admin.site.register(ReviewSecretarySettings, ReviewSecretarySettingsAdmin)

class UnavailablePeriodAdmin(admin.ModelAdmin):
class UnavailablePeriodAdmin(simple_history.admin.SimpleHistoryAdmin):
list_display = ["person", "team", "start_date", "end_date", "availability", "reason"]
list_display_links = ["person"]
list_filter = ["team"]
Expand Down Expand Up @@ -56,7 +56,7 @@ class NextReviewerInTeamAdmin(admin.ModelAdmin):

admin.site.register(NextReviewerInTeam, NextReviewerInTeamAdmin)

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

admin.site.register(ReviewRequest, ReviewRequestAdmin)

class ReviewAssignmentAdmin(admin.ModelAdmin):
class ReviewAssignmentAdmin(simple_history.admin.SimpleHistoryAdmin):
list_display = ["review_request", "reviewer", "assigned_on", "result"]
list_filter = ["result", "state"]
ordering = ["-id"]
Expand Down
Loading

0 comments on commit 7ec0955

Please sign in to comment.