Add time restrictions
This commit is contained in:
parent
bffccdc055
commit
54e9442d7e
2 changed files with 45 additions and 9 deletions
|
@ -1,7 +1,27 @@
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.forms.models import inlineformset_factory
|
from django.forms.models import inlineformset_factory
|
||||||
|
from django.utils import timezone
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from .models import Option, Question
|
from .models import Election, Option, Question
|
||||||
|
|
||||||
|
|
||||||
|
class ElectionCreateForm(forms.ModelForm):
|
||||||
|
def clean(self):
|
||||||
|
cleaned_data = super().clean()
|
||||||
|
if cleaned_data["start_date"] < timezone.now():
|
||||||
|
self.add_error(
|
||||||
|
"start_date", _("Impossible de faire débuter l'élection dans le passé")
|
||||||
|
)
|
||||||
|
elif cleaned_data["start_date"] >= cleaned_data["end_date"]:
|
||||||
|
self.add_error(
|
||||||
|
"end_date", _("Impossible de terminer l'élection avant de la commencer")
|
||||||
|
)
|
||||||
|
return cleaned_data
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Election
|
||||||
|
fields = ["name", "description", "start_date", "end_date"]
|
||||||
|
|
||||||
|
|
||||||
class VoteForm(forms.ModelForm):
|
class VoteForm(forms.ModelForm):
|
||||||
|
|
|
@ -9,7 +9,7 @@ from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import CreateView, DetailView, RedirectView, UpdateView
|
from django.views.generic import CreateView, DetailView, RedirectView, UpdateView
|
||||||
from django.views.generic.detail import SingleObjectMixin
|
from django.views.generic.detail import SingleObjectMixin
|
||||||
|
|
||||||
from .forms import OptionFormSet
|
from .forms import ElectionCreateForm, OptionFormSet
|
||||||
from .models import Election, Option, Question
|
from .models import Election, Option, Question
|
||||||
|
|
||||||
# TODO: access control *everywhere*
|
# TODO: access control *everywhere*
|
||||||
|
@ -17,9 +17,9 @@ from .models import Election, Option, Question
|
||||||
|
|
||||||
class ElectionCreateView(SuccessMessageMixin, CreateView):
|
class ElectionCreateView(SuccessMessageMixin, CreateView):
|
||||||
model = Election
|
model = Election
|
||||||
fields = ["name", "description", "start_date", "end_date"]
|
form_class = ElectionCreateForm
|
||||||
template_name = "elections/election_create.html"
|
template_name = "elections/election_create.html"
|
||||||
success_message = _("Élection crée avec succès !")
|
success_message = _("Élection créée avec succès !")
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return reverse("election.admin", args=[self.object.pk])
|
return reverse("election.admin", args=[self.object.pk])
|
||||||
|
@ -27,7 +27,7 @@ class ElectionCreateView(SuccessMessageMixin, CreateView):
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
# We need to add the short name and the creator od the election
|
# We need to add the short name and the creator od the election
|
||||||
form.instance.short_name = slugify(
|
form.instance.short_name = slugify(
|
||||||
str(form.instance.start_date.year) + "_" + form.instance.name
|
form.instance.start_date.strftime("%Y-%m-%d") + "_" + form.instance.name
|
||||||
)[:50]
|
)[:50]
|
||||||
# TODO: Change this if we modify the user model
|
# TODO: Change this if we modify the user model
|
||||||
form.instance.created_by = self.request.user
|
form.instance.created_by = self.request.user
|
||||||
|
@ -57,8 +57,8 @@ class ElectionUpdateView(SuccessMessageMixin, UpdateView):
|
||||||
return reverse("election.admin", args=[self.object.pk])
|
return reverse("election.admin", args=[self.object.pk])
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
# On ne peut plus modifier une élection déjà comptée
|
# On ne peut plus modifier une élection qui a déjà commencé
|
||||||
return super().get_queryset().filter(tallied=False, archived=False)
|
return super().get_queryset().filter(start_date__gt=timezone.now())
|
||||||
|
|
||||||
|
|
||||||
class ElectionTallyView(SuccessMessageMixin, SingleObjectMixin, RedirectView):
|
class ElectionTallyView(SuccessMessageMixin, SingleObjectMixin, RedirectView):
|
||||||
|
@ -66,7 +66,12 @@ class ElectionTallyView(SuccessMessageMixin, SingleObjectMixin, RedirectView):
|
||||||
pattern_name = "election.admin"
|
pattern_name = "election.admin"
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return super().get_queryset().prefetch_related("questions__options")
|
return (
|
||||||
|
super()
|
||||||
|
.get_queryset()
|
||||||
|
.filter(end_date__lt=timezone.now())
|
||||||
|
.prefetch_related("questions__options")
|
||||||
|
)
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
election = self.get_object()
|
election = self.get_object()
|
||||||
|
@ -95,6 +100,9 @@ class ElectionChangePublicationView(
|
||||||
model = Election
|
model = Election
|
||||||
pattern_name = "election.admin"
|
pattern_name = "election.admin"
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return super().get_queryset().filter(end_date__lt=timezone.now())
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
election = self.get_object()
|
election = self.get_object()
|
||||||
election.results_public = not election.results_public
|
election.results_public = not election.results_public
|
||||||
|
@ -112,6 +120,9 @@ class ElectionArchiveView(SuccessMessageMixin, SingleObjectMixin, RedirectView):
|
||||||
model = Election
|
model = Election
|
||||||
pattern_name = "election.admin"
|
pattern_name = "election.admin"
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return super().get_queryset().filter(end_date__lt=timezone.now())
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
election = self.get_object()
|
election = self.get_object()
|
||||||
election.archived = True
|
election.archived = True
|
||||||
|
@ -148,7 +159,12 @@ class VoteView(SuccessMessageMixin, DetailView):
|
||||||
return (
|
return (
|
||||||
super()
|
super()
|
||||||
.get_queryset()
|
.get_queryset()
|
||||||
.filter(election__tallied=False, election__archived=False)
|
.filter(
|
||||||
|
election__tallied=False,
|
||||||
|
election__archived=False,
|
||||||
|
election__start_date__lt=timezone.now(),
|
||||||
|
election__end_date__gt=timezone.now(),
|
||||||
|
)
|
||||||
.select_related("election")
|
.select_related("election")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue