@@ -200,6 +200,7 @@ def review_request(request, name, request_id):
200200 and (is_reviewer or can_manage_request ))
201201
202202 can_edit_comment = can_request_review_of_doc (request .user , doc )
203+ can_edit_deadline = can_edit_comment
203204
204205 if request .method == "POST" and request .POST .get ("action" ) == "accept" and can_accept_reviewer_assignment :
205206 review_req .state = ReviewRequestStateName .objects .get (slug = "accepted" )
@@ -216,6 +217,7 @@ def review_request(request, name, request_id):
216217 'can_accept_reviewer_assignment' : can_accept_reviewer_assignment ,
217218 'can_complete_review' : can_complete_review ,
218219 'can_edit_comment' : can_edit_comment ,
220+ 'can_edit_deadline' : can_edit_deadline ,
219221 })
220222
221223
@@ -684,3 +686,45 @@ def edit_comment(request, name, request_id):
684686 'review_req' : review_req ,
685687 'form' : form ,
686688 })
689+
690+ class EditReviewRequestDeadlineForm (forms .ModelForm ):
691+ deadline = DatepickerDateField (date_format = "yyyy-mm-dd" , picker_settings = { "autoclose" : "1" , "start-date" : "+0d" })
692+ class Meta :
693+ fields = ['deadline' ,]
694+ model = ReviewRequest
695+
696+ def clean_deadline (self ):
697+ v = self .cleaned_data .get ('deadline' )
698+ if v < datetime .date .today ():
699+ raise forms .ValidationError ("Select today or a date in the future." )
700+ return v
701+
702+
703+ def edit_deadline (request , name , request_id ):
704+ review_req = get_object_or_404 (ReviewRequest , pk = request_id )
705+ if not can_request_review_of_doc (request .user , review_req .doc ):
706+ return HttpResponseForbidden ("You do not have permission to perform this action" )
707+
708+ old_deadline = review_req .deadline
709+
710+ if request .method == "POST" :
711+ form = EditReviewRequestDeadlineForm (request .POST , instance = review_req )
712+ if form .is_valid ():
713+ if form .cleaned_data ['deadline' ] != old_deadline :
714+ form .save ()
715+ subject = "Deadline changed: {} {} review of {}-{}" .format (review_req .team .acronym .capitalize (),review_req .type .name .lower (), review_req .doc .name , review_req .reviewed_rev )
716+ msg = render_to_string ("review/deadline_changed.txt" , {
717+ "review_req" : review_req ,
718+ "old_deadline" : old_deadline ,
719+ "by" : request .user .person ,
720+ })
721+ email_review_request_change (request , review_req , subject , msg , request .user .person , notify_secretary = True , notify_reviewer = True , notify_requested_by = True )
722+
723+ return redirect (review_request , name = review_req .doc .name , request_id = review_req .pk )
724+ else :
725+ form = EditReviewRequestDeadlineForm (instance = review_req )
726+
727+ return render (request , 'doc/review/edit_request_deadline.html' , {
728+ 'review_req' : review_req ,
729+ 'form' : form ,
730+ })
0 commit comments