Skip to content

Commit 6898c51

Browse files
committed
Merge position and nominee into one field in the feedback pending forms.
Style the feedback pending forms. See ietf-tools#975 - Legacy-Id: 5668
1 parent 5a0963b commit 6898c51

3 files changed

Lines changed: 88 additions & 8 deletions

File tree

ietf/nomcom/forms.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,27 @@ def clean(self, value):
7373
return (position, nominee)
7474

7575

76+
class MultiplePositionNomineeField(forms.MultipleChoiceField, PositionNomineeField):
77+
78+
def clean(self, value):
79+
nominees = super(PositionNomineeField, self).clean(value)
80+
result = []
81+
for nominee in nominees:
82+
if not nominee:
83+
return nominee
84+
(position_id, nominee_id) = nominee.split('_')
85+
try:
86+
position = Position.objects.get_by_nomcom(self.nomcom).opened().get(id=position_id)
87+
except Position.DoesNotExist:
88+
raise forms.ValidationError('Invalid nominee')
89+
try:
90+
nominee = position.nominee_set.get_by_nomcom(self.nomcom).get(id=nominee_id)
91+
except Nominee.DoesNotExist:
92+
raise forms.ValidationError('Invalid nominee')
93+
result.append((position, nominee))
94+
return result
95+
96+
7697
class BaseNomcomForm(object):
7798
def __unicode__(self):
7899
return self.as_div()
@@ -712,3 +733,31 @@ class PrivateKeyForm(BaseNomcomForm, forms.Form):
712733
key = forms.CharField(label='Private key', widget=forms.Textarea(), required=False)
713734

714735
fieldsets = [('Private key', ('key',))]
736+
737+
738+
class PendingFeedbackForm(BaseNomcomForm, forms.ModelForm):
739+
740+
class Meta:
741+
model = Feedback
742+
fields = ('author', 'type', 'nominee')
743+
744+
def set_nomcom(self, nomcom, user):
745+
self.nomcom = nomcom
746+
self.user = user
747+
self.fields['nominee'] = MultiplePositionNomineeField(nomcom=self.nomcom, required=True, widget=forms.SelectMultiple)
748+
749+
def save(self, commit=True):
750+
feedback = super(PendingFeedbackForm, self).save(commit=False)
751+
752+
author = get_user_email(self.user)
753+
754+
if author:
755+
feedback.author = author
756+
757+
feedback.nomcom = self.nomcom
758+
feedback.user = self.user
759+
feedback.save()
760+
self.save_m2m()
761+
for (position, nominee) in self.cleaned_data['nominee']:
762+
feedback.nominees.add(nominee)
763+
feedback.positions.add(position)

ietf/nomcom/views.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from ietf.nomcom.decorators import member_required, private_key_required
2323
from ietf.nomcom.forms import (NominateForm, FeedbackForm, QuestionnaireForm,
2424
MergeForm, NomComTemplateForm, PositionForm,
25-
PrivateKeyForm, EditNomcomForm)
25+
PrivateKeyForm, EditNomcomForm, PendingFeedbackForm)
2626
from ietf.nomcom.models import Position, NomineePosition, Nominee, Feedback, NomCom
2727
from ietf.nomcom.utils import (get_nomcom_by_year, HOME_TEMPLATE,
2828
store_nomcom_private_key, get_hash_nominee_position,
@@ -394,18 +394,26 @@ def view_feedback_pending(request, year):
394394
nomcom = get_nomcom_by_year(year)
395395
message = None
396396
FeedbackFormSet = modelformset_factory(Feedback,
397+
form=PendingFeedbackForm,
397398
exclude=('nomcom', 'comments'),
398399
extra=0)
399400
feedbacks = Feedback.objects.filter(Q(type__isnull=True) |
400401
Q(nominees__isnull=True) |
401402
Q(positions__isnull=True))
402403
if request.method == 'POST':
403404
formset = FeedbackFormSet(request.POST)
405+
for form in formset.forms:
406+
form.set_nomcom(nomcom, request.user)
404407
if formset.is_valid():
405408
formset.save()
406409
message = ('success', 'The feedbacks has been saved.')
410+
formset = FeedbackFormSet(queryset=feedbacks)
411+
for form in formset.forms:
412+
form.set_nomcom(nomcom, request.user)
407413
else:
408414
formset = FeedbackFormSet(queryset=feedbacks)
415+
for form in formset.forms:
416+
form.set_nomcom(nomcom, request.user)
409417
return render_to_response('nomcom/view_feedback_pending.html',
410418
{'year': year,
411419
'selected': 'view_feedback',

ietf/templates/nomcom/view_feedback_pending.html

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,43 @@ <h2>Feedback pending from email list</h2>
1919
<form id="feedbackformset" action="" method="post">{% csrf_token %}
2020
{{ formset.management_form }}
2121
{% for form in formset.forms %}
22-
<h3 class="ietf-divider">{{ form.instance.time|date:"Y-m-d" }} id:{{ form.instance.id }}</h3>
22+
<h3 class="ietf-divider" style="margin-bottom: 0px;">{{ form.instance.time|date:"Y-m-d" }} id:{{ form.instance.id }}</h3>
2323
{% if form.errors %}<div class="info-message-error">Please correct the following errors</div>{% endif %}
24-
<div>
24+
<table style="width: 100%;"><tr><td>
25+
<div class="baseform">
26+
<div class="fieldset">
27+
<h2>Comment meta data</h2>
2528
{% for field in form %}
26-
<div>
27-
{% if not field.field.widget.is_hidden %}{{ field.label_tag }}:{% endif %} {{ field }}{{ field.errors }}
28-
</div>
29+
<div id="baseform-fieldname-{{ field.html_name }}"
30+
{% if field.field.widget.is_hidden %}style="display: none;"{% endif %}
31+
class="{% if field.errors %}fieldError {% endif %}field BaseFormStringWidget{% if field.field.column_style %} {{ field.field.column_style }}{% endif %}">
32+
<label for="id_{{ field.html_name }}">{{ field.label }}
33+
{% if field.field.required %}
34+
<span class="fieldRequired" title="Required">*</span>
35+
{% endif %}
36+
</label>
37+
<div class="fieldWidget">
38+
<div id="{{ field.html_name }}_help" class="formHelp"> {{ field.help_text }}</div>
39+
{{ field }}
40+
{{ field.errors }}
41+
</div>
42+
<div class="endfield"></div>
43+
</div>
2944
{% endfor %}
30-
{% decrypt form.instance.comments request year %}
45+
</div>
3146
</div>
47+
</td><td style="width: 50%; vertical-align: top;">
48+
<div class="baseform">
49+
<div class="fieldset">
50+
<h2>Comment body</h2>
51+
<pre style="padding: 1em;">{% decrypt form.instance.comments request year %}</pre>
52+
</div>
53+
</div>
54+
</td></tr></table>
3255
{% endfor %}
3356
<div class="ietf-divider"></div>
3457
<input type="submit" value="Submit" />
3558
</form>
3659
</div>
3760

38-
{% endblock %}
61+
{% endblock %}

0 commit comments

Comments
 (0)