From dbd017f680c38ef8c9a567658c6eb138ff81e82d Mon Sep 17 00:00:00 2001 From: Ludovic Stephan Date: Wed, 21 Nov 2018 16:14:52 +0100 Subject: [PATCH] Prettify revente/subscribe --- bda/forms.py | 27 +++++++++++- .../bda/forms/spectacle_checkbox_table.html | 4 ++ .../bda/forms/spectacle_label_table.html | 4 ++ bda/templates/bda/revente/subscribe.html | 41 ++++++++++++------- bda/views.py | 6 +-- 5 files changed, 63 insertions(+), 19 deletions(-) create mode 100644 bda/templates/bda/forms/spectacle_checkbox_table.html create mode 100644 bda/templates/bda/forms/spectacle_label_table.html diff --git a/bda/forms.py b/bda/forms.py index 94a52128..8e3038a6 100644 --- a/bda/forms.py +++ b/bda/forms.py @@ -1,5 +1,6 @@ from django import forms from django.forms.models import BaseInlineFormSet +from django.template import loader from django.utils import timezone from bda.models import Attribution, Spectacle, SpectacleRevente @@ -110,11 +111,32 @@ class AnnulForm(forms.Form): ) +class TemplateLabelField(forms.ModelMultipleChoiceField): + """ + Offers an option to render a label with Django template rendering + """ + + def __init__(self, template_name=None, context_object_name="obj", *args, **kwargs): + super().__init__(*args, **kwargs) + self.template_name = template_name + self.context_object_name = context_object_name + + def label_from_instance(self, obj): + if self.template_name is None: + return super().label_from_instance(obj) + else: + return loader.render_to_string( + self.template_name, context={self.context_object_name: obj} + ) + + class InscriptionReventeForm(forms.Form): - spectacles = forms.ModelMultipleChoiceField( + spectacles = TemplateLabelField( queryset=Spectacle.objects.none(), widget=forms.CheckboxSelectMultiple, required=False, + template_name="bda/forms/spectacle_label_table.html", + context_object_name="spectacle", ) def __init__(self, tirage, *args, **kwargs): @@ -122,6 +144,9 @@ class InscriptionReventeForm(forms.Form): self.fields["spectacles"].queryset = tirage.spectacle_set.select_related( "location" ).filter(date__gte=timezone.now()) + self.fields[ + "spectacles" + ].widget.option_template_name = "bda/forms/spectacle_checkbox_table.html" class ReventeTirageAnnulForm(forms.Form): diff --git a/bda/templates/bda/forms/spectacle_checkbox_table.html b/bda/templates/bda/forms/spectacle_checkbox_table.html new file mode 100644 index 00000000..e13a9c9d --- /dev/null +++ b/bda/templates/bda/forms/spectacle_checkbox_table.html @@ -0,0 +1,4 @@ + + + {{ widget.label }} + \ No newline at end of file diff --git a/bda/templates/bda/forms/spectacle_label_table.html b/bda/templates/bda/forms/spectacle_label_table.html new file mode 100644 index 00000000..a2c4181f --- /dev/null +++ b/bda/templates/bda/forms/spectacle_label_table.html @@ -0,0 +1,4 @@ +{{ spectacle.title }} +{{ spectacle.date }} +{{ spectacle.location }} +{{ spectacle.price |floatformat }}€ \ No newline at end of file diff --git a/bda/templates/bda/revente/subscribe.html b/bda/templates/bda/revente/subscribe.html index 9a193908..8a9545eb 100644 --- a/bda/templates/bda/revente/subscribe.html +++ b/bda/templates/bda/revente/subscribe.html @@ -1,12 +1,12 @@ {% extends "base_title.html" %} -{% load bootstrap %} +{% load staticfiles%} {% block realcontent %}

Inscriptions pour BdA-Revente

- Cochez les spectacles pour lesquels vous souhaitez recevoir un + Cochez les spectacles pour lesquels vous souhaitez recevoir une notification quand une place est disponible en revente.
Lorsque vous validez vos choix, si un tirage au sort est en cours pour un des spectacles que vous avez sélectionné, vous serez automatiquement @@ -21,26 +21,37 @@ + + + + + + + + + + + + {% for checkbox in form.spectacles %}{{ checkbox }}{% endfor %} + +
TitreDateLieuPrix
-
-
    - {% for checkbox in form.spectacles %} -
  • {{ checkbox }}
  • - {% endfor %} -
-
+ {% endblock %} diff --git a/bda/views.py b/bda/views.py index 050d6851..7e8d9167 100644 --- a/bda/views.py +++ b/bda/views.py @@ -569,18 +569,18 @@ def revente_subscribe(request, tirage_id): ) # Messages if success: - messages.success(request, "Ton inscription a bien été prise en compte") + messages.success(request, "Votre inscription a bien été prise en compte") if deja_revente: messages.info( request, "Des reventes existent déjà pour certains de " - "ces spectacles, vérifie les places " + "ces spectacles, vérifiez les places " "disponibles sans tirage !", ) if inscrit_revente: shows = map("
  • {!s}
  • ".format, inscrit_revente) msg = ( - "Tu as été inscrit à des reventes en cours pour les spectacles " + "Vous avez été inscrit·e à des reventes en cours pour les spectacles " "".format("\n".join(shows)) ) messages.info(request, msg, extra_tags="safe")