1010from ietf .name .models import ReviewRequestStateName
1111from ietf .group .models import Role
1212from ietf .review .models import ReviewRequest
13- from ietf .review .utils import active_review_teams , assign_review_request_to_reviewer
14- from ietf .review .utils import can_request_review_of_doc , can_manage_review_requests_for_team
13+ from ietf .review .utils import (active_review_teams , assign_review_request_to_reviewer ,
14+ can_request_review_of_doc , can_manage_review_requests_for_team ,
15+ email_about_review_request )
1516from ietf .utils .fields import DatepickerDateField
1617
1718class RequestReviewForm (forms .ModelForm ):
@@ -134,6 +135,7 @@ def withdraw_request(request, name, request_id):
134135 return HttpResponseForbidden ("You do not have permission to perform this action" )
135136
136137 if request .method == "POST" and request .POST .get ("action" ) == "withdraw" :
138+ prev_state = review_req .state
137139 review_req .state = ReviewRequestStateName .objects .get (slug = "withdrawn" )
138140 review_req .save ()
139141
@@ -144,9 +146,12 @@ def withdraw_request(request, name, request_id):
144146 desc = "Withdrew request for {} review by {}" .format (review_req .type .name , review_req .team .acronym .upper ()),
145147 )
146148
147- if review_req .state_id != "requested" :
148- # FIXME: handle this case - by emailing?
149- pass
149+ if prev_state .slug != "requested" :
150+ email_about_review_request (
151+ request , review_req ,
152+ "Withdrew review request for %s" % review_req .doc .name ,
153+ "Review request has been withdrawn by %s." % request .user .person ,
154+ by = request .user .person , notify_secretary = False , notify_reviewer = True )
150155
151156 return redirect (review_request , name = review_req .doc .name , request_id = review_req .pk )
152157
@@ -187,7 +192,7 @@ def assign_reviewer(request, name, request_id):
187192 form = AssignReviewerForm (review_req , request .POST )
188193 if form .is_valid ():
189194 reviewer = form .cleaned_data ["reviewer" ]
190- assign_review_request_to_reviewer (review_req , reviewer , request . user . person )
195+ assign_review_request_to_reviewer (request , review_req , reviewer )
191196
192197 return redirect (review_request , name = review_req .doc .name , request_id = review_req .pk )
193198 else :
@@ -216,35 +221,48 @@ def reject_reviewer_assignment(request, name, request_id):
216221 return HttpResponseForbidden ("You do not have permission to perform this action" )
217222
218223 if request .method == "POST" and request .POST .get ("action" ) == "reject" :
219- # reject the request
220- review_req .state = ReviewRequestStateName .objects .get (slug = "rejected" )
221- review_req .save ()
224+ form = RejectReviewerAssignmentForm (request .POST )
225+ if form .is_valid ():
226+ # reject the request
227+ review_req .state = ReviewRequestStateName .objects .get (slug = "rejected" )
228+ review_req .save ()
222229
223- DocEvent .objects .create (
224- type = "changed_review_request" ,
225- doc = review_req .doc ,
226- by = request .user .person ,
227- desc = "Assignment of request for {} review by {} to {} was rejected" .format (
228- review_req .type .name ,
229- review_req .team .acronym .upper (),
230- review_req .reviewer .person ,
231- ),
232- )
233-
234- # make a new unassigned review request
235- new_review_req = ReviewRequest .objects .create (
236- time = review_req .time ,
237- type = review_req .type ,
238- doc = review_req .doc ,
239- team = review_req .team ,
240- deadline = review_req .deadline ,
241- requested_rev = review_req .requested_rev ,
242- state = ReviewRequestStateName .objects .get (slug = "requested" ),
243- )
230+ DocEvent .objects .create (
231+ type = "changed_review_request" ,
232+ doc = review_req .doc ,
233+ by = request .user .person ,
234+ desc = "Assignment of request for {} review by {} to {} was rejected" .format (
235+ review_req .type .name ,
236+ review_req .team .acronym .upper (),
237+ review_req .reviewer .person ,
238+ ),
239+ )
240+
241+ # make a new unassigned review request
242+ new_review_req = ReviewRequest .objects .create (
243+ time = review_req .time ,
244+ type = review_req .type ,
245+ doc = review_req .doc ,
246+ team = review_req .team ,
247+ deadline = review_req .deadline ,
248+ requested_rev = review_req .requested_rev ,
249+ state = ReviewRequestStateName .objects .get (slug = "requested" ),
250+ )
251+
252+ msg = u"Reviewer assignment rejected by %s." % request .user .person
244253
245- return redirect (review_request , name = new_review_req .doc .name , request_id = new_review_req .pk )
254+ m = form .cleaned_data .get ("message_to_secretary" )
255+ if m :
256+ msg += "\n \n " + "Explanation:" + "\n " + m
257+
258+ email_about_review_request (request , review_req , "Reviewer assignment rejected" , msg , by = request .user .person , notify_secretary = True , notify_reviewer = True )
259+
260+ return redirect (review_request , name = new_review_req .doc .name , request_id = new_review_req .pk )
261+ else :
262+ form = RejectReviewerAssignmentForm ()
246263
247264 return render (request , 'doc/review/reject_reviewer_assignment.html' , {
248265 'doc' : doc ,
249266 'review_req' : review_req ,
267+ 'form' : form ,
250268 })
0 commit comments