Merge position and nominee into one field in the feedback pending forms.
Style the feedback pending forms. See #975 - Legacy-Id: 5668
This commit is contained in:
parent
5a0963b78c
commit
6898c51490
|
@ -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)
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -19,20 +19,43 @@
|
|||
<form id="feedbackformset" action="" method="post">{% csrf_token %}
|
||||
{{ formset.management_form }}
|
||||
{% for form in formset.forms %}
|
||||
<h3 class="ietf-divider">{{ form.instance.time|date:"Y-m-d" }} id:{{ form.instance.id }}</h3>
|
||||
<h3 class="ietf-divider" style="margin-bottom: 0px;">{{ form.instance.time|date:"Y-m-d" }} id:{{ form.instance.id }}</h3>
|
||||
{% if form.errors %}<div class="info-message-error">Please correct the following errors</div>{% endif %}
|
||||
<div>
|
||||
<table style="width: 100%;"><tr><td>
|
||||
<div class="baseform">
|
||||
<div class="fieldset">
|
||||
<h2>Comment meta data</h2>
|
||||
{% for field in form %}
|
||||
<div>
|
||||
{% if not field.field.widget.is_hidden %}{{ field.label_tag }}:{% endif %} {{ field }}{{ field.errors }}
|
||||
</div>
|
||||
<div id="baseform-fieldname-{{ field.html_name }}"
|
||||
{% if field.field.widget.is_hidden %}style="display: none;"{% endif %}
|
||||
class="{% if field.errors %}fieldError {% endif %}field BaseFormStringWidget{% if field.field.column_style %} {{ field.field.column_style }}{% endif %}">
|
||||
<label for="id_{{ field.html_name }}">{{ field.label }}
|
||||
{% if field.field.required %}
|
||||
<span class="fieldRequired" title="Required">*</span>
|
||||
{% endif %}
|
||||
</label>
|
||||
<div class="fieldWidget">
|
||||
<div id="{{ field.html_name }}_help" class="formHelp"> {{ field.help_text }}</div>
|
||||
{{ field }}
|
||||
{{ field.errors }}
|
||||
</div>
|
||||
<div class="endfield"></div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% decrypt form.instance.comments request year %}
|
||||
</div>
|
||||
</div>
|
||||
</td><td style="width: 50%; vertical-align: top;">
|
||||
<div class="baseform">
|
||||
<div class="fieldset">
|
||||
<h2>Comment body</h2>
|
||||
<pre style="padding: 1em;">{% decrypt form.instance.comments request year %}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</td></tr></table>
|
||||
{% endfor %}
|
||||
<div class="ietf-divider"></div>
|
||||
<input type="submit" value="Submit" />
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
|
Loading…
Reference in a new issue