diff --git a/bda/forms.py b/bda/forms.py index e2a1961b..3bdd7675 100644 --- a/bda/forms.py +++ b/bda/forms.py @@ -45,6 +45,7 @@ class AttributionModelMultipleChoiceField(forms.ModelMultipleChoiceField): class ResellForm(forms.Form): attributions = AttributionModelMultipleChoiceField( + label='', queryset=Attribution.objects.none(), widget=forms.CheckboxSelectMultiple, required=False) @@ -58,6 +59,7 @@ class ResellForm(forms.Form): class AnnulForm(forms.Form): attributions = AttributionModelMultipleChoiceField( + label='', queryset=Attribution.objects.none(), widget=forms.CheckboxSelectMultiple, required=False) @@ -81,3 +83,17 @@ class InscriptionReventeForm(forms.Form): super(InscriptionReventeForm, self).__init__(*args, **kwargs) self.fields['spectacles'].queryset = tirage.spectacle_set.filter( date__gte=timezone.now()) + + +class SoldForm(forms.Form): + attributions = AttributionModelMultipleChoiceField( + label='', + queryset=Attribution.objects.none(), + widget=forms.CheckboxSelectMultiple) + + def __init__(self, participant, *args, **kwargs): + super(SoldForm, self).__init__(*args, **kwargs) + self.fields['attributions'].queryset = participant.attribution_set\ + .filter(revente__isnull=False, + revente__soldTo__isnull=False)\ + .exclude(revente__soldTo=participant) diff --git a/bda/templates/bda-revente.html b/bda/templates/bda-revente.html index 569a3f3a..e61e7c8d 100644 --- a/bda/templates/bda-revente.html +++ b/bda/templates/bda-revente.html @@ -4,70 +4,50 @@ {% block realcontent %}

Revente de place

+{% if resellform.attributions %}

Places non revendues

{% csrf_token %} -
-
-
    - {% for box in resellform.attributions %} -
  • - {{box.tag}} - {{box.choice_label}} -
  • - {% endfor %} -
-
-
+ {{resellform|bootstrap}}
+{% endif %}
{% if annulform.attributions or overdue %}

Places en cours de revente

{% csrf_token %} -
-
+
+
    - {% for box in annulform.attributions %} -
  • - {{box.tag}} - {{box.choice_label}} -
  • - {% endfor %} - {% for attrib in overdue %} -
  • - - {{attrib.spectacle}} -
  • - {% endfor %} -
-
-
+ {% for attrib in annulform.attributions %} +
  • {{attrib.tag}} {{attrib.choice_label}}
  • + {% endfor %} + {% for attrib in overdue %} +
  • + + {{attrib.spectacle}} +
  • + {% endfor %} {% if annulform.attributions %} {% endif %} {% endif %}
    -{% if sold %} +{% if soldform.attributions %}

    Places revendues

    - - {% for attrib in sold %} - - + {% csrf_token %} - - - - - - - {% endfor %} -
    {{attrib.spectacle}}{{attrib.revente.soldTo.user.get_full_name}}
    + {{soldform|bootstrap}} + + + {% endif %} +{% if not resellform.attributions and not soldform.attributions and not overdue and not annulform.attributions %} +

    Plus de reventes possibles !

    +{% endif %} + {% endblock %} diff --git a/bda/views.py b/bda/views.py index 29067430..a07a6a4f 100644 --- a/bda/views.py +++ b/bda/views.py @@ -26,7 +26,7 @@ from bda.models import Spectacle, Participant, ChoixSpectacle, Attribution,\ Tirage, SpectacleRevente from bda.algorithm import Algorithm from bda.forms import BaseBdaFormSet, TokenForm, ResellForm, AnnulForm,\ - InscriptionReventeForm + InscriptionReventeForm, SoldForm @cof_required @@ -316,13 +316,18 @@ def 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) + if not participant.paid: return render(request, "bda-notpaid.html", {}) + + resellform = ResellForm(participant, prefix='resell') + annulform = AnnulForm(participant, prefix='annul') + soldform = SoldForm(participant, prefix='sold') + if request.method == 'POST': # On met en vente une place if 'resell' in request.POST: resellform = ResellForm(participant, request.POST, prefix='resell') - annulform = AnnulForm(participant, prefix='annul') if resellform.is_valid(): datatuple = [] attributions = resellform.cleaned_data["attributions"] @@ -354,7 +359,6 @@ def revente(request, tirage_id): # On annule une revente 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: @@ -362,44 +366,31 @@ def revente(request, tirage_id): # On confirme une vente en transférant la place à la personne qui a # gagné le tirage elif 'transfer' in request.POST: - resellform = ResellForm(participant, prefix='resell') - annulform = AnnulForm(participant, prefix='annul') + soldform = SoldForm(participant, request.POST, prefix='sold') + if soldform.is_valid(): + attributions = soldform.cleaned_data['attributions'] + for attribution in attributions: + attribution.participant = attribution.revente.soldTo + attribution.save() - revente_id = request.POST['transfer'][0] - rev = SpectacleRevente.objects.filter(soldTo__isnull=False, - id=revente_id) - if rev.exists(): - revente = rev.get() - attrib = revente.attribution - attrib.participant = revente.soldTo - attrib.save() # On annule la revente après le tirage au sort (par exemple si # la personne qui a gagné le tirage ne se manifeste pas). La place est # alors remise en vente elif 'reinit' in request.POST: - resellform = ResellForm(participant, prefix='resell') - annulform = AnnulForm(participant, prefix='annul') - revente_id = request.POST['reinit'][0] - rev = SpectacleRevente.objects.filter(soldTo__isnull=False, - id=revente_id) - if rev.exists(): - revente = rev.get() - if revente.attribution.spectacle.date > timezone.now(): - revente.date = timezone.now() - timedelta(hours=1) - revente.soldTo = None - revente.notif_sent = False - revente.tirage_done = False - revente.shotgun = False - if revente.answered_mail: - revente.answered_mail.clear() - revente.save() - - else: - resellform = ResellForm(participant, prefix='resell') - annulform = AnnulForm(participant, prefix='annul') - else: - resellform = ResellForm(participant, prefix='resell') - annulform = AnnulForm(participant, prefix='annul') + soldform = SoldForm(participant, request.POST, prefix='sold') + if soldform.is_valid(): + attributions = soldform.cleaned_data['attributions'] + for attribution in attributions: + if attribution.spectacle.date > timezone.now(): + revente = attribution.revente + revente.date = timezone.now() - timedelta(minutes=65) + revente.soldTo = None + revente.notif_sent = False + revente.tirage_done = False + revente.shotgun = False + if revente.answered_mail: + revente.answered_mail.clear() + revente.save() overdue = participant.attribution_set.filter( spectacle__date__gte=timezone.now(), @@ -407,13 +398,9 @@ def revente(request, tirage_id): revente__seller=participant, revente__date__lte=timezone.now()-timedelta(hours=1)).filter( Q(revente__soldTo__isnull=True) | Q(revente__soldTo=participant)) - sold = participant.attribution_set.filter( - spectacle__date__gte=timezone.now(), - revente__isnull=False, - revente__soldTo__isnull=False) return render(request, "bda-revente.html", - {'tirage': tirage, 'overdue': overdue, "sold": sold, + {'tirage': tirage, 'overdue': overdue, "soldform": soldform, "annulform": annulform, "resellform": resellform})