55from __future__ import absolute_import , print_function , unicode_literals
66
77import io
8+ import itertools
89import json
910import os
1011import datetime
1112import requests
1213import email .utils
1314
1415from django .utils .http import is_safe_url
16+ from simple_history .utils import update_change_reason
1517
1618import debug # pyflakes:ignore
1719
2729
2830from 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 )
3234from ietf .person .models import Person
3335from ietf .review .models import ReviewRequest , ReviewAssignment , ReviewWish
3436from 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 :
0 commit comments