diff --git a/cof/urls.py b/cof/urls.py index 5a4a49dc..750107fb 100644 --- a/cof/urls.py +++ b/cof/urls.py @@ -16,7 +16,8 @@ from django.contrib.auth import views as django_views from django_cas_ng import views as django_cas_views from gestioncof import views as gestioncof_views, csv_views 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 @@ -38,6 +39,8 @@ urlpatterns = [ url(r'^event/', include(events_patterns)), # Calendrier url(r'^calendar/', include(calendar_patterns)), + # Clubs + url(r'^clubs/', include(clubs_patterns)), # Authentification url(r'^cof/denied$', TemplateView.as_view(template_name='cof-denied.html'), name="cof-denied"), diff --git a/gestioncof/admin.py b/gestioncof/admin.py index 342317f3..7aedf089 100644 --- a/gestioncof/admin.py +++ b/gestioncof/admin.py @@ -4,6 +4,7 @@ from __future__ import division from __future__ import print_function from __future__ import unicode_literals +from django import forms from django.contrib import admin from gestioncof.models import SurveyQuestionAnswer, SurveyQuestion, \ CofProfile, EventOption, EventOptionChoice, Event, Club, CustomMail, \ @@ -232,6 +233,25 @@ class PetitCoursDemandeAdmin(admin.ModelAdmin): class CustomMailAdmin(admin.ModelAdmin): 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(SurveyQuestion, SurveyQuestionAdmin) admin.site.register(Event, EventAdmin) @@ -239,7 +259,7 @@ admin.site.register(EventOption, EventOptionAdmin) admin.site.unregister(User) admin.site.register(User, UserProfileAdmin) admin.site.register(CofProfile) -admin.site.register(Club) +admin.site.register(Club, ClubAdmin) admin.site.register(CustomMail) admin.site.register(PetitCoursSubject) admin.site.register(PetitCoursAbility, PetitCoursAbilityAdmin) diff --git a/gestioncof/forms.py b/gestioncof/forms.py index 62e47c0e..8a64825f 100644 --- a/gestioncof/forms.py +++ b/gestioncof/forms.py @@ -13,7 +13,7 @@ from django.db.models import Max from django.core.validators import MinLengthValidator from gestioncof.models import CofProfile, EventCommentValue, \ - CalendarSubscription + CalendarSubscription, Club from gestioncof.widgets import TriStateCheckbox from gestioncof.shared import lock_table, unlock_table @@ -392,3 +392,14 @@ class CalendarForm(forms.ModelForm): model = CalendarSubscription fields = ['subscribe_to_events', 'subscribe_to_my_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) diff --git a/gestioncof/migrations/0007_alter_club.py b/gestioncof/migrations/0007_alter_club.py new file mode 100644 index 00000000..324c59a6 --- /dev/null +++ b/gestioncof/migrations/0007_alter_club.py @@ -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), + ), + ] diff --git a/gestioncof/models.py b/gestioncof/models.py index 95837a3a..382a5750 100644 --- a/gestioncof/models.py +++ b/gestioncof/models.py @@ -86,10 +86,11 @@ post_save.connect(create_user_profile, sender=User) @python_2_unicode_compatible class Club(models.Model): - name = models.CharField("Nom", max_length=200) - description = models.TextField("Description") - respos = models.ManyToManyField(User, related_name="clubs_geres") - membres = models.ManyToManyField(User, related_name="clubs") + name = models.CharField("Nom", max_length=200, unique=True) + description = models.TextField("Description", blank=True) + respos = models.ManyToManyField(User, related_name="clubs_geres", + blank=True) + membres = models.ManyToManyField(User, related_name="clubs", blank=True) def __str__(self): return self.name diff --git a/gestioncof/templates/home.html b/gestioncof/templates/home.html index f476a0dd..0907adc6 100644 --- a/gestioncof/templates/home.html +++ b/gestioncof/templates/home.html @@ -70,6 +70,7 @@
  • Administration générale
  • Demandes de petits cours
  • Inscription d'un nouveau membre
  • +
  • Gestion des clubs