Skip to content

Commit f998e0d

Browse files
committed
Add form to change email of nominees.
Refactor merge form to avoid merge old duplicate nominees. See ietf-tools#1013 - Legacy-Id: 5747
1 parent ee1eec7 commit f998e0d

5 files changed

Lines changed: 107 additions & 6 deletions

File tree

ietf/nomcom/forms.py

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ def __init__(self, *args, **kwargs):
313313

314314
def clean_primary_email(self):
315315
email = self.cleaned_data['primary_email']
316-
nominees = Nominee.objects.get_by_nomcom(self.nomcom).filter(email__address=email)
316+
nominees = Nominee.objects.get_by_nomcom(self.nomcom).not_duplicated().filter(email__address=email)
317317
if not nominees:
318318
msg = "Does not exist a nomiee with this email"
319319
self._errors["primary_email"] = self.error_class([msg])
@@ -807,8 +807,7 @@ def save(self, commit=True):
807807
nominee=nominee,
808808
comments=feedback,
809809
nominator_email=nominator_email,
810-
user=self.user,
811-
)
810+
user=self.user)
812811
return feedback
813812
else:
814813
feedback.save()
@@ -827,3 +826,45 @@ class FullFeedbackFormSet(forms.models.BaseModelFormSet):
827826
form = MutableFeedbackForm
828827
can_order = False
829828
can_delete = False
829+
830+
831+
class EditNomineeForm(forms.ModelForm):
832+
833+
nominee_email = forms.EmailField(label="Nominee email",
834+
widget=forms.TextInput(attrs={'size': '40'}))
835+
836+
def __init__(self, *args, **kwargs):
837+
super(EditNomineeForm, self).__init__(*args, **kwargs)
838+
self.fields['nominee_email'].initial = self.instance.email.address
839+
840+
def save(self, commit=True):
841+
nominee = super(EditNomineeForm, self).save(commit=False)
842+
nominee_email = self.cleaned_data.get("nominee_email")
843+
if nominee_email != nominee.email.address:
844+
# create a new nominee with the new email
845+
new_email, created_email = Email.objects.get_or_create(address=nominee_email)
846+
new_email.person = nominee.email.person
847+
new_email.save()
848+
849+
# Chage emails between nominees
850+
old_email = nominee.email
851+
nominee.email = new_email
852+
nominee.save()
853+
new_nominee = Nominee.objects.create(email=old_email, nomcom=nominee.nomcom)
854+
855+
# new nominees point to old nominee
856+
new_nominee.duplicated = nominee
857+
new_nominee.save()
858+
859+
return nominee
860+
861+
class Meta:
862+
model = Nominee
863+
fields = ('nominee_email',)
864+
865+
def clean_nominee_email(self):
866+
nominee_email = self.cleaned_data['nominee_email']
867+
nominees = Nominee.objects.exclude(email__address=self.instance.email.address).filter(email__address=nominee_email)
868+
if nominees:
869+
raise forms.ValidationError('This emails already does exists in another nominee, please go to merge form')
870+
return nominee_email

ietf/nomcom/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
url(r'^(?P<year>\d{4})/private/view-feedback/unrelated/$', 'view_feedback_unrelated', name='nomcom_view_feedback_unrelated'),
1414
url(r'^(?P<year>\d{4})/private/view-feedback/pending/$', 'view_feedback_pending', name='nomcom_view_feedback_pending'),
1515
url(r'^(?P<year>\d{4})/private/view-feedback/nominee/(?P<nominee_id>\d+)$', 'view_feedback_nominee', name='nomcom_view_feedback_nominee'),
16+
url(r'^(?P<year>\d{4})/private/edit/nominee/(?P<nominee_id>\d+)$', 'edit_nominee', name='nomcom_edit_nominee'),
1617
url(r'^(?P<year>\d{4})/private/merge/$', 'private_merge', name='nomcom_private_merge'),
1718
url(r'^(?P<year>\d{4})/private/send-reminder-mail/$', 'send_reminder_mail', name='nomcom_send_reminder_mail'),
1819
url(r'^(?P<year>\d{4})/private/edit-members/$', EditMembersFormPreview(EditMembersForm), name='nomcom_edit_members'),

ietf/nomcom/views.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
from ietf.nomcom.decorators import nomcom_member_required, nomcom_private_key_required
2424
from ietf.nomcom.forms import (NominateForm, FeedbackForm, QuestionnaireForm,
2525
MergeForm, NomComTemplateForm, PositionForm,
26-
PrivateKeyForm, EditNomcomForm, PendingFeedbackForm,
27-
ReminderDatesForm, FullFeedbackFormSet)
26+
PrivateKeyForm, EditNomcomForm, EditNomineeForm,
27+
PendingFeedbackForm, ReminderDatesForm, FullFeedbackFormSet)
2828
from ietf.nomcom.models import Position, NomineePosition, Nominee, Feedback, NomCom, ReminderDates
2929
from ietf.nomcom.utils import (get_nomcom_by_year, store_nomcom_private_key,
3030
get_hash_nominee_position, send_reminder_to_nominees,
@@ -512,6 +512,30 @@ def view_feedback_nominee(request, year, nominee_id):
512512
'nomcom': nomcom}, RequestContext(request))
513513

514514

515+
@nomcom_member_required(role='chair')
516+
def edit_nominee(request, year, nominee_id):
517+
nomcom = get_nomcom_by_year(year)
518+
nominee = get_object_or_404(Nominee, id=nominee_id)
519+
message = None
520+
521+
if request.method == 'POST':
522+
form = EditNomineeForm(request.POST,
523+
instance=nominee)
524+
if form.is_valid():
525+
form.save()
526+
message = ('success', 'The nominee has been changed')
527+
else:
528+
form = EditNomineeForm(instance=nominee)
529+
530+
return render_to_response('nomcom/edit_nominee.html',
531+
{'year': year,
532+
'selected': 'index',
533+
'nominee': nominee,
534+
'form': form,
535+
'message': message,
536+
'nomcom': nomcom}, RequestContext(request))
537+
538+
515539
@nomcom_member_required(role='chair')
516540
def edit_nomcom(request, year):
517541
nomcom = get_nomcom_by_year(year)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{% extends "nomcom/nomcom_private_base.html" %}
2+
3+
{% load nomcom_tags %}
4+
5+
{% block pagehead %}
6+
{{ block.super }}
7+
<script type="text/javascript" src="/js/lib/jquery-1.4.2.min.js"></script>
8+
<script type="text/javascript" src="/js/yui/yui-20100305.js"></script>
9+
<script type="text/javascript" src="/js/base.js"></script>
10+
{% endblock pagehead %}
11+
12+
{% block subtitle %} - Edit nominee {{ nominee }}{% endblock %}
13+
14+
{% block nomcom_content %}
15+
16+
<p>Back to list of <a href="{% url nomcom_private_index year %}">nominees</a></p>
17+
18+
<h2>Edit email of {{ nominee }} </h2>
19+
20+
{% if message %}
21+
<div class="info-message-{{ message.0 }}">{{ message.1 }}</div>
22+
{% endif %}
23+
24+
{% if form.errors %}<div class="info-message-error">Please correct the following errors</div>{% endif %}
25+
26+
<form enctype="multipart/form-data" action="" method="post">{% csrf_token %}
27+
<table>
28+
{{ form }}
29+
</table>
30+
<p><input type="submit" value="Save" /></p>
31+
</form>
32+
33+
34+
35+
{% endblock %}

ietf/templates/nomcom/private_index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ <h3>Select Filters</h3>
108108
{% if is_chair %}
109109
<td><input class="batch-select" type="checkbox" value="{{ np.id }}" name="selected"/></td>
110110
{% endif %}
111-
<td>{{ np.nominee }}</td>
111+
<td>{{ np.nominee }}{% if is_chair %} <a href="{% url nomcom_edit_nominee year np.nominee.id %}">(edit)</a>{% endif %}</td>
112112
<td>{{ np.position.name }}</td>
113113
<td>{{ np.state }}</td>
114114
<td>{{ np.questionnaires|yesno:"Yes,No,No" }}

0 commit comments

Comments
 (0)