forked from DGNum/gestioCOF
Merge branch 'Elarnon/upgrade' into 'master'
Mise à jour vers Django 1.8 Ce patch effectue la mise à jour de Django vers la version 1.8, corrigeant à la fois les erreurs fatales et problèmes de version. Pour appliquer ce patch, il faut penser à : - Lancer `pip install --upgrade requirements.txt` - Lancer `python manage.py migrate` pour mettre à jour les modèles internes de Django - Supprimer la ligne `AUTH_PROFILE_MODULE = 'gestioncof.CofProfile'`, devenue obsolète, du `settings.py` See merge request !1
This commit is contained in:
commit
dc0880a9fc
18 changed files with 48 additions and 48 deletions
|
@ -1,12 +0,0 @@
|
||||||
ConfigParser==3.5.0
|
|
||||||
Django==1.6
|
|
||||||
MySQL-python==1.2.5
|
|
||||||
Pillow==2.9.0
|
|
||||||
argparse==1.2.1
|
|
||||||
captcha==0.1.1
|
|
||||||
django-autocomplete-light==2.2.4
|
|
||||||
django-autoslug==1.8.0
|
|
||||||
django-grappelli==2.6.5
|
|
||||||
eav-django==1.4.7
|
|
||||||
six==1.9.0
|
|
||||||
wsgiref==0.1.2
|
|
|
@ -17,7 +17,7 @@ class AttributionInline(admin.TabularInline):
|
||||||
class ParticipantAdmin(admin.ModelAdmin):
|
class ParticipantAdmin(admin.ModelAdmin):
|
||||||
#inlines = [ChoixSpectacleInline]
|
#inlines = [ChoixSpectacleInline]
|
||||||
inlines = [AttributionInline]
|
inlines = [AttributionInline]
|
||||||
def queryset(self, request):
|
def get_queryset(self, request):
|
||||||
return Participant.objects.annotate(nb_places = Count('attributions'),
|
return Participant.objects.annotate(nb_places = Count('attributions'),
|
||||||
total = Sum('attributions__price'))
|
total = Sum('attributions__price'))
|
||||||
def nb_places(self, obj):
|
def nb_places(self, obj):
|
||||||
|
@ -139,7 +139,7 @@ class AttributionAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
import autocomplete_light
|
import autocomplete_light
|
||||||
class ChoixSpectacleAdmin(admin.ModelAdmin):
|
class ChoixSpectacleAdmin(admin.ModelAdmin):
|
||||||
form = autocomplete_light.modelform_factory(ChoixSpectacle)
|
form = autocomplete_light.modelform_factory(ChoixSpectacle, exclude=[])
|
||||||
list_display = ("participant", "spectacle", "priority", "double_choice")
|
list_display = ("participant", "spectacle", "priority", "double_choice")
|
||||||
list_filter = ("double_choice",)
|
list_filter = ("double_choice",)
|
||||||
search_fields = ('participant__user__username', 'participant__user__first_name', 'participant__user__last_name')
|
search_fields = ('participant__user__username', 'participant__user__first_name', 'participant__user__last_name')
|
||||||
|
|
|
@ -48,7 +48,7 @@ PAYMENT_TYPES = (
|
||||||
)
|
)
|
||||||
|
|
||||||
class Participant (models.Model):
|
class Participant (models.Model):
|
||||||
user = models.ForeignKey(User, unique = True)
|
user = models.OneToOneField(User)
|
||||||
choices = models.ManyToManyField(Spectacle, through = "ChoixSpectacle", related_name = "chosen_by")
|
choices = models.ManyToManyField(Spectacle, through = "ChoixSpectacle", related_name = "chosen_by")
|
||||||
attributions = models.ManyToManyField(Spectacle, through = "Attribution", related_name = "attributed_to")
|
attributions = models.ManyToManyField(Spectacle, through = "Attribution", related_name = "attributed_to")
|
||||||
paid = models.BooleanField (u"A payé", default = False)
|
paid = models.BooleanField (u"A payé", default = False)
|
||||||
|
|
|
@ -17,7 +17,7 @@ class AttributionInline(admin.TabularInline):
|
||||||
class ParticipantAdmin(admin.ModelAdmin):
|
class ParticipantAdmin(admin.ModelAdmin):
|
||||||
#inlines = [ChoixSpectacleInline]
|
#inlines = [ChoixSpectacleInline]
|
||||||
inlines = [AttributionInline]
|
inlines = [AttributionInline]
|
||||||
def queryset(self, request):
|
def get_queryset(self, request):
|
||||||
return Participant.objects.annotate(nb_places = Count('attributions'),
|
return Participant.objects.annotate(nb_places = Count('attributions'),
|
||||||
total = Sum('attributions__price'))
|
total = Sum('attributions__price'))
|
||||||
def nb_places(self, obj):
|
def nb_places(self, obj):
|
||||||
|
@ -159,7 +159,7 @@ class AttributionAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
import autocomplete_light
|
import autocomplete_light
|
||||||
class ChoixSpectacleAdmin(admin.ModelAdmin):
|
class ChoixSpectacleAdmin(admin.ModelAdmin):
|
||||||
form = autocomplete_light.modelform_factory(ChoixSpectacle)
|
form = autocomplete_light.modelform_factory(ChoixSpectacle, exclude=[])
|
||||||
list_display = ("participant", "spectacle", "priority", "double", "autoquit")
|
list_display = ("participant", "spectacle", "priority", "double", "autoquit")
|
||||||
list_filter = ("double", "autoquit")
|
list_filter = ("double", "autoquit")
|
||||||
search_fields = ('participant__user__username', 'participant__user__first_name', 'participant__user__last_name')
|
search_fields = ('participant__user__username', 'participant__user__first_name', 'participant__user__last_name')
|
||||||
|
|
|
@ -48,7 +48,7 @@ PAYMENT_TYPES = (
|
||||||
)
|
)
|
||||||
|
|
||||||
class Participant (models.Model):
|
class Participant (models.Model):
|
||||||
user = models.ForeignKey(User, unique = True, related_name = "participants2")
|
user = models.OneToOneField(User, related_name = "participants2")
|
||||||
choices = models.ManyToManyField(Spectacle, through = "ChoixSpectacle", related_name = "chosen_by")
|
choices = models.ManyToManyField(Spectacle, through = "ChoixSpectacle", related_name = "chosen_by")
|
||||||
attributions = models.ManyToManyField(Spectacle, through = "Attribution", related_name = "attributed_to")
|
attributions = models.ManyToManyField(Spectacle, through = "Attribution", related_name = "attributed_to")
|
||||||
paid = models.BooleanField (u"A payé", default = False)
|
paid = models.BooleanField (u"A payé", default = False)
|
||||||
|
|
|
@ -17,7 +17,7 @@ class AttributionInline(admin.TabularInline):
|
||||||
class ParticipantAdmin(admin.ModelAdmin):
|
class ParticipantAdmin(admin.ModelAdmin):
|
||||||
#inlines = [ChoixSpectacleInline]
|
#inlines = [ChoixSpectacleInline]
|
||||||
inlines = [AttributionInline]
|
inlines = [AttributionInline]
|
||||||
def queryset(self, request):
|
def get_queryset(self, request):
|
||||||
return Participant.objects.annotate(nb_places = Count('attributions'),
|
return Participant.objects.annotate(nb_places = Count('attributions'),
|
||||||
total = Sum('attributions__price'))
|
total = Sum('attributions__price'))
|
||||||
def nb_places(self, obj):
|
def nb_places(self, obj):
|
||||||
|
@ -162,7 +162,7 @@ class AttributionAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
import autocomplete_light
|
import autocomplete_light
|
||||||
class ChoixSpectacleAdmin(admin.ModelAdmin):
|
class ChoixSpectacleAdmin(admin.ModelAdmin):
|
||||||
form = autocomplete_light.modelform_factory(ChoixSpectacle)
|
form = autocomplete_light.modelform_factory(ChoixSpectacle, exclude=[])
|
||||||
list_display = ("participant", "spectacle", "priority", "double", "autoquit")
|
list_display = ("participant", "spectacle", "priority", "double", "autoquit")
|
||||||
list_filter = ("double", "autoquit")
|
list_filter = ("double", "autoquit")
|
||||||
search_fields = ('participant__user__username', 'participant__user__first_name', 'participant__user__last_name')
|
search_fields = ('participant__user__username', 'participant__user__first_name', 'participant__user__last_name')
|
||||||
|
|
|
@ -48,7 +48,7 @@ PAYMENT_TYPES = (
|
||||||
)
|
)
|
||||||
|
|
||||||
class Participant (models.Model):
|
class Participant (models.Model):
|
||||||
user = models.ForeignKey(User, unique = True, related_name = "participants3")
|
user = models.OneToOneField(User, related_name = "participants3")
|
||||||
choices = models.ManyToManyField(Spectacle, through = "ChoixSpectacle", related_name = "chosen_by")
|
choices = models.ManyToManyField(Spectacle, through = "ChoixSpectacle", related_name = "chosen_by")
|
||||||
attributions = models.ManyToManyField(Spectacle, through = "Attribution", related_name = "attributed_to")
|
attributions = models.ManyToManyField(Spectacle, through = "Attribution", related_name = "attributed_to")
|
||||||
paid = models.BooleanField (u"A payé", default = False)
|
paid = models.BooleanField (u"A payé", default = False)
|
||||||
|
|
|
@ -97,7 +97,7 @@ class FkeyLookup(object):
|
||||||
def ProfileInfo(field, short_description, boolean = False):
|
def ProfileInfo(field, short_description, boolean = False):
|
||||||
def getter(self):
|
def getter(self):
|
||||||
try:
|
try:
|
||||||
return getattr(self.get_profile(), field)
|
return getattr(self.profile, field)
|
||||||
except CofProfile.DoesNotExist:
|
except CofProfile.DoesNotExist:
|
||||||
return ""
|
return ""
|
||||||
getter.short_description = short_description
|
getter.short_description = short_description
|
||||||
|
@ -116,14 +116,14 @@ User.profile_mailing_bda_revente = ProfileInfo("mailing_bda_revente", "ML BDA-R"
|
||||||
class UserProfileAdmin(UserAdmin):
|
class UserProfileAdmin(UserAdmin):
|
||||||
def is_buro(self, obj):
|
def is_buro(self, obj):
|
||||||
try:
|
try:
|
||||||
return obj.get_profile().is_buro
|
return obj.profile.is_buro
|
||||||
except CofProfile.DoesNotExist:
|
except CofProfile.DoesNotExist:
|
||||||
return False
|
return False
|
||||||
is_buro.short_description = 'Membre du Buro'
|
is_buro.short_description = 'Membre du Buro'
|
||||||
is_buro.boolean = True
|
is_buro.boolean = True
|
||||||
def is_cof(self, obj):
|
def is_cof(self, obj):
|
||||||
try:
|
try:
|
||||||
return obj.get_profile().is_cof
|
return obj.profile.is_cof
|
||||||
except CofProfile.DoesNotExist:
|
except CofProfile.DoesNotExist:
|
||||||
return False
|
return False
|
||||||
is_cof.short_description = 'Membre du COF'
|
is_cof.short_description = 'Membre du COF'
|
||||||
|
@ -144,7 +144,7 @@ def user_unicode(self):
|
||||||
return self.username
|
return self.username
|
||||||
User.__unicode__ = user_unicode
|
User.__unicode__ = user_unicode
|
||||||
class EventRegistrationAdmin(admin.ModelAdmin):
|
class EventRegistrationAdmin(admin.ModelAdmin):
|
||||||
form = autocomplete_light.modelform_factory(EventRegistration)
|
form = autocomplete_light.modelform_factory(EventRegistration, exclude=[])
|
||||||
list_display = ('__unicode__','event','user','paid')
|
list_display = ('__unicode__','event','user','paid')
|
||||||
list_filter = ('paid',)
|
list_filter = ('paid',)
|
||||||
search_fields = ('user__username', 'user__first_name', 'user__last_name', 'user__email', 'event__title')
|
search_fields = ('user__username', 'user__first_name', 'user__last_name', 'user__email', 'event__title')
|
||||||
|
@ -212,14 +212,14 @@ class VoterAdmin(UserProfileAdmin):
|
||||||
|
|
||||||
def is_cof(self, obj):
|
def is_cof(self, obj):
|
||||||
try:
|
try:
|
||||||
return obj.get_profile().is_cof
|
return obj.profile.is_cof
|
||||||
except CofProfile.DoesNotExist:
|
except CofProfile.DoesNotExist:
|
||||||
return False
|
return False
|
||||||
is_cof.short_description = 'Membre du COF'
|
is_cof.short_description = 'Membre du COF'
|
||||||
is_cof.boolean = True
|
is_cof.boolean = True
|
||||||
def a_vote(self, obj):
|
def a_vote(self, obj):
|
||||||
try:
|
try:
|
||||||
if not obj.get_profile().eav.a_vot:
|
if not obj.profile.eav.a_vot:
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
import csv
|
import csv
|
||||||
from django.http import HttpResponse, HttpResponseForbidden
|
from django.http import HttpResponse, HttpResponseForbidden
|
||||||
from django.template.defaultfilters import slugify
|
from django.template.defaultfilters import slugify
|
||||||
from django.db.models.loading import get_model
|
from django.apps import apps
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
def export(qs, fields=None):
|
def export(qs, fields=None):
|
||||||
model = qs.model
|
model = qs.model
|
||||||
response = HttpResponse(mimetype='text/csv')
|
response = HttpResponse(content_type='text/csv')
|
||||||
response['Content-Disposition'] = 'attachment; filename=%s.csv' % slugify(model.__name__)
|
response['Content-Disposition'] = 'attachment; filename=%s.csv' % slugify(model.__name__)
|
||||||
writer = csv.writer(response)
|
writer = csv.writer(response)
|
||||||
# Write headers to CSV file
|
# Write headers to CSV file
|
||||||
|
@ -38,7 +38,7 @@ def admin_list_export(request, model_name, app_label, queryset=None, fields=None
|
||||||
if not request.user.is_staff:
|
if not request.user.is_staff:
|
||||||
return HttpResponseForbidden()
|
return HttpResponseForbidden()
|
||||||
if not queryset:
|
if not queryset:
|
||||||
model = get_model(app_label, model_name)
|
model = apps.get_model(app_label, model_name)
|
||||||
queryset = model.objects.all()
|
queryset = model.objects.all()
|
||||||
filters = dict()
|
filters = dict()
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -2,7 +2,7 @@ from django_cas.decorators import user_passes_test
|
||||||
|
|
||||||
def is_cof(user):
|
def is_cof(user):
|
||||||
try:
|
try:
|
||||||
profile = user.get_profile()
|
profile = user.profile
|
||||||
return profile.is_cof
|
return profile.is_cof
|
||||||
except:
|
except:
|
||||||
return False
|
return False
|
||||||
|
@ -12,7 +12,7 @@ cof_required_customdenied = user_passes_test(lambda u: is_cof(u), login_url = "c
|
||||||
|
|
||||||
def is_buro(user):
|
def is_buro(user):
|
||||||
try:
|
try:
|
||||||
profile = user.get_profile()
|
profile = user.profile
|
||||||
return profile.is_buro
|
return profile.is_buro
|
||||||
except:
|
except:
|
||||||
return False
|
return False
|
||||||
|
|
|
@ -37,7 +37,7 @@ class COFCASBackend(CASBackend):
|
||||||
if user is None:
|
if user is None:
|
||||||
return user
|
return user
|
||||||
try:
|
try:
|
||||||
profile = user.get_profile()
|
profile = user.profile
|
||||||
except CofProfile.DoesNotExist:
|
except CofProfile.DoesNotExist:
|
||||||
profile, created = CofProfile.objects.get_or_create(user = user)
|
profile, created = CofProfile.objects.get_or_create(user = user)
|
||||||
profile.save()
|
profile.save()
|
||||||
|
|
|
@ -53,7 +53,7 @@ def login_ext(request):
|
||||||
@login_required
|
@login_required
|
||||||
def logout(request):
|
def logout(request):
|
||||||
try:
|
try:
|
||||||
profile = request.user.get_profile()
|
profile = request.user.profile
|
||||||
except CofProfile.DoesNotExist:
|
except CofProfile.DoesNotExist:
|
||||||
profile, created = CofProfile.objects.get_or_create(user = request.user)
|
profile, created = CofProfile.objects.get_or_create(user = request.user)
|
||||||
if profile.login_clipper:
|
if profile.login_clipper:
|
||||||
|
@ -409,12 +409,12 @@ class UserProfileForm(forms.ModelForm):
|
||||||
def profile(request):
|
def profile(request):
|
||||||
success = False
|
success = False
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
form = UserProfileForm(request.POST, instance = request.user.get_profile())
|
form = UserProfileForm(request.POST, instance = request.user.profile)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
form.save()
|
form.save()
|
||||||
success = True
|
success = True
|
||||||
else:
|
else:
|
||||||
form = UserProfileForm(instance = request.user.get_profile())
|
form = UserProfileForm(instance = request.user.profile)
|
||||||
return render(request, "profile.html", {"form": form, "success": success})
|
return render(request, "profile.html", {"form": form, "success": success})
|
||||||
|
|
||||||
class RegistrationUserForm(forms.ModelForm):
|
class RegistrationUserForm(forms.ModelForm):
|
||||||
|
@ -694,7 +694,7 @@ def registration(request):
|
||||||
|
|
||||||
@buro_required
|
@buro_required
|
||||||
def export_members(request):
|
def export_members(request):
|
||||||
response = HttpResponse(mimetype = 'text/csv')
|
response = HttpResponse(content_type = 'text/csv')
|
||||||
response['Content-Disposition'] = 'attachment; filename=membres_cof.csv'
|
response['Content-Disposition'] = 'attachment; filename=membres_cof.csv'
|
||||||
|
|
||||||
writer = unicodecsv.UnicodeWriter(response)
|
writer = unicodecsv.UnicodeWriter(response)
|
||||||
|
@ -707,13 +707,13 @@ def export_members(request):
|
||||||
|
|
||||||
@buro_required
|
@buro_required
|
||||||
def csv_export_mega(filename, qs):
|
def csv_export_mega(filename, qs):
|
||||||
response = HttpResponse(mimetype = 'text/csv')
|
response = HttpResponse(content_type = 'text/csv')
|
||||||
response['Content-Disposition'] = 'attachment; filename=' + filename
|
response['Content-Disposition'] = 'attachment; filename=' + filename
|
||||||
writer = unicodecsv.UnicodeWriter(response)
|
writer = unicodecsv.UnicodeWriter(response)
|
||||||
|
|
||||||
for reg in qs.all():
|
for reg in qs.all():
|
||||||
user = reg.user
|
user = reg.user
|
||||||
profile = user.get_profile()
|
profile = user.profile
|
||||||
comments = "---".join([comment.content for comment in reg.comments.all()])
|
comments = "---".join([comment.content for comment in reg.comments.all()])
|
||||||
bits = [user.username, user.first_name, user.last_name, user.email, profile.phone, profile.num, profile.comments if profile.comments else "", comments]
|
bits = [user.username, user.first_name, user.last_name, user.email, profile.phone, profile.num, profile.comments if profile.comments else "", comments]
|
||||||
writer.writerow([unicode(bit) for bit in bits])
|
writer.writerow([unicode(bit) for bit in bits])
|
||||||
|
@ -723,7 +723,7 @@ def csv_export_mega(filename, qs):
|
||||||
@buro_required
|
@buro_required
|
||||||
def export_mega_remarksonly(request):
|
def export_mega_remarksonly(request):
|
||||||
filename = 'remarques_mega_2015.csv'
|
filename = 'remarques_mega_2015.csv'
|
||||||
response = HttpResponse(mimetype = 'text/csv')
|
response = HttpResponse(content_type = 'text/csv')
|
||||||
response['Content-Disposition'] = 'attachment; filename=' + filename
|
response['Content-Disposition'] = 'attachment; filename=' + filename
|
||||||
writer = unicodecsv.UnicodeWriter(response)
|
writer = unicodecsv.UnicodeWriter(response)
|
||||||
|
|
||||||
|
@ -732,7 +732,7 @@ def export_mega_remarksonly(request):
|
||||||
for val in commentfield.values.all():
|
for val in commentfield.values.all():
|
||||||
reg = val.registration
|
reg = val.registration
|
||||||
user = reg.user
|
user = reg.user
|
||||||
profile = user.get_profile()
|
profile = user.profile
|
||||||
bits = [user.username, user.first_name, user.last_name, user.email, profile.phone, profile.num, profile.comments, val.content]
|
bits = [user.username, user.first_name, user.last_name, user.email, profile.phone, profile.num, profile.comments, val.content]
|
||||||
writer.writerow([unicode(bit) for bit in bits])
|
writer.writerow([unicode(bit) for bit in bits])
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from django.forms.widgets import Widget
|
from django.forms.widgets import Widget
|
||||||
from django.forms.util import flatatt
|
from django.forms.utils import flatatt
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
|
|
||||||
class TriStateCheckbox(Widget):
|
class TriStateCheckbox(Widget):
|
||||||
|
|
12
requirements.txt
Normal file
12
requirements.txt
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
configparser==3.5.0
|
||||||
|
Django==1.8.13
|
||||||
|
django-autocomplete-light==2.3.3
|
||||||
|
django-autoslug==1.8.0
|
||||||
|
-e hg+https://bitbucket.org/cpcc/django-cas@47d19f3a871fa744dabe884758f90fff6ba135d5#egg=django_cas
|
||||||
|
django-grappelli==2.6.5
|
||||||
|
django-recaptcha==1.0.5
|
||||||
|
eav-django==1.4.7
|
||||||
|
MySQL-python==1.2.5
|
||||||
|
Pillow==2.9.0
|
||||||
|
simplejson==3.8.2
|
||||||
|
six==1.10.0
|
|
@ -9,7 +9,7 @@
|
||||||
<h1>Attribution</h1>
|
<h1>Attribution</h1>
|
||||||
<h2>Token : {{ token }}</h2>
|
<h2>Token : {{ token }}</h2>
|
||||||
<h2>Placés : {{ total_slots }} ; Déçus : {{ total_losers }}</h2>
|
<h2>Placés : {{ total_slots }} ; Déçus : {{ total_losers }}</h2>
|
||||||
{% if user.get_profile.is_buro %}<h2>Déficit total: {{ total_deficit }} €, Opéra: {{ opera_deficit }} €, Attribué: {{ total_sold }} €</h2>{% endif %}
|
{% if user.profile.is_buro %}<h2>Déficit total: {{ total_deficit }} €, Opéra: {{ opera_deficit }} €, Attribué: {{ total_sold }} €</h2>{% endif %}
|
||||||
<h2>Temps de calcul : {{ duration|floatformat }}s</h2>
|
<h2>Temps de calcul : {{ duration|floatformat }}s</h2>
|
||||||
|
|
||||||
{% for show, members, losers in results %}
|
{% for show, members, losers in results %}
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
<h2>{{ show.title }} - {{ show.date_no_seconds }} @ {{ show.location }}</h2>
|
<h2>{{ show.title }} - {{ show.date_no_seconds }} @ {{ show.location }}</h2>
|
||||||
<p>
|
<p>
|
||||||
<strong>{{ show.nrequests }} demandes pour {{ show.slots }} places</strong>
|
<strong>{{ show.nrequests }} demandes pour {{ show.slots }} places</strong>
|
||||||
{{ show.price }}€ par place{% if user.get_profile.is_buro and show.nrequests < show.slots %}, {{ show.deficit }}€ de déficit{% endif %}
|
{{ show.price }}€ par place{% if user.profile.is_buro and show.nrequests < show.slots %}, {{ show.deficit }}€ de déficit{% endif %}
|
||||||
</p>
|
</p>
|
||||||
Places :
|
Places :
|
||||||
<ul>
|
<ul>
|
||||||
|
|
|
@ -9,14 +9,14 @@
|
||||||
<h1>Attribution</h1>
|
<h1>Attribution</h1>
|
||||||
<h2>Token : {{ token }}</h2>
|
<h2>Token : {{ token }}</h2>
|
||||||
<h2>Placés : {{ total_slots }} ; Déçus : {{ total_losers }}</h2>
|
<h2>Placés : {{ total_slots }} ; Déçus : {{ total_losers }}</h2>
|
||||||
{% if user.get_profile.is_buro %}<h2>Déficit total: {{ total_deficit }} €, Opéra: {{ opera_deficit }} €, Attribué: {{ total_sold }} €</h2>{% endif %}
|
{% if user.profile.is_buro %}<h2>Déficit total: {{ total_deficit }} €, Opéra: {{ opera_deficit }} €, Attribué: {{ total_sold }} €</h2>{% endif %}
|
||||||
|
|
||||||
{% for show, members, losers in results %}
|
{% for show, members, losers in results %}
|
||||||
<div class="attribresult">
|
<div class="attribresult">
|
||||||
<h2>{{ show.title }} - {{ show.date_no_seconds }} @ {{ show.location }}</h2>
|
<h2>{{ show.title }} - {{ show.date_no_seconds }} @ {{ show.location }}</h2>
|
||||||
<p>
|
<p>
|
||||||
<strong>{{ show.nrequests }} demandes pour {{ show.slots }} places</strong>
|
<strong>{{ show.nrequests }} demandes pour {{ show.slots }} places</strong>
|
||||||
{{ show.price }}€ par place{% if user.get_profile.is_buro and show.nrequests < show.slots %}, {{ show.deficit }}€ de déficit{% endif %}
|
{{ show.price }}€ par place{% if user.profile.is_buro and show.nrequests < show.slots %}, {{ show.deficit }}€ de déficit{% endif %}
|
||||||
</p>
|
</p>
|
||||||
Places :
|
Places :
|
||||||
<ul>
|
<ul>
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
<li><a href="{% url "gestioncof.views.logout" %}">Se déconnecter</a></li>
|
<li><a href="{% url "gestioncof.views.logout" %}">Se déconnecter</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
{% if user.get_profile.is_buro %}
|
{% if user.profile.is_buro %}
|
||||||
<h3>Administration</h3>
|
<h3>Administration</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{% url "admin:index" %}">Administration générale</a></li>
|
<li><a href="{% url "admin:index" %}">Administration générale</a></li>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<h2>Inscription d'un nouveau membre</h2>
|
<h2>Inscription d'un nouveau membre</h2>
|
||||||
{% if success %}
|
{% if success %}
|
||||||
<p class="success">L'inscription de {{ member.first_name }} {{ member.last_name }} (<tt>{{ member.username }}</tt>) a été enregistrée avec succès.
|
<p class="success">L'inscription de {{ member.first_name }} {{ member.last_name }} (<tt>{{ member.username }}</tt>) a été enregistrée avec succès.
|
||||||
{% if member.get_profile.is_cof %}Il est désormais membre du COF n°{{ member.get_profile.num }} !{% endif %}</p>
|
{% if member.profile.is_cof %}Il est désormais membre du COF n°{{ member.profile.num }} !{% endif %}</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div id="form-placeholder">
|
<div id="form-placeholder">
|
||||||
{% include "registration_form.html" %}
|
{% include "registration_form.html" %}
|
||||||
|
|
Loading…
Reference in a new issue