From c07cf654fb6a62fc994847fdfebb56d876b3e138 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Tue, 23 Aug 2016 17:40:24 +0200 Subject: [PATCH] Premier jet des clubs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On peut inscrire les utilisateurs aux différents clubs du COF. Le formulaire d'inscription est inclus dans la page “inscription d'un nouveau membre”. À réfléchir comment ajouter des infos supplémentaires : chèque des caution, commentaires, etc. --- gestioncof/forms.py | 13 +++++- gestioncof/migrations/0007_alter_club.py | 47 +++++++++++++++++++++ gestioncof/models.py | 9 ++-- gestioncof/templates/registration_form.html | 4 ++ gestioncof/views.py | 30 ++++++++++--- 5 files changed, 91 insertions(+), 12 deletions(-) create mode 100644 gestioncof/migrations/0007_alter_club.py diff --git a/gestioncof/forms.py b/gestioncof/forms.py index 064eef8e..f6676c4f 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 @@ -389,3 +389,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/registration_form.html b/gestioncof/templates/registration_form.html index 1eb16393..8668152b 100644 --- a/gestioncof/templates/registration_form.html +++ b/gestioncof/templates/registration_form.html @@ -13,6 +13,10 @@ {{ user_form | bootstrap }} {{ profile_form | bootstrap }} +
+ + {{ clubs_form | bootstrap }} +
{{ event_formset.management_form }} {% for event_form in event_formset %}
diff --git a/gestioncof/views.py b/gestioncof/views.py index 5a665860..4e428791 100644 --- a/gestioncof/views.py +++ b/gestioncof/views.py @@ -29,7 +29,7 @@ from gestioncof.decorators import buro_required, cof_required from gestioncof.forms import UserProfileForm, EventStatusFilterForm, \ SurveyForm, SurveyStatusFilterForm, RegistrationUserForm, \ RegistrationProfileForm, EventForm, CalendarForm, EventFormset, \ - RegistrationPassUserForm + RegistrationPassUserForm, ClubsForm from bda.models import Tirage, Spectacle @@ -341,8 +341,9 @@ def registration_form2(request, login_clipper=None, username=None): profile_form = RegistrationProfileForm(initial={ 'login_clipper': login_clipper}) registration_set_ro_fields(user_form, profile_form) - # events + # events & clubs event_formset = EventFormset(events=events, prefix='events') + clubs_form = ClubsForm(initial={'clubs': member.clubs.all()}) if username: member = get_object_or_404(User, username=username) (profile, _) = CofProfile.objects.get_or_create(user=member) @@ -361,15 +362,20 @@ def registration_form2(request, login_clipper=None, username=None): event_formset = EventFormset( events=events, prefix='events', current_registrations=current_registrations) + # Clubs + clubs_form = ClubsForm(initial={'clubs': member.clubs.all()}) elif not login_clipper: # new user user_form = RegistrationPassUserForm() profile_form = RegistrationProfileForm() event_formset = EventFormset(events=events, prefix='events') + clubs_form = ClubsForm() return render(request, "registration_form.html", - {"user_form": user_form, "profile_form": profile_form, - "member": member, "login_clipper": login_clipper, - "event_formset": event_formset}) + {"member": member, "login_clipper": login_clipper, + "user_form": user_form, + "profile_form": profile_form, + "event_formset": event_formset, + "clubs_form": clubs_form}) @buro_required @@ -392,6 +398,7 @@ def registration(request): else: user_form = RegistrationUserForm profile_form = RegistrationProfileForm(request_dict) + clubs_form = ClubsForm(request_dict) events = Event.objects.filter(old=False).all() event_formset = EventFormset(events=events, data=request_dict, prefix='events') @@ -419,10 +426,13 @@ def registration(request): # Maintenant on remplit le formulaire de profil profile_form = RegistrationProfileForm(request_dict, 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() if profile.is_cof and not was_cof: send_custom_mail(member, "bienvenue") + # Enregistrement des inscriptions aux événements for form in event_formset: if 'status' not in form.cleaned_data: form.cleaned_data['status'] = 'no' @@ -455,6 +465,11 @@ def registration(request): comments = field.default send_custom_mail(member, "mega", {"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 return render(request, "registration_post.html", {"success": success, @@ -462,7 +477,8 @@ def registration(request): "profile_form": profile_form, "member": member, "login_clipper": login_clipper, - "event_formset": event_formset}) + "event_formset": event_formset, + "clubs_form": clubs_form}) else: return render(request, "registration.html")