From 6898c514909f720a8f5b36e3d7cb7e7e65bfb1f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20A=2E=20S=C3=A1nchez=20L=C3=B3pez?= Date: Fri, 19 Apr 2013 07:46:23 +0000 Subject: [PATCH] Merge position and nominee into one field in the feedback pending forms. Style the feedback pending forms. See #975 - Legacy-Id: 5668 --- ietf/nomcom/forms.py | 49 +++++++++++++++++++ ietf/nomcom/views.py | 10 +++- .../nomcom/view_feedback_pending.html | 37 +++++++++++--- 3 files changed, 88 insertions(+), 8 deletions(-) diff --git a/ietf/nomcom/forms.py b/ietf/nomcom/forms.py index 98e6a137c..dfb842626 100644 --- a/ietf/nomcom/forms.py +++ b/ietf/nomcom/forms.py @@ -73,6 +73,27 @@ class PositionNomineeField(forms.ChoiceField): return (position, nominee) +class MultiplePositionNomineeField(forms.MultipleChoiceField, PositionNomineeField): + + def clean(self, value): + nominees = super(PositionNomineeField, self).clean(value) + result = [] + for nominee in nominees: + if not nominee: + return nominee + (position_id, nominee_id) = nominee.split('_') + try: + position = Position.objects.get_by_nomcom(self.nomcom).opened().get(id=position_id) + except Position.DoesNotExist: + raise forms.ValidationError('Invalid nominee') + try: + nominee = position.nominee_set.get_by_nomcom(self.nomcom).get(id=nominee_id) + except Nominee.DoesNotExist: + raise forms.ValidationError('Invalid nominee') + result.append((position, nominee)) + return result + + class BaseNomcomForm(object): def __unicode__(self): return self.as_div() @@ -712,3 +733,31 @@ class PrivateKeyForm(BaseNomcomForm, forms.Form): key = forms.CharField(label='Private key', widget=forms.Textarea(), required=False) fieldsets = [('Private key', ('key',))] + + +class PendingFeedbackForm(BaseNomcomForm, forms.ModelForm): + + class Meta: + model = Feedback + fields = ('author', 'type', 'nominee') + + def set_nomcom(self, nomcom, user): + self.nomcom = nomcom + self.user = user + self.fields['nominee'] = MultiplePositionNomineeField(nomcom=self.nomcom, required=True, widget=forms.SelectMultiple) + + def save(self, commit=True): + feedback = super(PendingFeedbackForm, self).save(commit=False) + + author = get_user_email(self.user) + + if author: + feedback.author = author + + feedback.nomcom = self.nomcom + feedback.user = self.user + feedback.save() + self.save_m2m() + for (position, nominee) in self.cleaned_data['nominee']: + feedback.nominees.add(nominee) + feedback.positions.add(position) diff --git a/ietf/nomcom/views.py b/ietf/nomcom/views.py index 97a93b000..583fc56ac 100644 --- a/ietf/nomcom/views.py +++ b/ietf/nomcom/views.py @@ -22,7 +22,7 @@ from ietf.name.models import NomineePositionState, FeedbackType from ietf.nomcom.decorators import member_required, private_key_required from ietf.nomcom.forms import (NominateForm, FeedbackForm, QuestionnaireForm, MergeForm, NomComTemplateForm, PositionForm, - PrivateKeyForm, EditNomcomForm) + PrivateKeyForm, EditNomcomForm, PendingFeedbackForm) from ietf.nomcom.models import Position, NomineePosition, Nominee, Feedback, NomCom from ietf.nomcom.utils import (get_nomcom_by_year, HOME_TEMPLATE, store_nomcom_private_key, get_hash_nominee_position, @@ -394,6 +394,7 @@ def view_feedback_pending(request, year): nomcom = get_nomcom_by_year(year) message = None FeedbackFormSet = modelformset_factory(Feedback, + form=PendingFeedbackForm, exclude=('nomcom', 'comments'), extra=0) feedbacks = Feedback.objects.filter(Q(type__isnull=True) | @@ -401,11 +402,18 @@ def view_feedback_pending(request, year): Q(positions__isnull=True)) if request.method == 'POST': formset = FeedbackFormSet(request.POST) + for form in formset.forms: + form.set_nomcom(nomcom, request.user) if formset.is_valid(): formset.save() message = ('success', 'The feedbacks has been saved.') + formset = FeedbackFormSet(queryset=feedbacks) + for form in formset.forms: + form.set_nomcom(nomcom, request.user) else: formset = FeedbackFormSet(queryset=feedbacks) + for form in formset.forms: + form.set_nomcom(nomcom, request.user) return render_to_response('nomcom/view_feedback_pending.html', {'year': year, 'selected': 'view_feedback', diff --git a/ietf/templates/nomcom/view_feedback_pending.html b/ietf/templates/nomcom/view_feedback_pending.html index 5e74bdcd6..368f981ca 100644 --- a/ietf/templates/nomcom/view_feedback_pending.html +++ b/ietf/templates/nomcom/view_feedback_pending.html @@ -19,20 +19,43 @@
{% csrf_token %} {{ formset.management_form }} {% for form in formset.forms %} -

{{ form.instance.time|date:"Y-m-d" }} id:{{ form.instance.id }}

+

{{ form.instance.time|date:"Y-m-d" }} id:{{ form.instance.id }}

{% if form.errors %}
Please correct the following errors
{% endif %} -
+
+
+
+

Comment meta data

{% for field in form %} -
- {% if not field.field.widget.is_hidden %}{{ field.label_tag }}:{% endif %} {{ field }}{{ field.errors }} -
+
+ +
+
{{ field.help_text }}
+ {{ field }} + {{ field.errors }} +
+
+
{% endfor %} - {% decrypt form.instance.comments request year %} +
+
+
+
+

Comment body

+
{% decrypt form.instance.comments request year %}
+
+
+
{% endfor %}
-{% endblock %} \ No newline at end of file +{% endblock %}