~speakman/ppvalbok/trunk

« back to all changes in this revision

Viewing changes to votesys/views.py

  • Committer: Lars Luthman
  • Date: 2009-04-22 17:00:57 UTC
  • Revision ID: lars.luthman@gmail.com-20090422170057-jyl8006nmci7epli
Moved votesys to swevote, moved all non-static data to the new app ballot_system.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# -*- coding: utf-8 -*-
2
 
 
3
 
from django.contrib.auth.models import User
4
 
from django.http import Http404, HttpResponseRedirect
5
 
from django.shortcuts import get_object_or_404
6
 
from django.views.generic.simple import direct_to_template
7
 
from models import ZipCode, EarlyVotingStation, VotingStation, Region
8
 
 
9
 
def frontpage(request):
10
 
    message = None
11
 
    zipcode = ''
12
 
    if request.method == 'POST':
13
 
        clean_zip = request.POST['zipcode'].replace(" ", "")
14
 
        try:
15
 
            tmp = ZipCode.objects.get(zipcode=clean_zip)
16
 
            return HttpResponseRedirect('/volunteer/%s/' % clean_zip)
17
 
        except ZipCode.DoesNotExist:
18
 
            zipcode = request.POST['zipcode']
19
 
            message = 'Okänt postnummer'
20
 
    return direct_to_template(request, 'frontpage.html',
21
 
                              {'message': message,
22
 
                               'zipcode': zipcode})
23
 
 
24
 
def volunteer(request, zipcode):
25
 
    zipcode = ZipCode.objects.get(zipcode=zipcode)
26
 
    earlystations = \
27
 
      EarlyVotingStation.objects.filter(municipality=zipcode.municipality)
28
 
    stations = VotingStation.objects.filter(municipality=zipcode.municipality)
29
 
    return direct_to_template(request, 'next.html', 
30
 
                              {'zipcode': zipcode, 
31
 
                               'early_stations': earlystations, 
32
 
                               'stations': stations})
33
 
 
34
 
def station(request, zipcode, station):
35
 
    return direct_to_template(request, 'view_station.html')
36
 
 
37
 
def region(request, sname):
38
 
    reg = get_object_or_404(Region, shortname=sname)
39
 
    if not reg.user_may_view(request.user):
40
 
        return direct_to_template(request, 'base.html',
41
 
                                  {'error_message':
42
 
                                   'Du får inte se den här sidan!'})
43
 
    subregions = Region.objects.filter(parent=reg)
44
 
    stations = reg.votingstation_set.all()
45
 
    values = {'region': reg,
46
 
              'subregions': subregions,
47
 
              'stations': stations}
48
 
    return direct_to_template(request, 'view_region.html', values)
49
 
 
50
 
def calculate_distribution(request, sname):
51
 
    reg = get_object_or_404(Region, shortname=sname)
52
 
 
53
 
    if not reg.user_may_view(request.user):
54
 
        return direct_to_template(request, 'base.html',
55
 
                                  {'error_message':
56
 
                                   'Du får inte se den här sidan!'})
57
 
    
58
 
    subregions = reg.region_set.all()
59
 
    stations = reg.votingstation_set.all()
60
 
    early_stations = reg.earlyvotingstation_set.all()
61
 
    values = {'region': reg,
62
 
              'subregions': subregions,
63
 
              'stations': stations,
64
 
              'early_stations': early_stations}
65
 
    if 'error_message' in request.session:
66
 
        values['error_message'] = request.session['error_message']
67
 
        del request.session['error_message']
68
 
    if 'session_message' in request.session:
69
 
        values['session_message'] = request.session['session_message']
70
 
        del request.session['session_message']
71
 
    return direct_to_template(request, 'calculate_distribution.html', values)
72
 
 
73
 
def save_calculation(request, sname):
74
 
    if request.method == 'POST':
75
 
        post = request.POST
76
 
        reg = get_object_or_404(Region, shortname=sname)
77
 
        subregions = reg.region_set.all()
78
 
        stations = reg.votingstation_set.all()
79
 
        early_stations = reg.earlyvotingstation_set.all()
80
 
        
81
 
        # Check privileges
82
 
        if reg.user_may_edit(request.user):
83
 
            
84
 
            # Save region data
85
 
            if 'ballots_available' in post:
86
 
                reg.ballots_available = int(post['ballots_available'])
87
 
            if 'unit_size' in post:
88
 
                reg.ballot_unit_size = int(post['unit_size'])
89
 
            if 'early_percentage' in post:
90
 
                reg.ballot_early_percentage = int(post['early_percentage'])
91
 
            reg.save()
92
 
        
93
 
            # Save subregion data
94
 
            for subreg in subregions:
95
 
                name = 'region_' + subreg.shortname + '_value'
96
 
                if name in post:
97
 
                    subreg.ballots = int(post[name])
98
 
                if name + '_lock' in post and post[name + '_lock'] != 'off':
99
 
                    subreg.ballots_locked = True
100
 
                else:
101
 
                    subreg.ballots_locked = False
102
 
                subreg.save()
103
 
        
104
 
            # Save early voting station data
105
 
            for station in early_stations:
106
 
                name = 'early_%d_value' % station.pk
107
 
                if name in post:
108
 
                    station.ballots = int(post[name])
109
 
                if name + '_lock' in post and post[name + '_lock'] != 'off':
110
 
                    station.ballots_locked = True
111
 
                else:
112
 
                    station.ballots_locked = False
113
 
                station.save()
114
 
        
115
 
            # Save voting station data
116
 
            for station in stations:
117
 
                name = 'station_%d_value' % station.pk
118
 
                if name in post:
119
 
                    station.ballots = int(post[name])
120
 
                if name + '_lock' in post and post[name + '_lock'] != 'off':
121
 
                    station.ballots_locked = True
122
 
                else:
123
 
                    station.ballots_locked = False
124
 
                station.save()
125
 
        
126
 
            request.session['session_message'] = \
127
 
                u'Dina värden har sparats i databasen!'
128
 
        else:
129
 
            request.session['error_message'] = \
130
 
                u'Du får inte spara värden for den här regionen!'
131
 
 
132
 
    return HttpResponseRedirect('/region/' + sname + '/calculate/')
133
 
 
134
 
def user(request, uname):
135
 
    usr = get_object_or_404(User, username=uname)
136
 
    
137
 
    # The current user may view this user page if:
138
 
    #  * the current user is staff OR
139
 
    #  * the viewed user is manager for a region OR
140
 
    #  * the viewed user has signed up for a voting station that
141
 
    #    belongs to a region that the current user is allowed to see.
142
 
    allowed = False
143
 
    if request.user.is_staff or len(usr.region_set.all()) > 0:
144
 
        allowed = True
145
 
    stations = usr.votingstation_set.all()
146
 
    regions = usr.region_set.all()
147
 
    for station in stations:
148
 
        if station.region and station.region.user_may_view(request.user):
149
 
            allowed = True
150
 
    values = {'view_user': usr,
151
 
              'regions': regions,
152
 
              'stations': stations}
153
 
    
154
 
    if not allowed:
155
 
        return direct_to_template(request, 'base.html',
156
 
                                  {'error_message':
157
 
                                   'Du får inte se den här sidan!'})
158
 
    
159
 
    return direct_to_template(request, 'view_user.html', values)