Proper use of messages in BdA inscription

This commit is contained in:
Martin Pépin 2017-01-29 17:13:01 +01:00
parent 0666b5288f
commit 91fff8a11e
4 changed files with 34 additions and 21 deletions

View file

@ -91,12 +91,6 @@ var django = {
</script> </script>
<h2 class="no-bottom-margin">Inscription au tirage au sort du BdA</h2> <h2 class="no-bottom-margin">Inscription au tirage au sort du BdA</h2>
{% if success %}
<p class="success table-top">Votre inscription a été mise à jour avec succès !</p>
{% endif %}
{% if stateerror %}
<p class="error table-top">Impossible d'enregistrer vos modifications: vous avez apporté d'autres modifications entre temps</p>
{% endif %}
<form class="form-horizontal" id="bda_form" method="post" action="{% url 'bda-tirage-inscription' tirage.id %}"> <form class="form-horizontal" id="bda_form" method="post" action="{% url 'bda-tirage-inscription' tirage.id %}">
{% csrf_token %} {% csrf_token %}
{% include "bda/inscription-formset.html" %} {% include "bda/inscription-formset.html" %}
@ -113,7 +107,7 @@ var django = {
<input type="submit" class="btn btn-primary" value="Enregistrer" /> <input type="submit" class="btn btn-primary" value="Enregistrer" />
</div> </div>
<p class="footnotes"> <p class="footnotes">
<sup>1</sup>: cette liste de v&oelig;u est ordonnée (du plus important au moins important), pour ajuster la priorité vous pouvez déplacer chaque v&oelig;u.<br /> <sup>1</sup>: cette liste de v&oelig;ux est ordonnée (du plus important au moins important), pour ajuster la priorité vous pouvez déplacer chaque v&oelig;u.<br />
</p> </p>
</div> </div>
</form> </form>

View file

@ -1,8 +1,6 @@
{% extends "base_title.html" %} {% extends "base_title.html" %}
{% block realcontent %} {% block realcontent %}
<h1><strong>{{ error_title }}</strong></h1>
<p>{{ error_description }}</p>
{% if choices %} {% if choices %}
<h3>Vos v&oelig;ux:</h3> <h3>Vos v&oelig;ux:</h3>
<ol> <ol>

View file

@ -8,6 +8,7 @@ from datetime import timedelta
from django.shortcuts import render, get_object_or_404 from django.shortcuts import render, get_object_or_404
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.db import models, transaction from django.db import models, transaction
from django.db.models import Count, Q, Sum from django.db.models import Count, Q, Sum
from django.core import serializers, mail from django.core import serializers, mail
@ -17,7 +18,7 @@ from django.core.urlresolvers import reverse
from django.conf import settings from django.conf import settings
from django.core.mail import send_mail from django.core.mail import send_mail
from django.template import loader from django.template import loader
from django.utils import timezone from django.utils import timezone, formats
from django.views.generic.list import ListView from django.views.generic.list import ListView
from gestioncof.decorators import cof_required, buro_required from gestioncof.decorators import cof_required, buro_required
@ -121,23 +122,37 @@ def places(request, tirage_id):
@cof_required @cof_required
def inscription(request, tirage_id): def inscription(request, tirage_id):
"""
Vue d'inscription à un tirage BdA.
- On vérifie qu'on se situe bien entre la date d'ouverture et la date de
fermeture des inscriptions.
- On vérifie que l'inscription n'a pas été modifiée entre le moment le
client demande le formulaire et le moment il soumet son inscription
(autre session par exemple).
"""
tirage = get_object_or_404(Tirage, id=tirage_id) tirage = get_object_or_404(Tirage, id=tirage_id)
if timezone.now() < tirage.ouverture: if timezone.now() < tirage.ouverture:
error_desc = tirage.ouverture.strftime('Ouverture le %d %b %Y à %H:%M') # Le tirage n'est pas encore ouvert.
return render(request, 'bda/resume-inscription-tirage.html', opening = formats.localize(
{"error_title": "Le tirage n'est pas encore ouvert !", timezone.template_localtime(tirage.ouverture))
"error_description": error_desc}) messages.error(request, "Le tirage n'est pas encore ouvert : "
"ouverture le {:s}".format(opening))
return render(request, 'bda/resume-inscription-tirage.html', {})
if timezone.now() > tirage.fermeture: if timezone.now() > tirage.fermeture:
# Le tirage est fermé.
participant, created = Participant.objects.get_or_create( participant, created = Participant.objects.get_or_create(
user=request.user, tirage=tirage) user=request.user, tirage=tirage)
choices = participant.choixspectacle_set.order_by("priority").all() choices = participant.choixspectacle_set.order_by("priority").all()
messages.error(request,
" C'est fini : tirage au sort dans la journée !")
return render(request, "bda/resume-inscription-tirage.html", return render(request, "bda/resume-inscription-tirage.html",
{"error_title": "C'est fini !", {"choices": choices})
"error_description":
"Tirage au sort dans la journée !",
"choices": choices})
def formfield_callback(f, **kwargs): def formfield_callback(f, **kwargs):
"""
Fonction utilisée par inlineformset_factory ci dessous.
Restreint les spectacles proposés aux spectacles du bo tirage.
"""
if f.name == "spectacle": if f.name == "spectacle":
kwargs['queryset'] = tirage.spectacle_set kwargs['queryset'] = tirage.spectacle_set
return f.formfield(**kwargs) return f.formfield(**kwargs)
@ -170,13 +185,19 @@ def inscription(request, tirage_id):
total_price += choice.spectacle.price total_price += choice.spectacle.price
if choice.double: if choice.double:
total_price += choice.spectacle.price total_price += choice.spectacle.price
# Messages
if success:
messages.success(request, "Votre inscription a été mise à jour avec "
"succès !")
if stateerror:
messages.error(request, "Impossible d'enregistrer vos modifications "
": vous avez apporté d'autres modifications "
"entre temps.")
return render(request, "bda/inscription-tirage.html", return render(request, "bda/inscription-tirage.html",
{"formset": formset, {"formset": formset,
"success": success,
"total_price": total_price, "total_price": total_price,
"dbstate": dbstate, "dbstate": dbstate,
'tirage': tirage, 'tirage': tirage})
"stateerror": stateerror})
def do_tirage(request, tirage_id): def do_tirage(request, tirage_id):