Add unsubscribe option + list of current draws

This commit is contained in:
Ludovic Stephan 2017-10-23 17:25:58 +02:00
parent fccad5edee
commit 732e47707e
5 changed files with 126 additions and 11 deletions

View file

@ -4,7 +4,7 @@ from django import forms
from django.forms.models import BaseInlineFormSet
from django.utils import timezone
from bda.models import Attribution, Spectacle
from bda.models import Attribution, Spectacle, SpectacleRevente
class InscriptionInlineFormSet(BaseInlineFormSet):
@ -45,6 +45,9 @@ class AttributionModelMultipleChoiceField(forms.ModelMultipleChoiceField):
def label_from_instance(self, obj):
return "%s" % str(obj.spectacle)
class ReventeModelMultipleChoiceField(forms.ModelMultipleChoiceField):
def label_from_instance(self, obj):
return "%s" % str(obj.attribution.spectacle)
class ResellForm(forms.Form):
attributions = AttributionModelMultipleChoiceField(
@ -63,7 +66,6 @@ class ResellForm(forms.Form):
'participant__user')
)
class AnnulForm(forms.Form):
attributions = AttributionModelMultipleChoiceField(
label='',
@ -83,7 +85,6 @@ class AnnulForm(forms.Form):
'participant__user')
)
class InscriptionReventeForm(forms.Form):
spectacles = forms.ModelMultipleChoiceField(
queryset=Spectacle.objects.none(),
@ -98,6 +99,40 @@ class InscriptionReventeForm(forms.Form):
.filter(date__gte=timezone.now())
)
class ReventeTirageAnnulForm(forms.Form):
reventes = ReventeModelMultipleChoiceField(
label='',
queryset=SpectacleRevente.objects.none(),
widget=forms.CheckboxSelectMultiple,
required=False
)
def __init__(self, participant, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['reventes'].queryset = (
participant.wanted.filter(soldTo__isnull=True)
.select_related('attribution__spectacle')
)
class ReventeTirageForm(forms.Form):
reventes = ReventeModelMultipleChoiceField(
label='',
queryset=SpectacleRevente.objects.none(),
widget=forms.CheckboxSelectMultiple,
required=False
)
def __init__(self, participant, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['reventes'].queryset = (
SpectacleRevente.objects.filter(
notif_sent=True,
shotgun=False,
tirage_done=False
).exclude(answered_mail=participant)
.select_related('attribution__spectacle')
)
class SoldForm(forms.Form):
attributions = AttributionModelMultipleChoiceField(

View file

@ -0,0 +1,28 @@
{% extends "base_title.html" %}
{% load bootstrap %}
{% block realcontent %}
<h2>Tirages au sort de reventes</h2>
{% if annulform.reventes %}
<h3>Mes inscriptions</h3>
<form class="form-horizontal" action="" method="post">
{% csrf_token %}
{{annulform|bootstrap}}
<div class="form-actions">
<input type="submit" class="btn btn-primary" name="annul" value="Se désinscrire des tirages sélectionnés">
</div>
</form>
{% endif %}
<br>
{% if subform.reventes %}
<h3>Tirages en cours</h3>
<form class="form-horizontal" action="" method="post">
{% csrf_token %}
{{subform|bootstrap}}
<div class="form-actions">
<input type="submit" class="btn btn-primary" name="subscribe" value="S'inscrire aux tirages sélectionnés">
</div>
</form>
{% endif %}
{% endblock %}

View file

@ -32,16 +32,19 @@ urlpatterns = [
url(r'^spectacles/unpaid/(?P<tirage_id>\d+)$',
views.unpaid,
name="bda-unpaid"),
url(r'^liste-revente/(?P<tirage_id>\d+)$',
url(r'^revente/(?P<tirage_id>\d+)/list$',
views.list_revente,
name="bda-liste-revente"),
url(r'^buy-revente/(?P<spectacle_id>\d+)$',
url(r'^revente/(?P<tirage_id>\d+)/tirages$',
views.revente_tirages,
name="bda-revente-tirages"),
url(r'^revente/(?P<spectacle_id>\d+)/buy$',
views.buy_revente,
name="bda-buy-revente"),
url(r'^revente-interested/(?P<revente_id>\d+)$',
url(r'^revente/(?P<revente_id>\d+)/interested$',
views.revente_interested,
name='bda-revente-interested'),
url(r'^revente-immediat/(?P<tirage_id>\d+)$',
url(r'^revente/(?P<tirage_id>\d+)/immediat$',
views.revente_shotgun,
name="bda-shotgun"),
url(r'^mails-rappel/(?P<spectacle_id>\d+)$',

View file

@ -30,7 +30,7 @@ from bda.models import (
from bda.algorithm import Algorithm
from bda.forms import (
TokenForm, ResellForm, AnnulForm, InscriptionReventeForm, SoldForm,
InscriptionInlineFormSet,
InscriptionInlineFormSet, ReventeTirageForm, ReventeTirageAnnulForm
)
@ -377,6 +377,7 @@ def revente(request, tirage_id):
if not created:
revente.seller = participant
revente.date = timezone.now()
revente.wanted = Participant.objects.none()
revente.soldTo = None
revente.notif_sent = False
revente.tirage_done = False
@ -442,6 +443,53 @@ def revente(request, tirage_id):
"annulform": annulform, "resellform": resellform})
@login_required
def revente_tirages(request, tirage_id):
tirage = get_object_or_404(Tirage, id=tirage_id)
participant, _ = Participant.objects.get_or_create(
user=request.user, tirage=tirage)
unsub = 0
subform = ReventeTirageForm(participant, prefix="subscribe")
annulform = ReventeTirageAnnulForm(participant, prefix="annul")
if request.method == 'POST':
if "subscribe" in request.POST:
subform = ReventeTirageForm(participant, request.POST,
prefix="subscribe")
if subform.is_valid():
sub = 0
reventes = subform.cleaned_data['reventes']
for revente in reventes:
revente.answered_mail.add(participant)
sub += 1
if sub > 0:
plural = "s" if sub > 1 else ""
messages.success(
request,
"Tu as bien été inscrit à {} revente{}"
.format(sub, plural)
)
elif "annul" in request.POST:
annulform = ReventeTirageAnnulForm(participant, request.POST,
prefix="annul")
if annulform.is_valid():
unsub = 0
reventes = annulform.cleaned_data['reventes']
for revente in reventes:
revente.answered_mail.remove(participant)
unsub += 1
if unsub > 0:
plural = "s" if unsub > 1 else ""
messages.success(
request,
"Tu as bien été désinscrit de {} revente{}"
.format(unsub, plural)
)
return render(request, "bda/revente-tirages.html",
{"annulform": annulform, "subform": subform})
@login_required
def revente_interested(request, revente_id):
revente = get_object_or_404(SpectacleRevente, id=revente_id)

View file

@ -43,9 +43,10 @@
<li><a href="{% url "bda-etat-places" tirage.id %}">État des demandes</a></li>
{% else %}
<li><a href="{% url "bda-places-attribuees" tirage.id %}">Mes places</a></li>
<li><a href="{% url "bda-revente" tirage.id %}">Revendre une place</a></li>
<li><a href="{% url "bda-liste-revente" tirage.id %}">S'inscrire à BdA-Revente</a></li>
<li><a href="{% url "bda-shotgun" tirage.id %}">Places disponibles immédiatement</a></li>
<li><a href="{% url "bda-revente" tirage.id %}">Gestion de mes reventes</a></li>
<li><a href="{% url "bda-revente-tirages" tirage.id %}">Reventes en cours</a></li>
<li><a href="{% url "bda-liste-revente" tirage.id %}">S'inscrire à BdA-Revente</a></li>
<li><a href="{% url "bda-shotgun" tirage.id %}">Places disponibles immédiatement</a></li>
{% endif %}
</ul>
{% endfor %}