From 91049155a625a04011e839cc7ae6d8042c530fae Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Fri, 9 Sep 2011 16:18:11 +0200 Subject: [PATCH 1/2] 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 1e248ebf23fd927fa252d0cc9391b34f99addb96 Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Fri, 9 Sep 2011 16:34:01 +0200 Subject: [PATCH 2/2] Only show published polls for normal users. --- .../assignment/templates/assignment/view.html | 6 ++++++ openslides/assignment/views.py | 15 ++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/openslides/assignment/templates/assignment/view.html b/openslides/assignment/templates/assignment/view.html index b5a886dc4..0d921ad23 100644 --- a/openslides/assignment/templates/assignment/view.html +++ b/openslides/assignment/templates/assignment/view.html @@ -125,6 +125,7 @@ {% trans "Candidates" %} {% for poll in assignment.poll_set.all %} + {% if poll.published and not perms.assignment.can_manage_assignment or perms.assignment.can_manage_assignment %} {% if perms.assignment.can_manage_assignment %}{% endif %} {{ forloop.counter }}. {% trans 'ballot' %} {% if perms.assignment.can_manage_assignment %} @@ -141,6 +142,7 @@ {% endif %} + {% endif %} {% endfor %} {% if assignment.profile.count > 0 and perms.assignment.can_manage_assignment and assignment.status == "vot" %} @@ -192,7 +194,9 @@ {%trans 'Invalid votes' %} {% for p in polls %} + {% if p.published and not perms.assignment.can_manage_assignment or perms.assignment.can_manage_assignment %} {{ p.votesinvalid }} + {% endif %} {% endfor %} {% if assignment.profile.count > 0 and perms.assignment.can_manage_assignment and assignment.status == "vot" %} @@ -201,7 +205,9 @@ {%trans 'Votes cast' %} {% for p in polls %} + {% if p.published and not perms.assignment.can_manage_assignment or perms.assignment.can_manage_assignment %} {{ p.votescast }} + {% endif %} {% endfor %} {% if assignment.profile.count > 0 and perms.assignment.can_manage_assignment and assignment.status == "vot" %} diff --git a/openslides/assignment/views.py b/openslides/assignment/views.py index 21cb01467..4e64fd4ff 100644 --- a/openslides/assignment/views.py +++ b/openslides/assignment/views.py @@ -69,14 +69,15 @@ def view(request, assignment_id=None): for candidate in assignment.candidates: tmplist = [[candidate, assignment.is_elected(candidate)], []] for poll in assignment.poll_set.all(): - 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]) + if (poll.published and not request.user.has_perm('assignment.can_manage_assignment')) or request.user.has_perm('assignment.can_manage_assignment'): + 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(option.yes) - else: - tmplist[1].append("-") + tmplist[1].append("-") votes.append(tmplist) polls = []