1212from django .template import RequestContext
1313from django .template .loader import render_to_string
1414from django .utils import simplejson
15+ from django .utils .datastructures import SortedDict
1516from django .db .models import Count
1617from django .forms .models import modelformset_factory , inlineformset_factory
1718
@@ -327,6 +328,7 @@ def private_feedback_email(request, year):
327328 nomcom = nomcom )
328329 if form .is_valid ():
329330 form .save ()
331+ form = FeedbackEmailForm (nomcom = nomcom )
330332 message = ('success' , 'The feedback email has been registered.' )
331333
332334 return render_to_response (template ,
@@ -442,6 +444,7 @@ def view_feedback(request, year):
442444@nomcom_private_key_required
443445def view_feedback_pending (request , year ):
444446 nomcom = get_nomcom_by_year (year )
447+ extra_ids = None
445448 message = None
446449 for message in get_messages (request ):
447450 message = ('success' , message .message )
@@ -468,33 +471,56 @@ def view_feedback_pending(request, year):
468471 success (request , 'Feedback saved' )
469472 return HttpResponseRedirect (reverse ('nomcom_view_feedback_pending' , None , args = (year , )))
470473 elif request .method == 'POST' and request .POST .get ('end' ):
474+ extra_ids = request .POST .get ('extra_ids' , None )
471475 extra_step = True
472476 formset = FullFeedbackFormSet (request .POST )
473477 for form in formset .forms :
474478 form .set_nomcom (nomcom , request .user )
475479 if formset .is_valid ():
476480 formset .save ()
477- success (request , 'Feedback saved' )
478- return HttpResponseRedirect (reverse ('nomcom_view_feedback_pending' , None , args = (year , )))
481+ if extra_ids :
482+ extra = []
483+ for key in extra_ids .split (',' ):
484+ id , pk_type = key .split (':' )
485+ feedback = Feedback .objects .get (id = id )
486+ feedback .type_id = pk_type
487+ extra .append (feedback )
488+ formset = FullFeedbackFormSet (queryset = Feedback .objects .filter (id__in = [i .id for i in extra ]))
489+ for form in formset .forms :
490+ form .set_nomcom (nomcom , request .user , extra )
491+ extra_ids = None
492+ else :
493+ success (request , 'Feedback saved' )
494+ return HttpResponseRedirect (reverse ('nomcom_view_feedback_pending' , None , args = (year , )))
479495 elif request .method == 'POST' :
480496 formset = FeedbackFormSet (request .POST )
481497 for form in formset .forms :
482498 form .set_nomcom (nomcom , request .user )
483499 if formset .is_valid ():
484500 extra = []
501+ nominations = []
485502 moved = 0
486503 for form in formset .forms :
487504 if form .instance .type and form .instance .type .slug in settings .NOMINEE_FEEDBACK_TYPES :
488- extra .append (form .instance )
505+ if form .instance .type .slug == 'nomina' :
506+ nominations .append (form .instance )
507+ else :
508+ extra .append (form .instance )
489509 else :
490510 if form .instance .type :
491511 moved += 1
492512 form .save ()
493- if extra :
513+ if extra or nominations :
494514 extra_step = True
495- formset = FullFeedbackFormSet (queryset = Feedback .objects .filter (id__in = [i .id for i in extra ]))
496- for form in formset .forms :
497- form .set_nomcom (nomcom , request .user , extra )
515+ if nominations :
516+ formset = FullFeedbackFormSet (queryset = Feedback .objects .filter (id__in = [i .id for i in nominations ]))
517+ for form in formset .forms :
518+ form .set_nomcom (nomcom , request .user , nominations )
519+ extra_ids = ',' .join (['%s:%s' % (i .id , i .type .pk ) for i in extra ])
520+ else :
521+ formset = FullFeedbackFormSet (queryset = Feedback .objects .filter (id__in = [i .id for i in extra ]))
522+ for form in formset .forms :
523+ form .set_nomcom (nomcom , request .user , extra )
498524 if moved :
499525 message = ('success' , '%s messages classified. You must enter more information for the following feedback.' % moved )
500526 else :
@@ -504,13 +530,24 @@ def view_feedback_pending(request, year):
504530 formset = FeedbackFormSet (queryset = feedbacks )
505531 for form in formset .forms :
506532 form .set_nomcom (nomcom , request .user )
533+ type_dict = SortedDict ({})
534+ for t in FeedbackType .objects .all ().order_by ('pk' ):
535+ rest = t .name
536+ slug = rest [0 ]
537+ rest = rest [1 :]
538+ while slug in type_dict and rest :
539+ slug = rest [0 ]
540+ rest = rest [1 ]
541+ type_dict [slug ] = t
507542 return render_to_response ('nomcom/view_feedback_pending.html' ,
508543 {'year' : year ,
509- 'selected' : 'view_feedback ' ,
544+ 'selected' : 'feedback_pending ' ,
510545 'formset' : formset ,
511546 'message' : message ,
512547 'extra_step' : extra_step ,
513548 'default_type' : default_type ,
549+ 'type_dict' : type_dict ,
550+ 'extra_ids' : extra_ids ,
514551 'types' : FeedbackType .objects .all ().order_by ('pk' ),
515552 'nomcom' : nomcom }, RequestContext (request ))
516553
0 commit comments