diff --git a/openslides/assignment/models.py b/openslides/assignment/models.py
index dfb69d6c5..36759b0a9 100644
--- a/openslides/assignment/models.py
+++ b/openslides/assignment/models.py
@@ -82,6 +82,7 @@ class Assignment(models.Model, SlideMixin):
def candidates(self):
return self.profile.get_query_set()
+
def set_elected(self, profile, value=True):
if profile in self.candidates:
if value and not self.is_elected(profile):
@@ -106,36 +107,39 @@ class Assignment(models.Model, SlideMixin):
poll.set_options([{'candidate': profile} for profile in candidates])
return poll
+
@property
def vote_results(self):
- # TODO: Rewrite this code. Use a matrix and transform it.
- votes = []
- publish_winner_results_only = config["assignment_publish_winner_results_only"]
- # list of votes
- votes = []
- options = []
+ """
+ returns a table represented as a list with all candidates from all
+ releated polls and their vote results.
+ """
+ vote_results_dict = {}
+ # All polls releated to this assigment
polls = self.poll_set.all()
+ # All PollOption-Objects releated to this assignment
+ options = []
for poll in polls:
options += poll.get_options()
- for candidate in set([option.candidate for option in options]):
- tmplist = [[candidate, self.is_elected(candidate)], []]
+
+ for option in options:
+ candidate = option.candidate
+ if candidate in vote_results_dict:
+ continue
+ vote_results_dict[candidate] = []
for poll in polls:
- if poll.published:
- if poll.get_options().filter(candidate=candidate).exists():
- # check config option 'publish_winner_results_only'
- if not publish_winner_results_only \
- or publish_winner_results_only and self.is_elected(candidate):
- option = AssignmentOption.objects.filter(poll=poll).get(candidate=candidate)
- try:
- tmplist[1].append(option.get_votes())
- except IndexError:
- tmplist[1].append('–')
- else:
- tmplist[1].append("")
- else:
- tmplist[1].append("-")
- votes.append(tmplist)
- return votes
+ try:
+ polloption = poll.get_options().get(candidate=candidate)
+ # candidate is releated to this poll
+ votes = {}
+ for vote in polloption.get_votes():
+ votes[vote.value] = vote.get_weight()
+ vote_results_dict[candidate].append(votes)
+ except AssignmentOption.DoesNotExist:
+ # candidate not in releated to this poll
+ vote_results_dict[candidate].append(None)
+ return vote_results_dict
+
def get_agenda_title(self):
return self.name
diff --git a/openslides/assignment/templates/assignment/view.html b/openslides/assignment/templates/assignment/view.html
index bf120d4d4..74ca2ca2b 100644
--- a/openslides/assignment/templates/assignment/view.html
+++ b/openslides/assignment/templates/assignment/view.html
@@ -103,7 +103,8 @@
|
{% with ballotnumber=polls.count %}
- {% trans "ballot" %} |
+ {% trans "ballot" %}
+
{% endwith %}
@@ -125,7 +126,7 @@
{# endif #}
{% endfor %}
- {% if assignment.profile.count > 0 and perms.assignment.can_manage_assignment and assignment.status == "vot" %}
+ {% if assignment.profile.exists and perms.assignment.can_manage_assignment and assignment.status == "vot" %}
@@ -135,45 +136,41 @@
|
{% endif %}
-
- {% for vote in votes %}
-
-
- {% with vote|first as candidate %}
- {% if candidate.1 %}
- {% if perms.assignment.can_manage_assignment %}
-
- {% else %}
-
- {% endif %}
- {% else %}
- {% if perms.assignment.can_manage_assignment %}
-
- {% endif %}
- {% endif %}
- {{ candidate.0 }}
- {% endwith %}
- |
- {% for v in vote|last %}
-
- {% if v %}
- {% if v|length == 3 %}
- {% if v.0 %}{{ v.0 }}{% else %}∅{% endif %}
- {% if v.1 %}{{ v.1 }}{% else %}∅{% endif %}
- {% if v.2 %}{{ v.2 }}{% else %}∅{% endif %}
+ {% for candidate, votes in vote_results.items %}
+ |
+
+ {% if candidate in assignment.elected.all %}
+ {% if perms.assignment.can_manage_assignment %}
+
{% else %}
- {% if v != "-" %}{% endif %}
- {{ v.0 }}
+
{% endif %}
{% else %}
- ∅
+ {% if perms.assignment.can_manage_assignment %}
+
+ {% endif %}
{% endif %}
+ {{ candidate }}
|
- {% endfor %}
- {% if assignment.profile.exists and perms.assignment.can_manage_assignment and assignment.status == "vot" %}
- |
- {% endif %}
-
+ {% for vote in votes %}
+
+ {% if vote %}
+ {% if 'Yes' in vote and 'No' in vote and 'Abstain' in vote %}
+ {% if vote.Yes %}{{ vote.Yes }}{% else %}∅{% endif %}
+ {% if vote.No %}{{ vote.No }}{% else %}∅{% endif %}
+ {% if vote.Abstain %}{{ vote.Abstain }}{% else %}∅{% endif %}
+ {% elif 'Votes' in vote %}
+ {% if vote.Votes %}{{ vote.Votes }}{% else %}∅{% endif %}
+ {% endif %}
+ {% else %}
+ –
+ {% endif %}
+ |
+ {% endfor %}
+ {% if assignment.profile.exists and perms.assignment.can_manage_assignment and assignment.status == "vot" %}
+ |
+ {% endif %}
+
{% endfor %}
{%trans 'Invalid votes' %} |
@@ -190,7 +187,7 @@
{%trans 'Votes cast' %} |
{% for poll in polls %}
{% if poll.published and not perms.assignment.can_manage_assignment or perms.assignment.can_manage_assignment %}
- {{ poll.print_votescast }} |
+ {{ poll.print_votescast }} |
{% endif %}
{% endfor %}
{% if assignment.profile.exists and perms.assignment.can_manage_assignment and assignment.status == "vot" %}
diff --git a/openslides/assignment/views.py b/openslides/assignment/views.py
index 451b24c80..bc6ff8a34 100644
--- a/openslides/assignment/views.py
+++ b/openslides/assignment/views.py
@@ -84,31 +84,12 @@ def view(request, assignment_id=None):
if request.user.has_perm('assignment.can_nominate_other'):
form = AssignmentRunForm()
- # why not use assignment.vote_results?
+ vote_results = assignment.vote_results
polls = assignment.poll_set.all()
- votes = []
- options = []
- for poll in polls:
- options += poll.get_options()
-
- for candidate in set([option.candidate for option in options]):
- tmplist = ((candidate, assignment.is_elected(candidate)), [])
- for poll in polls:
- if (poll.published and not request.user.has_perm('assignment.can_manage_assignment')) or request.user.has_perm('assignment.can_manage_assignment'):
- # candidate exists in poll
- if poll.get_options().filter(candidate=candidate).exists():
- option = AssignmentOption.objects.filter(poll=poll).get(candidate=candidate)
- try:
- tmplist[1].append(poll.get_form_values(option.id))
- except IndexError:
- tmplist[1].append('–')
- else:
- tmplist[1].append("-")
- votes.append(tmplist)
return {
'assignment': assignment,
'form': form,
- 'votes': votes,
+ 'vote_results': vote_results,
'polls': polls,
}
diff --git a/openslides/poll/models.py b/openslides/poll/models.py
index a01715e5b..706d8c503 100644
--- a/openslides/poll/models.py
+++ b/openslides/poll/models.py
@@ -16,6 +16,7 @@ from projector.api import register_slidemodel
from projector.models import SlideMixin
from utils.translation_ext import ugettext as _
+
class BaseOption(models.Model):
poll = models.ForeignKey('BasePoll')
@@ -194,5 +195,7 @@ def print_value(value):
value = _('majority')
elif value == -2:
value = _('undocumented')
+ elif value is None:
+ value = ''
return unicode(value)