Merge branch 'Aufinal/annul_reventes' into 'master'

Annulation des reventes

Closes #191

See merge request cof-geek/gestioCOF!297
This commit is contained in:
Martin Pepin 2018-10-07 12:16:07 +02:00
commit 7f5a442bae
3 changed files with 33 additions and 43 deletions

View file

@ -52,12 +52,16 @@ class ReventeModelMultipleChoiceField(forms.ModelMultipleChoiceField):
label = "{show}{suffix}" label = "{show}{suffix}"
suffix = "" suffix = ""
if self.own: if self.own:
# C'est notre propre revente : pas besoin de spécifier le vendeur # C'est notre propre revente : informations sur le statut
if obj.soldTo is not None: if obj.soldTo is not None:
suffix = " -- Vendue à {firstname} {lastname}".format( suffix = " -- Vendue à {firstname} {lastname}".format(
firstname=obj.soldTo.user.first_name, firstname=obj.soldTo.user.first_name,
lastname=obj.soldTo.user.last_name, lastname=obj.soldTo.user.last_name,
) )
elif obj.shotgun:
suffix = " -- Tirage infructueux"
elif obj.notif_sent:
suffix = " -- Inscriptions au tirage en cours"
else: else:
# Ce n'est pas à nous : on ne voit jamais l'acheteur # Ce n'est pas à nous : on ne voit jamais l'acheteur
suffix = " -- Vendue par {firstname} {lastname}".format( suffix = " -- Vendue par {firstname} {lastname}".format(
@ -95,11 +99,15 @@ class AnnulForm(forms.Form):
def __init__(self, participant, *args, **kwargs): def __init__(self, participant, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields["reventes"].queryset = participant.original_shows.filter( self.fields["reventes"].queryset = (
attribution__spectacle__date__gte=timezone.now(), participant.original_shows.filter(
notif_sent=False, attribution__spectacle__date__gte=timezone.now(), soldTo__isnull=True
soldTo__isnull=True, )
).select_related("attribution__spectacle", "attribution__spectacle__location") .select_related(
"attribution__spectacle", "attribution__spectacle__location"
)
.order_by("-date")
)
class InscriptionReventeForm(forms.Form): class InscriptionReventeForm(forms.Form):

View file

@ -6,7 +6,7 @@
<h2>Gestion des places que je revends</h2> <h2>Gestion des places que je revends</h2>
{% with resell_attributions=resellform.attributions annul_reventes=annulform.reventes sold_reventes=soldform.reventes %} {% with resell_attributions=resellform.attributions annul_reventes=annulform.reventes sold_reventes=soldform.reventes %}
{% if resellform.attributions %} {% if resell_attributions %}
<br /> <br />
<h3>Places non revendues</h3> <h3>Places non revendues</h3>
@ -29,34 +29,24 @@
<hr /> <hr />
{% endif %} {% endif %}
{% if annul_reventes or overdue %} {% if annul_reventes %}
<h3>Places en cours de revente</h3> <h3>Places en cours de revente</h3>
<form action="" method="post"> <form action="" method="post">
{% if annul_reventes %} <div class="bg-info text-info center-block">
<div class="bg-info text-info center-block"> <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> Vous pouvez annuler les reventes qui n'ont pas encore trouvé preneur·se.
Vous pouvez annuler les places mises en vente il y a moins d'une heure. </div>
</div> {% csrf_token %}
{% endif %} <div class='form-group'>
{% csrf_token %} <div class='multiple-checkbox'>
<div class='form-group'> <ul>
<div class='multiple-checkbox'> {% for revente in annul_reventes %}
<ul> <li>{{ revente.tag }} {{ revente.choice_label }}</li>
{% for revente in annul_reventes %} {% endfor %}
<li>{{ revente.tag }} {{ revente.choice_label }}</li> </ul>
{% endfor %} </div>
{% for attrib in overdue %} </div>
<li> <input type="submit" class="btn btn-primary" name="annul" value="Annuler les reventes sélectionnées">
<input type="checkbox" style="visibility:hidden">
{{ attrib.spectacle }}
</li>
{% endfor %}
</ul>
</div>
</div>
{% if annul_reventes %}
<input type="submit" class="btn btn-primary" name="annul" value="Annuler les reventes sélectionnées">
{% endif %}
</form> </form>
<hr /> <hr />
@ -82,7 +72,7 @@
<button type="submit" class="btn btn-primary" name="reinit">Réinitialiser</button> <button type="submit" class="btn btn-primary" name="reinit">Réinitialiser</button>
</form> </form>
{% endif %} {% endif %}
{% if not resell_attributions and not annul_attributions and not overdue and not sold_reventes %} {% if not resell_attributions and not annul_reventes and not sold_reventes %}
<p>Plus de reventes possibles !</p> <p>Plus de reventes possibles !</p>
{% endif %} {% endif %}

View file

@ -12,7 +12,7 @@ from django.contrib.auth.decorators import login_required
from django.core import serializers from django.core import serializers
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db import transaction from django.db import transaction
from django.db.models import Count, Prefetch, Q from django.db.models import Count, Prefetch
from django.forms.models import inlineformset_factory from django.forms.models import inlineformset_factory
from django.http import HttpResponseBadRequest, HttpResponseRedirect, JsonResponse from django.http import HttpResponseBadRequest, HttpResponseRedirect, JsonResponse
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
@ -445,19 +445,11 @@ def revente_manage(request, tirage_id):
new_date = timezone.now() - SpectacleRevente.remorse_time new_date = timezone.now() - SpectacleRevente.remorse_time
revente.reset(new_date=new_date) revente.reset(new_date=new_date)
overdue = participant.attribution_set.filter(
spectacle__date__gte=timezone.now(),
revente__isnull=False,
revente__seller=participant,
revente__notif_sent=True,
).filter(Q(revente__soldTo__isnull=True) | Q(revente__soldTo=participant))
return render( return render(
request, request,
"bda/revente/manage.html", "bda/revente/manage.html",
{ {
"tirage": tirage, "tirage": tirage,
"overdue": overdue,
"soldform": soldform, "soldform": soldform,
"annulform": annulform, "annulform": annulform,
"resellform": resellform, "resellform": resellform,