@@ -190,14 +190,27 @@ class MultiplePatchForm(forms.Form):
190
190
empty_value = '*' ,
191
191
)
192
192
193
- def __init__ (self , project , * args , ** kwargs ):
193
+ def __init__ (self , project , user = None , * args , ** kwargs ):
194
194
super (MultiplePatchForm , self ).__init__ (* args , ** kwargs )
195
195
self .fields ['delegate' ] = OptionalModelChoiceField (
196
196
queryset = _get_delegate_qs (project = project ), required = False
197
197
)
198
198
self .fields ['state' ] = OptionalModelChoiceField (
199
199
queryset = State .objects .all ()
200
200
)
201
+ self .user = user
202
+ if self .user :
203
+ self .fields ['declare_interest' ] = OptionalBooleanField (
204
+ choices = [
205
+ ('*' , 'no change' ),
206
+ ('True' , 'Interested' ),
207
+ ('False' , 'Not interested' ),
208
+ ],
209
+ coerce = lambda x : x == 'True' ,
210
+ empty_value = '*' ,
211
+ required = False ,
212
+ initial = '*' ,
213
+ )
201
214
202
215
def save (self , instance , commit = True ):
203
216
opts = instance .__class__ ._meta
@@ -219,8 +232,27 @@ def save(self, instance, commit=True):
219
232
if field .is_no_change (data [f .name ]):
220
233
continue
221
234
235
+ if f .name == 'declare_interest' :
236
+ if data [f .name ]:
237
+ self .instance .interested_users .add (self .user )
238
+ else :
239
+ self .instance .interested_users .remove (self .user )
240
+ continue
241
+
222
242
setattr (instance , f .name , data [f .name ])
223
243
224
244
if commit :
225
245
instance .save ()
226
246
return instance
247
+
248
+ def declare_interest_only (self ):
249
+ interest_only = True
250
+ field_names = set (self .fields .keys ())
251
+ field_names .discard ({'declare_interest' , 'action' })
252
+
253
+ for field_name in field_names :
254
+ data = self .data .get (field_name , '*' )
255
+ if data != '*' :
256
+ interest_only = False
257
+
258
+ return interest_only
0 commit comments