mirror of
https://github.com/ae-utbm/sith.git
synced 2025-07-09 19:40:19 +00:00
Removed useless widget added previously + began voteform
This commit is contained in:
@ -80,6 +80,9 @@ class Candidature(models.Model):
|
||||
program = models.TextField(_('description'), null=True, blank=True)
|
||||
election_list = models.ForeignKey(ElectionList, related_name='candidature', verbose_name=_('election_list'))
|
||||
|
||||
def __str__(self):
|
||||
return "%s : %s" % (self.role.title, self.user.username)
|
||||
|
||||
|
||||
class Vote(models.Model):
|
||||
"""
|
||||
|
@ -8,5 +8,6 @@ urlpatterns = [
|
||||
url(r'^list/create$', ElectionListCreateView.as_view(), name='create_list'),
|
||||
url(r'^role/create$', RoleCreateView.as_view(), name='create_role'),
|
||||
url(r'^(?P<election_id>[0-9]+)/candidate$', CandidatureCreateView.as_view(), name='candidate'),
|
||||
url(r'^(?P<election_id>[0-9]+)/vote$', VoteFormView.as_view(), name='vote'),
|
||||
url(r'^(?P<election_id>[0-9]+)/detail$', ElectionDetailView.as_view(), name='detail'),
|
||||
]
|
||||
|
@ -11,8 +11,8 @@ from django.conf import settings
|
||||
from django import forms
|
||||
|
||||
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin
|
||||
from django.views.generic.edit import FormMixin
|
||||
from core.views.forms import SelectDateTime
|
||||
from core.widgets import ChoiceWithOtherField
|
||||
from election.models import Election, Role, Candidature, ElectionList
|
||||
|
||||
from ajax_select.fields import AutoCompleteSelectField
|
||||
@ -31,6 +31,25 @@ class CandidateForm(forms.Form):
|
||||
self.fields['role'] = forms.ModelChoiceField(Role.objects.filter(election__id=election_id))
|
||||
self.fields['election_list'] = forms.ModelChoiceField(ElectionList.objects.filter(election__id=election_id))
|
||||
|
||||
|
||||
class VoteForm(forms.Form):
|
||||
def __init__(self, role_id, *args, **kwargs):
|
||||
super(VoteForm, self).__init__(*args, **kwargs)
|
||||
self.max_choice = Role.objects.get(id=role_id).max_choice
|
||||
cand = Candidature.objects.filter(role__id=role_id)
|
||||
if self.max_choice > 1:
|
||||
self.fields['candidature'] = forms.ModelMultipleChoiceField(cand, required=False,
|
||||
widget=forms.CheckboxSelectMultiple())
|
||||
else:
|
||||
self.fields['candidature'] = forms.ModelChoiceField(cand, required=False,
|
||||
widget=forms.RadioSelect(), empty_label=_("Blank vote"))
|
||||
|
||||
def clean_candidature(self):
|
||||
data = self.cleaned_data['candidature']
|
||||
if self.max_choice > 1 and len(data) > self.max_choice:
|
||||
raise forms.ValidationError(_("You have selected too much candidate"))
|
||||
return data
|
||||
|
||||
# Display elections
|
||||
|
||||
|
||||
@ -110,6 +129,43 @@ class CandidatureCreateView(CanCreateMixin, FormView):
|
||||
return reverse_lazy('election:detail', kwargs={'election_id': self.election_id})
|
||||
|
||||
|
||||
class VoteFormView(CanCreateMixin, FormView):
|
||||
"""
|
||||
Alows users to vote
|
||||
"""
|
||||
form_class = VoteForm
|
||||
template_name = 'core/page_prop.jinja'
|
||||
|
||||
def dispatch(self, request, *arg, **kwargs):
|
||||
self.election_id = kwargs['election_id']
|
||||
return super(VoteFormView, self).dispatch(request, *arg, **kwargs)
|
||||
|
||||
def vote(self, data):
|
||||
pass
|
||||
|
||||
def get_form_kwargs(self):
|
||||
kwargs = super(VoteFormView, self).get_form_kwargs()
|
||||
kwargs['role_id'] = self.election_id
|
||||
return kwargs
|
||||
|
||||
def form_valid(self, form):
|
||||
"""
|
||||
Verify that the user is part in a vote group
|
||||
"""
|
||||
data = form.clean()
|
||||
res = super(FormView, self).form_valid(form)
|
||||
if self.request.user.is_root:
|
||||
self.vote(data)
|
||||
return res
|
||||
for grp in data['role'].election.vote_groups.all():
|
||||
if self.request.user.is_in_group(grp):
|
||||
self.vote(data)
|
||||
return res
|
||||
return res
|
||||
|
||||
def get_success_url(self, **kwargs):
|
||||
return reverse_lazy('election:detail', kwargs={'election_id': self.election_id})
|
||||
|
||||
# Create views
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user