summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoretienne2008-08-21 00:40:10 +0000
committeretienne2008-08-21 00:40:10 +0000
commit95c2f32086b98edcdc1121bb936cfdefa1ee33bf (patch)
tree7d6c78b791ba193f10dc972131d9a97fbd65635a
parentfad8645171c29359ba9ecfc128dceba545298849 (diff)
Implementation of the 3 choices poll
-rw-r--r--polls/models.py13
-rw-r--r--polls/views.py28
-rw-r--r--templates/createOrEdit.html9
-rw-r--r--templates/vote.html32
4 files changed, 64 insertions, 18 deletions
diff --git a/polls/models.py b/polls/models.py
index 2abd4ae..f4f1147 100644
--- a/polls/models.py
+++ b/polls/models.py
@@ -38,10 +38,12 @@ class Poll(models.Model):
STATUS = (('A', _('Available')),
('D', _('Disabled')),)
status = models.CharField(maxlength=1, choices=STATUS)
- TYPE = (('M', _('Meeting')),
+ """TYPE = (('M', _('Meeting')),
('P', _('Poll')),
('B', _('Balanced poll')),
- ('O', _('One choice poll')),)
+ ('O', _('One choice poll')),)"""
+ TYPE = (('P', _('Poll')),
+ ('B', _('Balanced poll')),)
type = models.CharField(maxlength=1, choices=TYPE)
def getTypeLabel(self):
@@ -61,8 +63,7 @@ class Choice(models.Model):
class Vote(models.Model):
voter = models.ForeignKey(PollUser)
choice = models.ForeignKey(Choice)
- VOTE = ((-1, _('No')),
+ VOTE = ((1, _('Yes')),
(0, _('Maybe')),
- (1, _('Yes')),)
- value = models.IntegerField(choices=VOTE)
-
+ (-1, _('No')),)
+ value = models.IntegerField(choices=VOTE) \ No newline at end of file
diff --git a/polls/views.py b/polls/views.py
index bf6320a..771396a 100644
--- a/polls/views.py
+++ b/polls/views.py
@@ -212,7 +212,13 @@ def poll(request, poll_url):
# probably been deleted
vote.delete()
else:
- vote.value = 1
+ # try if a specific value is specified in the form
+ # like in balanced poll
+ try:
+ value = int(request.POST[key])
+ except ValueError:
+ value = 1
+ vote.value = value
vote.save()
selected_choices.append(vote.choice)
except (ValueError, IndexError):
@@ -224,7 +230,13 @@ def poll(request, poll_url):
choice = Choice.objects.filter(id=id)[0]
if choice not in choices:
raise ValueError
- v = Vote(voter=author, choice=choice, value=1)
+ # try if a specific value is specified in the form
+ # like in balanced poll
+ try:
+ value = int(request.POST[key])
+ except ValueError:
+ value = 1
+ v = Vote(voter=author, choice=choice, value=value)
v.save()
selected_choices.append(choice)
except (ValueError, IndexError):
@@ -258,7 +270,13 @@ def poll(request, poll_url):
choice = Choice.objects.filter(id=id)[0]
if choice not in choices:
raise ValueError
- v = Vote(voter=author, choice=choice, value=1)
+ # try if a specific value is specified in the form
+ # like in balanced poll
+ try:
+ value = int(request.POST[key])
+ except ValueError:
+ value = 1
+ v = Vote(voter=author, choice=choice, value=value)
v.save()
selected_choices.append(choice)
except (ValueError, IndexError):
@@ -302,8 +320,10 @@ def poll(request, poll_url):
response_dct.update({'choices':choices,
'poll_type_name':poll.getTypeLabel(),
+ 'poll_type':poll.type,
'poll_name':poll.name,
- 'poll_desc':poll.description})
+ 'poll_desc':poll.description,
+ 'VOTE':Vote.VOTE,})
response_dct['base_url'] = "/".join(request.path.split('/')[:-2]) \
+ '/%s/' % poll.base_url
diff --git a/templates/createOrEdit.html b/templates/createOrEdit.html
index 12d9d9d..4eecaa2 100644
--- a/templates/createOrEdit.html
+++ b/templates/createOrEdit.html
@@ -34,21 +34,20 @@
<td>{% if new %}<textarea name='poll_desc'>{{poll_desc}}</textarea>{% else %}{{poll_desc}}{% endif %}</td>
<td class='form_description'>{% trans "Precise description of the poll" %}</td>
</tr>
- <!--<tr>
+ <tr>
<td><label for='poll_type'>{% trans "Poll type" %}</label></td>
<td>{% if new %}<select name='poll_type'>
{% for typ in TYPES %}<option value='{{typ.0}}'{% ifequal poll_type typ.0%} selected='selected'{% endifequal %}>{{typ.1}}</option>{% endfor %}
</select>{% else %}{{type_name}}{% endif %}</td>
<td class='form_description'>{% trans "Type of the poll:" %}
<ul>
- <li>{% trans "Meeting is the appropriate type to set a date for a meeting."%}</li>
+ <!--<li>{% trans "Meeting is the appropriate type to set a date for a meeting."%}</li>!-->
<li>{% trans "Poll is the appropriate type for a simple multi-choice poll" %}</li>
<li>{% trans "Balanced poll lets voters setting negative vote for some choices" %}</li>
- <li>{% trans "One choice poll" %}</li>
+ <!--<li>{% trans "One choice poll" %}</li>!-->
</ul>
</td>
- </tr>!-->
- <input type='hidden' name='poll_type' value='M'/>
+ </tr>
{% if not new %}{% if choices %}<tr>
<th>{% trans "Choices" %}</th><th>&nbsp;</th><th>{% trans "Delete?"%}</th>
</tr>
diff --git a/templates/vote.html b/templates/vote.html
index 0174a18..27e54a3 100644
--- a/templates/vote.html
+++ b/templates/vote.html
@@ -17,10 +17,28 @@
<input type='hidden' name='voter' value='{{voter.id}}'/>
<td class='simple'></td>
<td><input type='text' name='author_name' value='{{voter.name}}'/></td>
- {% for vote in voter.votes %}<td><input type='checkbox' name='{%if vote.id%}vote_{{vote.id}}{%else%}choice_{{vote}}{%endif%}'{%ifequal vote.value 1%} checked='checked'{%endifequal%}/></td>{%endfor%}
+ {% for vote in voter.votes %}<td>
+ {% ifequal poll_type 'P' %}
+ <input type='checkbox' name='{%if vote.id%}vote_{{vote.id}}{%else%}choice_{{vote}}{%endif%}'{%ifequal vote.value 1%} checked='checked'{%endifequal%}/>
+ {% endifequal %}
+ {% ifequal poll_type 'B' %}
+ <select name='{%if vote.id%}vote_{{vote.id}}{%else%}choice_{{vote}}{%endif%}'>
+ {% for vote_choice in VOTE %}
+ <option value='{{vote_choice.0}}'{%ifequal vote.value vote_choice.0%} selected='selected'{%endifequal%}>{{vote_choice.1}}</option>
+ {% endfor %}
+ </select>
+ {% endifequal %}
+ </td>{%endfor%}
{%else%}<td class='simple'><a href='?voter={{voter.id}}'>{% trans "Edit" %}</a></td>
<td>{{voter.name}}</td>
- {% for vote in voter.votes %}<td class='{%ifequal vote.value 1%}OK{%else%}KO{%endifequal%}'>{% ifequal vote.value 1%}Yes{%else%}No{%endifequal%}</td>
+ {% for vote in voter.votes %}<td class='{%ifequal vote.value 1%}OK{%else%}{%ifequal vote.value 0%}OKO{%else%}KO{%endifequal%}{%endifequal%}'>
+ {%ifequal poll_type 'P'%}
+ {%ifequal vote.value 0%}{% trans "No" %}{%else%}{% trans "Yes" %}{%endifequal%}
+ {%else%}
+ {%for VOT in VOTE%}
+ {%ifequal VOT.0 vote.value%}{{VOT.1}}{%endifequal%}{%endfor%}
+ {%endifequal%}
+ </td>
{%endfor%}
{%endifequal%}
</tr>{%endfor%}
@@ -28,7 +46,15 @@
<tr>
<td class='simple'></td>
<td><input type='text' name='author_name'/></td>
- {%for choice in choices%}<td><input type='checkbox' name='choice_{{choice.id}}'/></td>{%endfor%}
+ {%for choice in choices%}<td>
+ {% ifequal poll_type 'P' %}
+ <input type='checkbox' name='choice_{{choice.id}}'/>{% endifequal %}
+ {% ifequal poll_type 'B' %}
+ <select name='choice_{{choice.id}}'>{% for vote_choice in VOTE %}
+ <option value='{{vote_choice.0}}'{%ifequal vote_choice.0 0%} selected='selected'{%endifequal%}>{{vote_choice.1}}</option>{% endfor %}
+ </select>
+ {% endifequal %}
+ </td>{%endfor%}
</tr>
{%endif%}
<tr id='sum'>