From 91049155a625a04011e839cc7ae6d8042c530fae Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Fri, 9 Sep 2011 16:18:11 +0200 Subject: [PATCH 01/14] Print election results in pdf. Fixed redirect. --- openslides/assignment/views.py | 3 +- openslides/utils/pdf.py | 57 ++++++++++++++++++++++++++++++++-- 2 files changed, 56 insertions(+), 4 deletions(-) diff --git a/openslides/assignment/views.py b/openslides/assignment/views.py index 940a8a64a..21cb01467 100644 --- a/openslides/assignment/views.py +++ b/openslides/assignment/views.py @@ -238,7 +238,6 @@ def poll_view(request, poll_id): def set_published(request, poll_id, published=True): try: poll = Poll.objects.get(pk=poll_id) - print poll.published poll.set_published(published) if poll.published: messages.success(request, _("Poll successfully set to published.") ) @@ -246,7 +245,7 @@ def set_published(request, poll_id, published=True): messages.success(request, _("Poll successfully set to unpublished.") ) except Poll.DoesNotExist: messages.error(request, _('Poll ID %d does not exist.') % int(poll_id)) - return redirect(reverse('assignment_view', args=[poll.id])) + return redirect(reverse('assignment_view', args=[poll.assignment.id])) @permission_required('assignment.can_manage_assignment') def delete_poll(request, poll_id): diff --git a/openslides/utils/pdf.py b/openslides/utils/pdf.py index 28c5692e3..4b134507f 100755 --- a/openslides/utils/pdf.py +++ b/openslides/utils/pdf.py @@ -36,7 +36,7 @@ from openslides.agenda.models import Item from openslides.agenda.api import children_list from openslides.application.models import Application from openslides.assignment.models import Assignment -from openslides.poll.models import Poll +from openslides.poll.models import Poll, Option from openslides.participant.models import Profile from openslides.system.api import config_get from openslides.settings import SITE_ROOT @@ -488,6 +488,23 @@ def print_application_poll(request, poll_id=None): doc.build(story) return response +def get_assignment_votes(assignment): + votes = [] + for candidate in assignment.candidates: + tmplist = [[candidate, assignment.is_elected(candidate)], []] + for poll in assignment.poll_set.all(): + if poll.published: + if candidate in poll.options_values: + option = Option.objects.filter(poll=poll).filter(user=candidate)[0] + if poll.optiondecision: + tmplist[1].append([option.yes, option.no, option.undesided]) + else: + tmplist[1].append(option.yes) + else: + tmplist[1].append("-") + votes.append(tmplist) + return votes + def get_assignment(assignment, story): # title story.append(Paragraph(_("Election")+": %s" % assignment.name, stylesheet['Heading1'])) @@ -507,10 +524,46 @@ def get_assignment(assignment, story): for x in range(0,2*assignment.posts): cell2b.append(Paragraph(".  __________________________________________",stylesheet['Signaturefield'])) cell2b.append(Spacer(0,0.2*cm)) + # vote results + table_votes = [] + results = get_assignment_votes(assignment) + cell3a = [] + cell3a.append(Paragraph("%s:" % (_("Vote results")), stylesheet['Heading4'])) + if len(results[1][1]) > 1: + cell3a.append(Paragraph("%s %s" % (len(results[1][1]), _("ballots")), stylesheet['Normal'])) + if len(results[1][1]) > 0: + data_votes = [] + # add table head row + headrow = [] + headrow.append(_("Candidates")) + for i in range (0,len(results[1][1])): + headrow.append("%s." %(str(i+1))) + data_votes.append(headrow) + # add result rows + for candidate in results: + row = [] + row.append(str(candidate[0][0])) + for votes in candidate[1]: + row.append(str(votes)) + data_votes.append(row) + table_votes=Table(data_votes) + table_votes.setStyle( TableStyle([ + ('GRID', (0,0), (-1,-1), 0.5, colors.grey), + ('VALIGN',(0,0),(-1,-1), 'TOP'), + ('LINEABOVE',(0,0),(-1,0),2,colors.black), + ('LINEABOVE',(0,1),(-1,1),1,colors.black), + ('LINEBELOW',(0,-1),(-1,-1),2,colors.black), + ('ROWBACKGROUNDS', (0, 1), (-1, -1), (colors.white, (.9, .9, .9))), + ])) + # table data = [] data.append([cell1a,cell1b]) - data.append([cell2a,cell2b]) + if not table_votes: + data.append([cell2a,cell2b]) + if table_votes: + data.append([cell3a,table_votes]) + data.append([Spacer(0,0.2*cm),'']) t=Table(data) t._argW[0]=4.5*cm t._argW[1]=11*cm From 7be90c89c759cb4e190d3ceae927ec36413b8501 Mon Sep 17 00:00:00 2001 From: Oskar Hahn Date: Fri, 9 Sep 2011 16:18:17 +0200 Subject: [PATCH 02/14] undocumentet poll results --- openslides/poll/models.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/openslides/poll/models.py b/openslides/poll/models.py index d3ffdc578..735cf51dc 100644 --- a/openslides/poll/models.py +++ b/openslides/poll/models.py @@ -71,7 +71,7 @@ class Poll(models.Model): if self.assignment: return Poll.objects.filter(assignment=self.assignment).count() return None - + @property def ballot(self): if self.application: @@ -125,6 +125,8 @@ class Option(models.Model): def yes(self): if self.voteyes == -1: return _('majority') + if self.voteno == -2: + return _('undocumented') if self.voteyes: return self.voteyes return '0' @@ -133,6 +135,8 @@ class Option(models.Model): def no(self): if self.voteno == -1: return _('majority') + if self.voteno == -2: + return _('undocumented') if self.voteno: return self.voteno return '0' @@ -141,6 +145,8 @@ class Option(models.Model): def undesided(self): if self.voteundesided == -1: return _('majority') + if self.voteno == -2: + return _('undocumented') if self.voteundesided: return self.voteundesided return '0' @@ -156,10 +162,6 @@ class Option(models.Model): return None def __unicode__(self): - if self.text != "" and self.text is not None: - return self.text - if self.user is not None: - return unicode(self.user) - if self.application is not None: - return unicode(self.application) + if self.value: + return self.value return _("No options") From 7fc12e51f94515ddb69669044144556ffd0e431f Mon Sep 17 00:00:00 2001 From: Oskar Hahn Date: Fri, 9 Sep 2011 16:26:34 +0200 Subject: [PATCH 03/14] type in last commit, template update, form update info in template, that -1 is majority and -2 in undocumentet update option_form. -2 is a valide value --- openslides/assignment/templates/assignment/poll_view.html | 5 +++-- openslides/poll/forms.py | 6 +++--- openslides/poll/models.py | 6 +++--- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/openslides/assignment/templates/assignment/poll_view.html b/openslides/assignment/templates/assignment/poll_view.html index 33f6bd871..10bdb38a3 100644 --- a/openslides/assignment/templates/assignment/poll_view.html +++ b/openslides/assignment/templates/assignment/poll_view.html @@ -7,6 +7,7 @@ {% blocktrans count counter=options|length %}candidate{% plural %}candidates{% endblocktrans %}

{% trans "Short description" %}: {{ poll.description }}

+ -1 := {% trans 'majority' %}, -2 := {% trans 'undocumented' %}
{% csrf_token %} @@ -41,7 +42,7 @@
- +

- +