use forms
This commit is contained in:
parent
d12a21d44c
commit
460a135fa5
4 changed files with 94 additions and 27 deletions
40
bda/forms.py
40
bda/forms.py
|
@ -4,10 +4,12 @@ from __future__ import division
|
|||
from __future__ import print_function
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from datetime import timedelta
|
||||
|
||||
from django import forms
|
||||
from django.forms.models import BaseInlineFormSet
|
||||
from django.utils import timezone
|
||||
from bda.models import Attribution
|
||||
from bda.models import Attribution, Spectacle
|
||||
|
||||
|
||||
class BaseBdaFormSet(BaseInlineFormSet):
|
||||
|
@ -36,19 +38,45 @@ class TokenForm(forms.Form):
|
|||
token = forms.CharField(widget=forms.widgets.Textarea())
|
||||
|
||||
|
||||
class SpectacleModelChoiceField(forms.ModelChoiceField):
|
||||
class AttributionModelMultipleChoiceField(forms.ModelMultipleChoiceField):
|
||||
def label_from_instance(self, obj):
|
||||
return "%s le %s (%s) à %.02f€" % (obj.title, obj.date_no_seconds(),
|
||||
obj.location, obj.price)
|
||||
return "%s" % obj.spectacle
|
||||
|
||||
|
||||
class ResellForm(forms.Form):
|
||||
attributions = forms.ModelMultipleChoiceField(
|
||||
attributions = AttributionModelMultipleChoiceField(
|
||||
queryset=Attribution.objects.none(),
|
||||
widget=forms.CheckboxSelectMultiple)
|
||||
widget=forms.CheckboxSelectMultiple,
|
||||
required=False)
|
||||
|
||||
def __init__(self, participant, *args, **kwargs):
|
||||
super(ResellForm, self).__init__(*args, **kwargs)
|
||||
self.fields['attributions'].queryset = participant.attribution_set\
|
||||
.filter(spectacle__date__gte=timezone.now(),
|
||||
revente__isnull=True)
|
||||
|
||||
|
||||
class AnnulForm(forms.Form):
|
||||
attributions = AttributionModelMultipleChoiceField(
|
||||
queryset=Attribution.objects.none(),
|
||||
widget=forms.CheckboxSelectMultiple,
|
||||
required=False)
|
||||
|
||||
def __init__(self, participant, *args, **kwargs):
|
||||
super(AnnulForm, self).__init__(*args, **kwargs)
|
||||
self.fields['attributions'].queryset = participant.attribution_set\
|
||||
.filter(spectacle__date__gte=timezone.now(),
|
||||
revente__isnull=False,
|
||||
revente__date__gte=timezone.now()-timedelta(hours=1))
|
||||
|
||||
|
||||
class InscriptionReventeForm(forms.Form):
|
||||
spectacles = forms.ModelMultipleChoiceField(
|
||||
queryset=Spectacle.objects.none(),
|
||||
widget=forms.CheckboxSelectMultiple,
|
||||
required=False)
|
||||
|
||||
def __init__(self, tirage, *args, **kwargs):
|
||||
super(InscriptionReventeForm, self).__init__(*args, **kwargs)
|
||||
self.fields['spectacles'].queryset = tirage.spectacle_set.filter(
|
||||
date__gte=timezone.now())
|
||||
|
|
|
@ -7,7 +7,20 @@
|
|||
<h2>Places non revendues</h2>
|
||||
<form action="" method="post">
|
||||
{% csrf_token %}
|
||||
{{form}}
|
||||
<input type="submit" value="Revendre les places sélectionnées">
|
||||
{{resellform}}
|
||||
<input type="submit" name="resell" value="Revendre les places sélectionnées">
|
||||
</form>
|
||||
|
||||
<h2>Places en cours de revente</h2>
|
||||
<form action="" method="post">
|
||||
{% csrf_token %}
|
||||
<ul>
|
||||
{% for box in annulform.attributions %}
|
||||
<li>{{box.choice_label}}{{box.tag}}</li>
|
||||
{% endfor %}
|
||||
{% for attrib in overdue %}
|
||||
<li>{{attrib.spectacle}}</li>
|
||||
{%endfor%}
|
||||
</ul>
|
||||
<input type="submit" name="annul" value="Annuler les reventes sélectionnées">
|
||||
{% endblock %}
|
||||
|
|
|
@ -5,11 +5,7 @@
|
|||
<h2>Inscriptions pour BDA-Revente</h2>
|
||||
<form action="" method="post">
|
||||
{% csrf_token %}
|
||||
<ul>
|
||||
{% for spectacle in spectacles %}
|
||||
<li>{{spectacle}} <input type="checkbox" name="spect_id" value="{{spectacle.id}}" {% if spectacle.am_interested %}checked{%endif%}></li>
|
||||
{%endfor%}
|
||||
</ul>
|
||||
{{form}}
|
||||
<input type="submit" value="S'inscrire pour les places sélectionnées">
|
||||
</form>
|
||||
|
||||
|
|
58
bda/views.py
58
bda/views.py
|
@ -26,7 +26,8 @@ from bda.models import Spectacle, Participant, ChoixSpectacle, Attribution,\
|
|||
Tirage, render_template, SpectacleRevente
|
||||
from bda.algorithm import Algorithm
|
||||
|
||||
from bda.forms import BaseBdaFormSet, TokenForm, ResellForm
|
||||
from bda.forms import BaseBdaFormSet, TokenForm, ResellForm, AnnulForm,\
|
||||
InscriptionReventeForm
|
||||
|
||||
|
||||
@cof_required
|
||||
|
@ -304,16 +305,35 @@ def revente(request, tirage_id):
|
|||
if not participant.paid:
|
||||
return render(request, "bda-notpaid.html", {})
|
||||
if request.method == 'POST':
|
||||
form = ResellForm(participant, request.POST)
|
||||
if form.is_valid():
|
||||
attributions = form.cleaned_data["attributions"]
|
||||
for attribution in attributions:
|
||||
revente = SpectacleRevente(attribution=attribution)
|
||||
revente.save()
|
||||
if 'resell' in request.POST:
|
||||
resellform = ResellForm(participant, request.POST, prefix='resell')
|
||||
annulform = AnnulForm(participant, prefix='annul')
|
||||
if resellform.is_valid():
|
||||
attributions = resellform.cleaned_data["attributions"]
|
||||
for attribution in attributions:
|
||||
revente = SpectacleRevente(attribution=attribution)
|
||||
revente.save()
|
||||
elif 'annul' in request.POST:
|
||||
annulform = AnnulForm(participant, request.POST, prefix='annul')
|
||||
resellform = ResellForm(participant, prefix='resell')
|
||||
if annulform.is_valid():
|
||||
attributions = annulform.cleaned_data["attributions"]
|
||||
for attribution in attributions:
|
||||
attribution.revente.delete()
|
||||
else:
|
||||
resellform = ResellForm(participant, prefix='resell')
|
||||
annulform = AnnulForm(participant, prefix='annul')
|
||||
else:
|
||||
form = ResellForm(participant)
|
||||
resellform = ResellForm(participant, prefix='resell')
|
||||
annulform = AnnulForm(participant, prefix='annul')
|
||||
overdue = participant.attribution_set.filter(
|
||||
spectacle__date__gte=timezone.now(),
|
||||
revente__isnull=False,
|
||||
revente__date__lte=timezone.now()-timedelta(hours=1))
|
||||
|
||||
return render(request, "bda-revente.html",
|
||||
{'tirage': tirage, "form": form})
|
||||
{'tirage': tirage, 'overdue': overdue,
|
||||
"annulform": annulform, "resellform": resellform})
|
||||
|
||||
|
||||
@login_required
|
||||
|
@ -321,11 +341,10 @@ def list_revente(request, tirage_id):
|
|||
tirage = get_object_or_404(Tirage, id=tirage_id)
|
||||
participant, created = Participant.objects.get_or_create(
|
||||
user=request.user, tirage=tirage)
|
||||
spectacles = tirage.spectacle_set.all()
|
||||
spectacles = tirage.spectacle_set.filter(
|
||||
date__gte=timezone.now())
|
||||
shotgun = []
|
||||
for spectacle in spectacles:
|
||||
spectacle.am_interested = spectacle.revente.filter(
|
||||
pk=participant.id).exists()
|
||||
revente_objects = SpectacleRevente.objects.filter(
|
||||
attribution__spectacle=spectacle)
|
||||
revente_count = 0
|
||||
|
@ -335,9 +354,20 @@ def list_revente(request, tirage_id):
|
|||
if revente_count:
|
||||
spectacle.revente_count = revente_count
|
||||
shotgun.append(spectacle)
|
||||
|
||||
if request.method == 'POST':
|
||||
form = InscriptionReventeForm(tirage, request.POST)
|
||||
if form.is_valid():
|
||||
choices = form.cleaned_data['spectacles']
|
||||
participant.choicesrevente = choices
|
||||
participant.save()
|
||||
else:
|
||||
form = InscriptionReventeForm(
|
||||
tirage,
|
||||
initial={'spectacles': participant.choicesrevente.all()})
|
||||
|
||||
return render(request, "liste-reventes.html",
|
||||
{"participant": participant, 'tirage': tirage,
|
||||
"spectacles": spectacles, 'shotgun': shotgun})
|
||||
{"form": form, 'shotgun': shotgun})
|
||||
|
||||
|
||||
@login_required
|
||||
|
|
Loading…
Reference in a new issue