1111from django .shortcuts import render_to_response
1212from django .template .context import RequestContext
1313from django .contrib .sites .models import Site
14+ from django .contrib .admin .widgets import FilteredSelectMultiple
1415
1516from ietf .dbtemplate .forms import DBTemplateForm
1617from ietf .utils import unaccent
@@ -43,6 +44,35 @@ def get_list(string):
4344 return map (unicode .strip , string .replace ('\r \n ' , '' ).split (',' ))
4445
4546
47+ class PositionNomineeField (forms .ChoiceField ):
48+
49+ def __init__ (self , * args , ** kwargs ):
50+ self .nomcom = kwargs .pop ('nomcom' )
51+ positions = Position .objects .get_by_nomcom (self .nomcom ).opened ().order_by ('name' )
52+ results = []
53+ for position in positions :
54+ nominees = [('%s_%s' % (position .id , i .id ), unicode (i )) for i in Nominee .objects .get_by_nomcom (self .nomcom ).filter (nominee_position = position )]
55+ if nominees :
56+ results .append ((position .name , nominees ))
57+ kwargs ['choices' ] = results
58+ super (PositionNomineeField , self ).__init__ (* args , ** kwargs )
59+
60+ def clean (self , value ):
61+ nominee = super (PositionNomineeField , self ).clean (value )
62+ if not nominee :
63+ return nominee
64+ (position_id , nominee_id ) = nominee .split ('_' )
65+ try :
66+ position = Position .objects .get_by_nomcom (self .nomcom ).opened ().get (id = position_id )
67+ except Position .DoesNotExist :
68+ raise forms .ValidationError ('Invalid nominee' )
69+ try :
70+ nominee = position .nominee_set .get_by_nomcom (self .nomcom ).get (id = nominee_id )
71+ except Nominee .DoesNotExist :
72+ raise forms .ValidationError ('Invalid nominee' )
73+ return (position , nominee )
74+
75+
4676class BaseNomcomForm (object ):
4777 def __unicode__ (self ):
4878 return self .as_div ()
@@ -604,20 +634,22 @@ class Media:
604634
605635class QuestionnaireForm (BaseNomcomForm , forms .ModelForm ):
606636
607- comments = forms .CharField (label = 'Comments on this candidate' ,
637+ comments = forms .CharField (label = 'Questionnaire on this candidate' ,
608638 widget = forms .Textarea ())
609- fieldsets = [('Provide questionnaires' , ('nominees' ,
610- 'positions' ,
639+ fieldsets = [('Provide questionnaires' , ('nominee' ,
611640 'comments' ))]
612641
613642 def __init__ (self , * args , ** kwargs ):
614643 self .nomcom = kwargs .pop ('nomcom' , None )
615644 self .user = kwargs .pop ('user' , None )
616645
617646 super (QuestionnaireForm , self ).__init__ (* args , ** kwargs )
647+ self .fields ['nominee' ] = PositionNomineeField (nomcom = self .nomcom , required = True )
648+
618649
619650 def save (self , commit = True ):
620651 feedback = super (QuestionnaireForm , self ).save (commit = False )
652+ (position , nominee ) = self .cleaned_data ['nominee' ]
621653
622654 author = get_user_email (self .user )
623655
@@ -629,16 +661,26 @@ def save(self, commit=True):
629661 feedback .type = FeedbackType .objects .get (slug = 'questio' )
630662 feedback .save ()
631663 self .save_m2m ()
664+ feedback .nominees .add (nominee )
665+ feedback .positions .add (position )
632666
633667 class Meta :
634668 model = Feedback
635- fields = ('nominees ' ,
669+ fields = ('nominee ' ,
636670 'positions' ,
637671 'comments' )
638672
639673 class Media :
640- js = ("/js/jquery-1.5.1.min.js" ,
641- "/js/nomcom.js" , )
674+ admin_js = ['js/core.js' ,
675+ "js/jquery.js" ,
676+ "js/jquery.init.js" ,
677+ 'js/admin/RelatedObjectLookups.js' ,
678+ "js/getElementsBySelector.js" ,
679+ 'js/SelectBox.js' ,
680+ 'js/SelectFilter2.js' ,
681+ ]
682+ admin_js = ['%s%s' % (settings .ADMIN_MEDIA_PREFIX , url ) for url in admin_js ]
683+ js = ["/js/jquery-1.5.1.min.js" , "/js/nomcom.js" ] + admin_js
642684
643685
644686class NomComTemplateForm (BaseNomcomForm , DBTemplateForm ):
0 commit comments