forked from DGNum/gestioCOF
Merge branch 'master' of git.eleves.ens.fr:cof-geek/gestioCOF
This commit is contained in:
commit
8e36b3cfaa
11 changed files with 236 additions and 16 deletions
|
@ -16,7 +16,8 @@ from django.contrib.auth import views as django_views
|
||||||
from django_cas_ng import views as django_cas_views
|
from django_cas_ng import views as django_cas_views
|
||||||
from gestioncof import views as gestioncof_views, csv_views
|
from gestioncof import views as gestioncof_views, csv_views
|
||||||
from gestioncof.urls import export_patterns, petitcours_patterns, \
|
from gestioncof.urls import export_patterns, petitcours_patterns, \
|
||||||
surveys_patterns, events_patterns, calendar_patterns
|
surveys_patterns, events_patterns, calendar_patterns, \
|
||||||
|
clubs_patterns
|
||||||
|
|
||||||
from gestioncof.autocomplete import autocomplete
|
from gestioncof.autocomplete import autocomplete
|
||||||
|
|
||||||
|
@ -38,6 +39,8 @@ urlpatterns = [
|
||||||
url(r'^event/', include(events_patterns)),
|
url(r'^event/', include(events_patterns)),
|
||||||
# Calendrier
|
# Calendrier
|
||||||
url(r'^calendar/', include(calendar_patterns)),
|
url(r'^calendar/', include(calendar_patterns)),
|
||||||
|
# Clubs
|
||||||
|
url(r'^clubs/', include(clubs_patterns)),
|
||||||
# Authentification
|
# Authentification
|
||||||
url(r'^cof/denied$', TemplateView.as_view(template_name='cof-denied.html'),
|
url(r'^cof/denied$', TemplateView.as_view(template_name='cof-denied.html'),
|
||||||
name="cof-denied"),
|
name="cof-denied"),
|
||||||
|
|
|
@ -4,6 +4,7 @@ from __future__ import division
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django import forms
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from gestioncof.models import SurveyQuestionAnswer, SurveyQuestion, \
|
from gestioncof.models import SurveyQuestionAnswer, SurveyQuestion, \
|
||||||
CofProfile, EventOption, EventOptionChoice, Event, Club, CustomMail, \
|
CofProfile, EventOption, EventOptionChoice, Event, Club, CustomMail, \
|
||||||
|
@ -232,6 +233,25 @@ class PetitCoursDemandeAdmin(admin.ModelAdmin):
|
||||||
class CustomMailAdmin(admin.ModelAdmin):
|
class CustomMailAdmin(admin.ModelAdmin):
|
||||||
search_fields = ('shortname', 'title')
|
search_fields = ('shortname', 'title')
|
||||||
|
|
||||||
|
|
||||||
|
class ClubAdminForm(forms.ModelForm):
|
||||||
|
def clean(self):
|
||||||
|
cleaned_data = super(ClubAdminForm, self).clean()
|
||||||
|
respos = cleaned_data.get('respos')
|
||||||
|
members = cleaned_data.get('membres')
|
||||||
|
for respo in respos.all():
|
||||||
|
if respo not in members:
|
||||||
|
raise forms.ValidationError(
|
||||||
|
"Erreur : le respo %s n'est pas membre du club."
|
||||||
|
% respo.get_full_name())
|
||||||
|
return cleaned_data
|
||||||
|
|
||||||
|
|
||||||
|
class ClubAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ['name']
|
||||||
|
form = ClubAdminForm
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(Survey, SurveyAdmin)
|
admin.site.register(Survey, SurveyAdmin)
|
||||||
admin.site.register(SurveyQuestion, SurveyQuestionAdmin)
|
admin.site.register(SurveyQuestion, SurveyQuestionAdmin)
|
||||||
admin.site.register(Event, EventAdmin)
|
admin.site.register(Event, EventAdmin)
|
||||||
|
@ -239,7 +259,7 @@ admin.site.register(EventOption, EventOptionAdmin)
|
||||||
admin.site.unregister(User)
|
admin.site.unregister(User)
|
||||||
admin.site.register(User, UserProfileAdmin)
|
admin.site.register(User, UserProfileAdmin)
|
||||||
admin.site.register(CofProfile)
|
admin.site.register(CofProfile)
|
||||||
admin.site.register(Club)
|
admin.site.register(Club, ClubAdmin)
|
||||||
admin.site.register(CustomMail)
|
admin.site.register(CustomMail)
|
||||||
admin.site.register(PetitCoursSubject)
|
admin.site.register(PetitCoursSubject)
|
||||||
admin.site.register(PetitCoursAbility, PetitCoursAbilityAdmin)
|
admin.site.register(PetitCoursAbility, PetitCoursAbilityAdmin)
|
||||||
|
|
|
@ -13,7 +13,7 @@ from django.db.models import Max
|
||||||
from django.core.validators import MinLengthValidator
|
from django.core.validators import MinLengthValidator
|
||||||
|
|
||||||
from gestioncof.models import CofProfile, EventCommentValue, \
|
from gestioncof.models import CofProfile, EventCommentValue, \
|
||||||
CalendarSubscription
|
CalendarSubscription, Club
|
||||||
from gestioncof.widgets import TriStateCheckbox
|
from gestioncof.widgets import TriStateCheckbox
|
||||||
from gestioncof.shared import lock_table, unlock_table
|
from gestioncof.shared import lock_table, unlock_table
|
||||||
|
|
||||||
|
@ -392,3 +392,14 @@ class CalendarForm(forms.ModelForm):
|
||||||
model = CalendarSubscription
|
model = CalendarSubscription
|
||||||
fields = ['subscribe_to_events', 'subscribe_to_my_shows',
|
fields = ['subscribe_to_events', 'subscribe_to_my_shows',
|
||||||
'other_shows']
|
'other_shows']
|
||||||
|
|
||||||
|
|
||||||
|
class ClubsForm(forms.Form):
|
||||||
|
"""
|
||||||
|
Formulaire d'inscription d'un membre à plusieurs clubs du COF.
|
||||||
|
"""
|
||||||
|
clubs = forms.ModelMultipleChoiceField(
|
||||||
|
label="Inscriptions aux clubs du COF",
|
||||||
|
queryset=Club.objects.all(),
|
||||||
|
widget=forms.CheckboxSelectMultiple,
|
||||||
|
required=False)
|
||||||
|
|
47
gestioncof/migrations/0007_alter_club.py
Normal file
47
gestioncof/migrations/0007_alter_club.py
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('gestioncof', '0006_add_calendar'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='club',
|
||||||
|
name='name',
|
||||||
|
field=models.CharField(unique=True, max_length=200,
|
||||||
|
verbose_name='Nom')
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='club',
|
||||||
|
name='description',
|
||||||
|
field=models.TextField(verbose_name='Description', blank=True)
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='club',
|
||||||
|
name='membres',
|
||||||
|
field=models.ManyToManyField(related_name='clubs',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
blank=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='club',
|
||||||
|
name='respos',
|
||||||
|
field=models.ManyToManyField(related_name='clubs_geres',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
blank=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='event',
|
||||||
|
name='start_date',
|
||||||
|
field=models.DateTimeField(null=True,
|
||||||
|
verbose_name='Date de d\xe9but',
|
||||||
|
blank=True),
|
||||||
|
),
|
||||||
|
]
|
|
@ -86,10 +86,11 @@ post_save.connect(create_user_profile, sender=User)
|
||||||
|
|
||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
class Club(models.Model):
|
class Club(models.Model):
|
||||||
name = models.CharField("Nom", max_length=200)
|
name = models.CharField("Nom", max_length=200, unique=True)
|
||||||
description = models.TextField("Description")
|
description = models.TextField("Description", blank=True)
|
||||||
respos = models.ManyToManyField(User, related_name="clubs_geres")
|
respos = models.ManyToManyField(User, related_name="clubs_geres",
|
||||||
membres = models.ManyToManyField(User, related_name="clubs")
|
blank=True)
|
||||||
|
membres = models.ManyToManyField(User, related_name="clubs", blank=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
|
@ -70,6 +70,7 @@
|
||||||
<li><a href="{% url "admin:index" %}">Administration générale</a></li>
|
<li><a href="{% url "admin:index" %}">Administration générale</a></li>
|
||||||
<li><a href="{% url "petits-cours-demandes-list" %}">Demandes de petits cours</a></li>
|
<li><a href="{% url "petits-cours-demandes-list" %}">Demandes de petits cours</a></li>
|
||||||
<li><a href="{% url "gestioncof.views.registration" %}">Inscription d'un nouveau membre</a></li>
|
<li><a href="{% url "gestioncof.views.registration" %}">Inscription d'un nouveau membre</a></li>
|
||||||
|
<li><a href="{% url "liste-clubs" %}">Gestion des clubs</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul>
|
<ul>
|
||||||
<h4>Évènements & Sondages</h4>
|
<h4>Évènements & Sondages</h4>
|
||||||
|
|
25
gestioncof/templates/liste_clubs.html
Normal file
25
gestioncof/templates/liste_clubs.html
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{% extends "base_title.html" %}
|
||||||
|
|
||||||
|
{% block page_size %}col-sm-8{% endblock %}
|
||||||
|
|
||||||
|
{% block realcontent %}
|
||||||
|
<h2>Clubs enregistrés sur GestioCOF</h2>
|
||||||
|
<ul>
|
||||||
|
{% for club in owned_clubs %}
|
||||||
|
<li>
|
||||||
|
<a href="{% url "membres-club" club.name %}">
|
||||||
|
{{ club }} ({% for respo in club.respos.all %}{{ respo.get_full_name }}, {% empty %}pas de respo{% endfor %})
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
{% if other_clubs %}
|
||||||
|
{% for club in other_clubs %}
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
{{ club }} ({% for respo in club.respos.all %}{{ respo.get_full_name }}, {% empty %}pas de respo{% endfor %})
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
41
gestioncof/templates/membres_clubs.html
Normal file
41
gestioncof/templates/membres_clubs.html
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{% extends "base_title.html" %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block realcontent %}
|
||||||
|
<h2>{{ club }}</h2>
|
||||||
|
|
||||||
|
|
||||||
|
{% if club.respos.exists %}
|
||||||
|
<h3>Respo{{ club.respos.all|pluralize }}</h3>
|
||||||
|
<table class="table table-striped">
|
||||||
|
{% for member in club.respos.all %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ member }}</td>
|
||||||
|
<td>{{ member.email }}</td>
|
||||||
|
<td><a class="glyphicon glyphicon-arrow-down"
|
||||||
|
href="{% url "change-respo" club.name member.id %}"></a></td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% else %}
|
||||||
|
<h3>Pas de respo</h3>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
{% if club.membres.exists %}
|
||||||
|
<h3>Liste des membres</h3>
|
||||||
|
<table class="table table-striped">
|
||||||
|
{% for member in members_no_respo %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ member }}</td>
|
||||||
|
<td>{{ member.email }}</td>
|
||||||
|
<td><a class="glyphicon glyphicon-arrow-up"
|
||||||
|
href="{% url "change-respo" club.name member.id %}"></a></td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% else %}
|
||||||
|
Ce club ne comporte actuellement aucun membre.
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -13,6 +13,10 @@
|
||||||
{{ user_form | bootstrap }}
|
{{ user_form | bootstrap }}
|
||||||
{{ profile_form | bootstrap }}
|
{{ profile_form | bootstrap }}
|
||||||
</table>
|
</table>
|
||||||
|
<hr />
|
||||||
|
<table>
|
||||||
|
{{ clubs_form | bootstrap }}
|
||||||
|
</table>
|
||||||
{{ event_formset.management_form }}
|
{{ event_formset.management_form }}
|
||||||
{% for event_form in event_formset %}
|
{% for event_form in event_formset %}
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
@ -52,3 +52,10 @@ calendar_patterns = [
|
||||||
url(r'^(?P<token>[a-z0-9-]+)/calendar.ics$',
|
url(r'^(?P<token>[a-z0-9-]+)/calendar.ics$',
|
||||||
'gestioncof.views.calendar_ics')
|
'gestioncof.views.calendar_ics')
|
||||||
]
|
]
|
||||||
|
|
||||||
|
clubs_patterns = [
|
||||||
|
url(r'^membres/(?P<name>\w+)', views.membres_club, name='membres-club'),
|
||||||
|
url(r'^liste', views.liste_clubs, name='liste-clubs'),
|
||||||
|
url(r'^change_respo/(?P<club_name>\w+)/(?P<user_id>\d+)',
|
||||||
|
views.change_respo, name='change-respo'),
|
||||||
|
]
|
||||||
|
|
|
@ -10,7 +10,7 @@ from datetime import timedelta
|
||||||
from icalendar import Calendar, Event as Vevent
|
from icalendar import Calendar, Event as Vevent
|
||||||
|
|
||||||
from django.shortcuts import redirect, get_object_or_404, render
|
from django.shortcuts import redirect, get_object_or_404, render
|
||||||
from django.http import Http404, HttpResponse
|
from django.http import Http404, HttpResponse, HttpResponseForbidden
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib.auth.views import login as django_login_view
|
from django.contrib.auth.views import login as django_login_view
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
@ -24,12 +24,12 @@ from gestioncof.models import Event, EventRegistration, EventOption, \
|
||||||
from gestioncof.models import EventCommentField, EventCommentValue, \
|
from gestioncof.models import EventCommentField, EventCommentValue, \
|
||||||
CalendarSubscription
|
CalendarSubscription
|
||||||
from gestioncof.shared import send_custom_mail
|
from gestioncof.shared import send_custom_mail
|
||||||
from gestioncof.models import CofProfile, Clipper
|
from gestioncof.models import CofProfile, Clipper, Club
|
||||||
from gestioncof.decorators import buro_required, cof_required
|
from gestioncof.decorators import buro_required, cof_required
|
||||||
from gestioncof.forms import UserProfileForm, EventStatusFilterForm, \
|
from gestioncof.forms import UserProfileForm, EventStatusFilterForm, \
|
||||||
SurveyForm, SurveyStatusFilterForm, RegistrationUserForm, \
|
SurveyForm, SurveyStatusFilterForm, RegistrationUserForm, \
|
||||||
RegistrationProfileForm, EventForm, CalendarForm, EventFormset, \
|
RegistrationProfileForm, EventForm, CalendarForm, EventFormset, \
|
||||||
RegistrationPassUserForm
|
RegistrationPassUserForm, ClubsForm
|
||||||
|
|
||||||
from bda.models import Tirage, Spectacle
|
from bda.models import Tirage, Spectacle
|
||||||
|
|
||||||
|
@ -344,8 +344,9 @@ def registration_form2(request, login_clipper=None, username=None):
|
||||||
profile_form = RegistrationProfileForm(initial={
|
profile_form = RegistrationProfileForm(initial={
|
||||||
'login_clipper': login_clipper})
|
'login_clipper': login_clipper})
|
||||||
registration_set_ro_fields(user_form, profile_form)
|
registration_set_ro_fields(user_form, profile_form)
|
||||||
# events
|
# events & clubs
|
||||||
event_formset = EventFormset(events=events, prefix='events')
|
event_formset = EventFormset(events=events, prefix='events')
|
||||||
|
clubs_form = ClubsForm(initial={'clubs': member.clubs.all()})
|
||||||
if username:
|
if username:
|
||||||
member = get_object_or_404(User, username=username)
|
member = get_object_or_404(User, username=username)
|
||||||
(profile, _) = CofProfile.objects.get_or_create(user=member)
|
(profile, _) = CofProfile.objects.get_or_create(user=member)
|
||||||
|
@ -364,16 +365,21 @@ def registration_form2(request, login_clipper=None, username=None):
|
||||||
event_formset = EventFormset(
|
event_formset = EventFormset(
|
||||||
events=events, prefix='events',
|
events=events, prefix='events',
|
||||||
current_registrations=current_registrations)
|
current_registrations=current_registrations)
|
||||||
|
# Clubs
|
||||||
|
clubs_form = ClubsForm(initial={'clubs': member.clubs.all()})
|
||||||
elif not login_clipper:
|
elif not login_clipper:
|
||||||
# new user
|
# new user
|
||||||
user_form = RegistrationPassUserForm()
|
user_form = RegistrationPassUserForm()
|
||||||
user_form.force_long_username()
|
user_form.force_long_username()
|
||||||
profile_form = RegistrationProfileForm()
|
profile_form = RegistrationProfileForm()
|
||||||
event_formset = EventFormset(events=events, prefix='events')
|
event_formset = EventFormset(events=events, prefix='events')
|
||||||
|
clubs_form = ClubsForm()
|
||||||
return render(request, "registration_form.html",
|
return render(request, "registration_form.html",
|
||||||
{"user_form": user_form, "profile_form": profile_form,
|
{"member": member, "login_clipper": login_clipper,
|
||||||
"member": member, "login_clipper": login_clipper,
|
"user_form": user_form,
|
||||||
"event_formset": event_formset})
|
"profile_form": profile_form,
|
||||||
|
"event_formset": event_formset,
|
||||||
|
"clubs_form": clubs_form})
|
||||||
|
|
||||||
|
|
||||||
@buro_required
|
@buro_required
|
||||||
|
@ -396,6 +402,7 @@ def registration(request):
|
||||||
else:
|
else:
|
||||||
user_form = RegistrationUserForm(request_dict)
|
user_form = RegistrationUserForm(request_dict)
|
||||||
profile_form = RegistrationProfileForm(request_dict)
|
profile_form = RegistrationProfileForm(request_dict)
|
||||||
|
clubs_form = ClubsForm(request_dict)
|
||||||
events = Event.objects.filter(old=False).all()
|
events = Event.objects.filter(old=False).all()
|
||||||
event_formset = EventFormset(events=events, data=request_dict,
|
event_formset = EventFormset(events=events, data=request_dict,
|
||||||
prefix='events')
|
prefix='events')
|
||||||
|
@ -425,10 +432,13 @@ def registration(request):
|
||||||
# Maintenant on remplit le formulaire de profil
|
# Maintenant on remplit le formulaire de profil
|
||||||
profile_form = RegistrationProfileForm(request_dict,
|
profile_form = RegistrationProfileForm(request_dict,
|
||||||
instance=profile)
|
instance=profile)
|
||||||
if profile_form.is_valid() and event_formset.is_valid():
|
if (profile_form.is_valid() and event_formset.is_valid()
|
||||||
|
and clubs_form.is_valid()):
|
||||||
|
# Enregistrement du profil
|
||||||
profile = profile_form.save()
|
profile = profile_form.save()
|
||||||
if profile.is_cof and not was_cof:
|
if profile.is_cof and not was_cof:
|
||||||
send_custom_mail(member, "bienvenue")
|
send_custom_mail(member, "bienvenue")
|
||||||
|
# Enregistrement des inscriptions aux événements
|
||||||
for form in event_formset:
|
for form in event_formset:
|
||||||
if 'status' not in form.cleaned_data:
|
if 'status' not in form.cleaned_data:
|
||||||
form.cleaned_data['status'] = 'no'
|
form.cleaned_data['status'] = 'no'
|
||||||
|
@ -461,6 +471,11 @@ def registration(request):
|
||||||
comments = field.default
|
comments = field.default
|
||||||
send_custom_mail(member, "mega",
|
send_custom_mail(member, "mega",
|
||||||
{"remarques": comments})
|
{"remarques": comments})
|
||||||
|
# Enregistrement des inscriptions aux clubs
|
||||||
|
member.clubs.clear()
|
||||||
|
for club in clubs_form.cleaned_data['clubs']:
|
||||||
|
club.membres.add(member)
|
||||||
|
club.save()
|
||||||
success = True
|
success = True
|
||||||
return render(request, "registration_post.html",
|
return render(request, "registration_post.html",
|
||||||
{"success": success,
|
{"success": success,
|
||||||
|
@ -468,11 +483,56 @@ def registration(request):
|
||||||
"profile_form": profile_form,
|
"profile_form": profile_form,
|
||||||
"member": member,
|
"member": member,
|
||||||
"login_clipper": login_clipper,
|
"login_clipper": login_clipper,
|
||||||
"event_formset": event_formset})
|
"event_formset": event_formset,
|
||||||
|
"clubs_form": clubs_form})
|
||||||
else:
|
else:
|
||||||
return render(request, "registration.html")
|
return render(request, "registration.html")
|
||||||
|
|
||||||
|
|
||||||
|
# -----
|
||||||
|
# Clubs
|
||||||
|
# -----
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def membres_club(request, name):
|
||||||
|
# Vérification des permissions : l'utilisateur doit être membre du burô
|
||||||
|
# ou respo du club.
|
||||||
|
user = request.user
|
||||||
|
club = get_object_or_404(Club, name=name)
|
||||||
|
if not request.user.profile.is_buro \
|
||||||
|
and club not in user.clubs_geres.all():
|
||||||
|
return HttpResponseForbidden('<h1>Permission denied</h1>')
|
||||||
|
members_no_respo = club.membres.exclude(clubs_geres=club).all()
|
||||||
|
return render(request, 'membres_clubs.html',
|
||||||
|
{'club': club,
|
||||||
|
'members_no_respo': members_no_respo})
|
||||||
|
|
||||||
|
|
||||||
|
@buro_required
|
||||||
|
def change_respo(request, club_name, user_id):
|
||||||
|
club = get_object_or_404(Club, name=club_name)
|
||||||
|
user = get_object_or_404(User, id=user_id)
|
||||||
|
if user in club.respos.all():
|
||||||
|
club.respos.remove(user)
|
||||||
|
elif user in club.membres.all():
|
||||||
|
club.respos.add(user)
|
||||||
|
else:
|
||||||
|
raise Http404
|
||||||
|
return redirect('membres-club', name=club_name)
|
||||||
|
|
||||||
|
|
||||||
|
@cof_required
|
||||||
|
def liste_clubs(request):
|
||||||
|
clubs = Club.objects
|
||||||
|
if request.user.profile.is_buro:
|
||||||
|
data = {'owned_clubs': clubs.all()}
|
||||||
|
else:
|
||||||
|
data = {'owned_clubs': request.user.clubs_geres,
|
||||||
|
'other_clubs': clubs.exclude(respos=request.user)}
|
||||||
|
return render(request, 'liste_clubs.html', data)
|
||||||
|
|
||||||
|
|
||||||
@buro_required
|
@buro_required
|
||||||
def export_members(request):
|
def export_members(request):
|
||||||
response = HttpResponse(content_type='text/csv')
|
response = HttpResponse(content_type='text/csv')
|
||||||
|
|
Loading…
Reference in a new issue