@@ -364,6 +364,81 @@ def reject_reviewer_assignment(request, name, assignment_id):
364364 'form' : form ,
365365 })
366366
367+ @login_required
368+ def withdraw_reviewer_assignment (request , name , assignment_id ):
369+ get_object_or_404 (Document , name = name )
370+ review_assignment = get_object_or_404 (ReviewAssignment , pk = assignment_id , state__in = ["assigned" , "accepted" ])
371+
372+ can_manage_request = can_manage_review_requests_for_team (request .user , review_assignment .review_request .team )
373+ if not can_manage_request :
374+ return HttpResponseForbidden ("You do not have permission to perform this action" )
375+
376+ if request .method == "POST" and request .POST .get ("action" ) == "withdraw" :
377+ review_assignment .state_id = 'withdrawn'
378+ review_assignment .save ()
379+
380+ ReviewAssignmentDocEvent .objects .create (
381+ type = "closed_review_request" ,
382+ doc = review_assignment .review_request .doc ,
383+ rev = review_assignment .review_request .doc .rev ,
384+ by = request .user .person ,
385+ desc = "Assignment of request for {} review by {} to {} was withdrawn" .format (
386+ review_assignment .review_request .type .name ,
387+ review_assignment .review_request .team .acronym .upper (),
388+ review_assignment .reviewer .person ,
389+ ),
390+ review_assignment = review_assignment ,
391+ state = review_assignment .state ,
392+ )
393+
394+ msg = "Review assignment withdrawn by %s" % request .user .person
395+
396+ email_review_assignment_change (request , review_assignment , "Reviewer assignment withdrawn" , msg , by = request .user .person , notify_secretary = True , notify_reviewer = True , notify_requested_by = False )
397+
398+ return redirect (review_request , name = review_assignment .review_request .doc .name , request_id = review_assignment .review_request .pk )
399+
400+ return render (request , 'doc/review/withdraw_reviewer_assignment.html' , {
401+ 'assignment' : review_assignment ,
402+ })
403+
404+ @login_required
405+ def mark_reviewer_assignment_no_response (request , name , assignment_id ):
406+ get_object_or_404 (Document , name = name )
407+ review_assignment = get_object_or_404 (ReviewAssignment , pk = assignment_id , state__in = ["assigned" , "accepted" ])
408+
409+ can_manage_request = can_manage_review_requests_for_team (request .user , review_assignment .review_request .team )
410+ if not can_manage_request :
411+ return HttpResponseForbidden ("You do not have permission to perform this action" )
412+
413+ if request .method == "POST" and request .POST .get ("action" ) == "noresponse" :
414+ review_assignment .state_id = 'no-response'
415+ review_assignment .save ()
416+
417+ ReviewAssignmentDocEvent .objects .create (
418+ type = "closed_review_request" ,
419+ doc = review_assignment .review_request .doc ,
420+ rev = review_assignment .review_request .doc .rev ,
421+ by = request .user .person ,
422+ desc = "Assignment of request for {} review by {} to {} was marked no-response" .format (
423+ review_assignment .review_request .type .name ,
424+ review_assignment .review_request .team .acronym .upper (),
425+ review_assignment .reviewer .person ,
426+ ),
427+ review_assignment = review_assignment ,
428+ state = review_assignment .state ,
429+ )
430+
431+ msg = "Review assignment marked 'No Response' by %s" % request .user .person
432+
433+ email_review_assignment_change (request , review_assignment , "Reviewer assignment marked no-response" , msg , by = request .user .person , notify_secretary = True , notify_reviewer = True , notify_requested_by = False )
434+
435+ return redirect (review_request , name = review_assignment .review_request .doc .name , request_id = review_assignment .review_request .pk )
436+
437+ return render (request , 'doc/review/mark_reviewer_assignment_no_response.html' , {
438+ 'assignment' : review_assignment ,
439+ })
440+
441+
367442class CompleteReviewForm (forms .Form ):
368443 state = forms .ModelChoiceField (queryset = ReviewAssignmentStateName .objects .filter (slug__in = ("completed" , "part-completed" )).order_by ("-order" ), widget = forms .RadioSelect , initial = "completed" )
369444 reviewed_rev = forms .CharField (label = "Reviewed revision" , max_length = 4 )
0 commit comments