1
# -*- coding: utf-8 -*-
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
9
def frontpage(request):
12
if request.method == 'POST':
13
clean_zip = request.POST['zipcode'].replace(" ", "")
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',
24
def volunteer(request, zipcode):
25
zipcode = ZipCode.objects.get(zipcode=zipcode)
27
EarlyVotingStation.objects.filter(municipality=zipcode.municipality)
28
stations = VotingStation.objects.filter(municipality=zipcode.municipality)
29
return direct_to_template(request, 'next.html',
31
'early_stations': earlystations,
32
'stations': stations})
34
def station(request, zipcode, station):
35
return direct_to_template(request, 'view_station.html')
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',
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,
48
return direct_to_template(request, 'view_region.html', values)
50
def calculate_distribution(request, sname):
51
reg = get_object_or_404(Region, shortname=sname)
53
if not reg.user_may_view(request.user):
54
return direct_to_template(request, 'base.html',
56
'Du får inte se den här sidan!'})
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,
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)
73
def save_calculation(request, sname):
74
if request.method == '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()
82
if reg.user_may_edit(request.user):
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'])
94
for subreg in subregions:
95
name = 'region_' + subreg.shortname + '_value'
97
subreg.ballots = int(post[name])
98
if name + '_lock' in post and post[name + '_lock'] != 'off':
99
subreg.ballots_locked = True
101
subreg.ballots_locked = False
104
# Save early voting station data
105
for station in early_stations:
106
name = 'early_%d_value' % station.pk
108
station.ballots = int(post[name])
109
if name + '_lock' in post and post[name + '_lock'] != 'off':
110
station.ballots_locked = True
112
station.ballots_locked = False
115
# Save voting station data
116
for station in stations:
117
name = 'station_%d_value' % station.pk
119
station.ballots = int(post[name])
120
if name + '_lock' in post and post[name + '_lock'] != 'off':
121
station.ballots_locked = True
123
station.ballots_locked = False
126
request.session['session_message'] = \
127
u'Dina värden har sparats i databasen!'
129
request.session['error_message'] = \
130
u'Du får inte spara värden for den här regionen!'
132
return HttpResponseRedirect('/region/' + sname + '/calculate/')
134
def user(request, uname):
135
usr = get_object_or_404(User, username=uname)
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.
143
if request.user.is_staff or len(usr.region_set.all()) > 0:
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):
150
values = {'view_user': usr,
152
'stations': stations}
155
return direct_to_template(request, 'base.html',
157
'Du får inte se den här sidan!'})
159
return direct_to_template(request, 'view_user.html', values)