forked from DGNum/gestioCOF
Update while working on Django 1.5 upgrade
This commit is contained in:
parent
2479b0a24d
commit
9c989d886b
25 changed files with 1112 additions and 357 deletions
133
bda/admin.py
133
bda/admin.py
|
@ -1,14 +1,143 @@
|
|||
# coding: utf-8
|
||||
|
||||
from django.core.mail import send_mail
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
|
||||
from django.contrib import admin
|
||||
from bda.models import Spectacle, Participant, ChoixSpectacle
|
||||
from django.db.models import Sum
|
||||
from bda.models import Spectacle, Salle, Participant, ChoixSpectacle, Attribution
|
||||
|
||||
class ChoixSpectacleInline(admin.TabularInline):
|
||||
model = ChoixSpectacle
|
||||
sortable_field_name = "priority"
|
||||
|
||||
class AttributionInline(admin.TabularInline):
|
||||
model = Attribution
|
||||
|
||||
class ParticipantAdmin(admin.ModelAdmin):
|
||||
inlines = [ChoixSpectacleInline]
|
||||
#inlines = [ChoixSpectacleInline]
|
||||
inlines = [AttributionInline]
|
||||
def nb_places(self, obj):
|
||||
return len(obj.attribution_set.all())
|
||||
nb_places.short_description = "Nombre de places"
|
||||
def total(self, obj):
|
||||
tot = obj.attributions.aggregate(total = Sum('price'))['total']
|
||||
if tot: return u"%.02f €" % tot
|
||||
else: return u"0 €"
|
||||
total.short_description = "Total à payer"
|
||||
list_display = ("user", "nb_places", "total", "paid", "paymenttype")
|
||||
list_filter = ("paid",)
|
||||
search_fields = ('user__username', 'user__first_name', 'user__last_name')
|
||||
actions = ['send_attribs',]
|
||||
actions_on_bottom = True
|
||||
list_per_page = 400
|
||||
|
||||
def send_choices(self, request, queryset):
|
||||
for member in queryset.all():
|
||||
choices = member.choixspectacle_set.order_by('priority').all()
|
||||
if len(choices) == 0:
|
||||
continue
|
||||
mail = u"""Cher(e) %s,
|
||||
Voici tes choix de spectacles tels que notre système les a enregistrés :\n\n""" % member.user.get_full_name()
|
||||
next_rank = 1
|
||||
member_shows = {}
|
||||
for choice in choices:
|
||||
if choice.spectacle in member_shows: continue
|
||||
else: member_shows[choice.spectacle] = True
|
||||
extra = ""
|
||||
if choice.double:
|
||||
extra += u" ; deux places"
|
||||
if choice.autoquit:
|
||||
extra += u" ; désistement automatique"
|
||||
mail += u"- Choix %d : %s%s\n" % (next_rank, choice.spectacle, extra)
|
||||
next_rank += 1
|
||||
mail += u"""\nSi cette liste est incorrecte, merci de nous contacter au plus vite (avant samedi 6 octobre 18h).
|
||||
|
||||
Artistiquement,
|
||||
Le BdA"""
|
||||
send_mail ("Choix de spectacles (BdA du COF)", mail,
|
||||
"bda@clipper.ens.fr", [member.user.email],
|
||||
fail_silently = True)
|
||||
count = len(queryset.all())
|
||||
if count == 1:
|
||||
message_bit = u"1 membre a"
|
||||
plural = ""
|
||||
else:
|
||||
message_bit = u"%d membres ont" % count
|
||||
plural = "s"
|
||||
self.message_user(request, u"%s été informé%s avec succès." % (message_bit, plural))
|
||||
send_choices.short_description = u"Envoyer les choix par mail"
|
||||
|
||||
def send_attribs(self, request, queryset):
|
||||
for member in queryset.all():
|
||||
attribs = member.attributions.all()
|
||||
if len(attribs) == 0:
|
||||
continue
|
||||
mail = u"""Cher(e) %s,
|
||||
|
||||
Tu t'es inscrit(e) pour le tirage au sort du BdA. Tu as été sélectionné(e)
|
||||
pour les spectacles suivants :
|
||||
|
||||
%s
|
||||
|
||||
*Paiement*
|
||||
Ces spectacles sont à régler avant le vendredi 19 Octobre, pendant les
|
||||
heures de permanences du COF (tous les jours de la semaine entre 12h et
|
||||
14h, et entre 18h et 20h). Des facilités de paiement sont bien évidemment
|
||||
possibles (encaissement échelonné des chèques).
|
||||
|
||||
*Mode de retrait des places*
|
||||
Pour l'Opéra de Paris, le théâtre de la Colline et le théâtre du Châtelet,
|
||||
les places sont à retirer au COF le jour du paiement.
|
||||
|
||||
Pour les concerts Radio France, le théâtre des Champs-Élysées et la Salle
|
||||
Pleyel, les places seront nominatives et à retirer au théâtre le soir de
|
||||
la représentation au moins une demi-heure avant le début du spectacle.
|
||||
|
||||
Pour le théâtre de l'Odéon, la Comédie Française, le théâtre de la Ville,
|
||||
le théâtre de Chaillot et l'IRCAM, les places seront distribuées dans vos
|
||||
casiers environ une semaine avant la représentation (un mail vous en
|
||||
avertira).
|
||||
|
||||
Culturellement vôtre,
|
||||
|
||||
--
|
||||
Le BdA"""
|
||||
attribs_text = ""
|
||||
name = member.user.get_full_name()
|
||||
for attrib in attribs:
|
||||
attribs_text += u"- 1 place pour %s\n" % attrib
|
||||
mail = mail % (name, attribs_text)
|
||||
send_mail ("Places de spectacle (BdA du COF)", mail,
|
||||
"bda@clipper.ens.fr", [member.user.email],
|
||||
fail_silently = True)
|
||||
count = len(queryset.all())
|
||||
if count == 1:
|
||||
message_bit = u"1 membre a"
|
||||
plural = ""
|
||||
else:
|
||||
message_bit = u"%d membres ont" % count
|
||||
plural = "s"
|
||||
self.message_user(request, u"%s été informé%s avec succès." % (message_bit, plural))
|
||||
send_attribs.short_description = u"Envoyer les résultats par mail"
|
||||
|
||||
class AttributionAdmin(admin.ModelAdmin):
|
||||
def paid(self, obj):
|
||||
return obj.participant.paid
|
||||
paid.short_description = 'A payé'
|
||||
paid.boolean = True
|
||||
list_display = ("id", "spectacle", "participant", "given", "paid")
|
||||
search_fields = ('spectacle__title', 'participant__user__username', 'participant__user__first_name', 'participant__user__last_name')
|
||||
|
||||
import autocomplete_light
|
||||
class ChoixSpectacleAdmin(admin.ModelAdmin):
|
||||
form = autocomplete_light.modelform_factory(ChoixSpectacle)
|
||||
list_display = ("participant", "spectacle", "priority", "double", "autoquit")
|
||||
list_filter = ("double", "autoquit")
|
||||
search_fields = ('participant__user__username', 'participant__user__first_name', 'participant__user__last_name')
|
||||
|
||||
admin.site.register(Spectacle)
|
||||
admin.site.register(Salle)
|
||||
admin.site.register(Participant, ParticipantAdmin)
|
||||
admin.site.register(Attribution, AttributionAdmin)
|
||||
admin.site.register(ChoixSpectacle, ChoixSpectacleAdmin)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue