1010from django .core .urlresolvers import reverse as urlreverse
1111
1212from ietf .doc .models import Document , NewRevisionDocEvent , DocEvent , State , DocAlias , LastCallDocEvent
13- from ietf .ietfauth .utils import is_authorized_in_doc_stream , user_is_person , has_role
1413from ietf .name .models import ReviewRequestStateName , ReviewResultName , DocTypeName
1514from ietf .review .models import ReviewRequest
15+ from ietf .group .models import Group
1616from ietf .person .fields import PersonEmailChoiceField , SearchablePersonField
17+ from ietf .ietfauth .utils import is_authorized_in_doc_stream , user_is_person , has_role
1718from ietf .review .utils import (active_review_teams , assign_review_request_to_reviewer ,
1819 can_request_review_of_doc , can_manage_review_requests_for_team ,
1920 email_review_request_change , make_new_review_request_from_existing ,
@@ -35,12 +36,13 @@ def clean_doc_revision(doc, rev):
3536 return rev
3637
3738class RequestReviewForm (forms .ModelForm ):
39+ team = forms .ModelMultipleChoiceField (queryset = Group .objects .all (), widget = forms .CheckboxSelectMultiple )
3840 deadline_date = DatepickerDateField (date_format = "yyyy-mm-dd" , picker_settings = { "autoclose" : "1" , "start-date" : "+0d" })
3941 deadline_time = forms .TimeField (widget = forms .TextInput (attrs = { 'placeholder' : "HH:MM" }), help_text = "If time is not specified, end of day is assumed" , required = False )
4042
4143 class Meta :
4244 model = ReviewRequest
43- fields = ('requested_by' , 'type' , 'team' , ' deadline' , 'requested_rev' )
45+ fields = ('requested_by' , 'type' , 'deadline' , 'requested_rev' )
4446
4547 def __init__ (self , user , doc , * args , ** kwargs ):
4648 super (RequestReviewForm , self ).__init__ (* args , ** kwargs )
@@ -54,8 +56,8 @@ def __init__(self, user, doc, *args, **kwargs):
5456 f .queryset = active_review_teams ()
5557 if not is_authorized_in_doc_stream (user , doc ): # user is a reviewer
5658 f .queryset = f .queryset .filter (role__name = "reviewer" , role__person__user = user )
57- if len ( f . queryset ) < 6 :
58- f . widget = forms . RadioSelect ( choices = [ t for t in f .choices if t [ 0 ]])
59+
60+ f . initial = [ group . pk for group in f .queryset if can_manage_review_requests_for_team ( user , group , allow_non_team_personnel = False )]
5961
6062 self .fields ["deadline" ].required = False
6163 self .fields ["requested_rev" ].label = "Document revision"
@@ -69,7 +71,7 @@ def __init__(self, user, doc, *args, **kwargs):
6971 def clean_deadline_date (self ):
7072 v = self .cleaned_data .get ('deadline_date' )
7173 if v < datetime .date .today ():
72- raise forms .ValidationError ("Select a future date." )
74+ raise forms .ValidationError ("Select today or a date in the future ." )
7375 return v
7476
7577 def clean_requested_rev (self ):
@@ -98,18 +100,21 @@ def request_review(request, name):
98100 form = RequestReviewForm (request .user , doc , request .POST )
99101
100102 if form .is_valid ():
101- review_req = form .save (commit = False )
102- review_req .doc = doc
103- review_req .state = ReviewRequestStateName .objects .get (slug = "requested" , used = True )
104- review_req .save ()
105-
106- DocEvent .objects .create (
107- type = "requested_review" ,
108- doc = doc ,
109- by = request .user .person ,
110- desc = "Requested {} review by {}" .format (review_req .type .name , review_req .team .acronym .upper ()),
111- time = review_req .time ,
112- )
103+ teams = form .cleaned_data ["team" ]
104+ for team in teams :
105+ review_req = form .save (commit = False )
106+ review_req .doc = doc
107+ review_req .state = ReviewRequestStateName .objects .get (slug = "requested" , used = True )
108+ review_req .team = team
109+ review_req .save ()
110+
111+ DocEvent .objects .create (
112+ type = "requested_review" ,
113+ doc = doc ,
114+ by = request .user .person ,
115+ desc = "Requested {} review by {}" .format (review_req .type .name , review_req .team .acronym .upper ()),
116+ time = review_req .time ,
117+ )
113118
114119 return redirect ('doc_view' , name = doc .name )
115120
0 commit comments