Fix the registration forms

- The former `RegistrationUserProfileForm` is splitted in two.
- There is a new form: `RegistrationCofProfileForm`
This commit is contained in:
Martin Pépin 2017-02-11 00:21:11 +01:00
parent 58d708b791
commit b639c04549
4 changed files with 60 additions and 42 deletions

View file

@ -17,6 +17,8 @@ from .models import CofProfile, EventCommentValue, \
from .widgets import TriStateCheckbox
from .shared import lock_table, unlock_table
from gestion.models import Profile
from bda.models import Spectacle
@ -216,30 +218,21 @@ class RegistrationPassUserForm(RegistrationUserForm):
return user
class RegistrationProfileForm(forms.ModelForm):
def __init__(self, *args, **kw):
super(RegistrationProfileForm, self).__init__(*args, **kw)
self.fields['mailing_cof'].initial = True
self.fields['mailing_bda'].initial = True
self.fields['mailing_bda_revente'].initial = True
class RegistrationCofProfileForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(RegistrationCofProfileForm, self).__init__(*args, **kwargs)
self.fields['num'].widget.attrs['readonly'] = True
self.fields.keyOrder = [
'login_clipper',
'phone',
'occupation',
'departement',
'is_cof',
'num',
'type_cotiz',
'mailing_cof',
'mailing_bda',
'mailing_bda_revente',
'comments'
]
class Meta:
model = CofProfile
fields = [
"num", "type_cotiz", "is_cof", "is_buro",
"mailing", "mailing_bda", "mailing_bda_revente",
"petits_cours_accept", "petits_cours_remarques"
]
def save(self, *args, **kw):
instance = super(RegistrationProfileForm, self).save(*args, **kw)
instance = super(RegistrationCofProfileForm, self).save(*args, **kw)
if instance.is_cof and not instance.num:
# Generate new number
try:
@ -253,11 +246,20 @@ class RegistrationProfileForm(forms.ModelForm):
unlock_table(CofProfile)
return instance
class RegistrationProfileForm(forms.ModelForm):
class Meta:
model = CofProfile
fields = ("login_clipper", "num", "phone", "occupation",
"departement", "is_cof", "type_cotiz", "mailing_cof",
"mailing_bda", "mailing_bda_revente", "comments")
model = Profile
fields = [
"login_clipper", "phone", "occupation", "departement", "comments"
]
class RegistrationUserForm(forms.ModelForm):
class Meta:
model = User
fields = ["first_name", "last_name"]
STATUS_CHOICES = (('no', 'Non'),
('wait', 'Oui mais attente paiement'),

View file

@ -15,6 +15,7 @@
</table>
<hr />
<table>
{{ cofprofile_form | bootstrap }}
{{ clubs_form | bootstrap }}
</table>
{{ event_formset.management_form }}

View file

@ -27,13 +27,16 @@ from .models import EventCommentField, EventCommentValue, \
from .shared import send_custom_mail
from .models import CofProfile, Clipper, Club
from .decorators import buro_required, cof_required
from .forms import UserProfileForm, EventStatusFilterForm, \
SurveyForm, SurveyStatusFilterForm, RegistrationUserForm, \
RegistrationProfileForm, EventForm, CalendarForm, EventFormset, \
RegistrationPassUserForm, ClubsForm
from .forms import (
EventStatusFilterForm, SurveyForm, SurveyStatusFilterForm,
RegistrationUserForm, RegistrationProfileForm, RegistrationCofProfileForm,
EventForm, CalendarForm, EventFormset, RegistrationPassUserForm, ClubsForm
)
from bda.models import Tirage, Spectacle
from gestion.models import Profile
@login_required
def home(request):
@ -331,16 +334,20 @@ def registration_form2(request, login_clipper=None, username=None):
# profile
profile_form = RegistrationProfileForm(initial={
'login_clipper': login_clipper})
# COF - profile
cofprofile_form = RegistrationCofProfileForm()
registration_set_ro_fields(user_form, profile_form)
# events & clubs
event_formset = EventFormset(events=events, prefix='events')
clubs_form = ClubsForm()
if username:
member = get_object_or_404(User, username=username)
(profile, _) = CofProfile.objects.get_or_create(user=member)
(profile, _) = Profile.objects.get_or_create(user=member)
(cofprofile, _) = CofProfile.objects.get_or_create(profile=profile)
# already existing, prefill
user_form = RegistrationUserForm(instance=member)
profile_form = RegistrationProfileForm(instance=profile)
cofprofile_form = RegistrationCofProfileForm(instance=cofprofile)
registration_set_ro_fields(user_form, profile_form)
# events
current_registrations = []
@ -360,12 +367,14 @@ def registration_form2(request, login_clipper=None, username=None):
user_form = RegistrationPassUserForm()
user_form.force_long_username()
profile_form = RegistrationProfileForm()
cofprofile_form = RegistrationCofProfileForm()
event_formset = EventFormset(events=events, prefix='events')
clubs_form = ClubsForm()
return render(request, "registration_form.html",
{"member": member, "login_clipper": login_clipper,
"user_form": user_form,
"profile_form": profile_form,
"cofprofile_form": cofprofile_form,
"event_formset": event_formset,
"clubs_form": clubs_form})
@ -414,17 +423,25 @@ def registration(request):
if user_form.is_valid():
member = user_form.save()
profile, _ = CofProfile.objects.get_or_create(user=member)
was_cof = profile.is_cof
request_dict["num"] = profile.num
cofprofile, _ = CofProfile.objects.get_or_create(user=member)
was_cof = cofprofile.is_cof
request_dict["num"] = cofprofile.num
# Maintenant on remplit le formulaire de profil
profile_form = RegistrationProfileForm(request_dict,
instance=profile)
if (profile_form.is_valid() and event_formset.is_valid()
and clubs_form.is_valid()):
cofprofile_form = RegistrationCofProfileForm(
request_dict,
instance=cofprofile
)
forms_are_valid = all(
profile_form.is_valid(),
cofprofile_form.is_valid(),
event_formset.is_valid(),
clubs_form.is_valid()
)
if forms_are_valid:
# Enregistrement du profil
profile = profile_form.save()
if profile.is_cof and not was_cof:
profile_form.save()
cofprofile = cofprofile_form.save()
if cofprofile.is_cof and not was_cof:
send_custom_mail(member, "bienvenue")
# Enregistrement des inscriptions aux événements
for form in event_formset:
@ -469,6 +486,7 @@ def registration(request):
{"success": success,
"user_form": user_form,
"profile_form": profile_form,
"cofprofile_form": cofprofile_form,
"member": member,
"login_clipper": login_clipper,
"event_formset": event_formset,

View file

@ -10,10 +10,7 @@ class UserForm(forms.ModelForm):
fields = ["first_name", "last_name"]
class ProfileForm(forms.ModelForm):
class Meta:
model = CofProfile
model = Profile
fields = ["phone", "departement"]