nk20/apps/wei/forms/registration.py

190 lines
5.5 KiB
Python
Raw Normal View History

# Copyright (C) 2018-2021 by BDE ENS Paris-Saclay
2020-04-12 00:30:48 +00:00
# SPDX-License-Identifier: GPL-3.0-or-later
from django import forms
2020-04-12 01:31:08 +00:00
from django.contrib.auth.models import User
from django.db.models import Q
2020-08-03 11:33:25 +00:00
from django.forms import CheckboxSelectMultiple
2020-04-19 23:26:53 +00:00
from django.utils.translation import gettext_lazy as _
from note.models import NoteSpecial, NoteUser
2020-04-13 04:01:27 +00:00
from note_kfet.inputs import AmountInput, DatePickerInput, Autocomplete, ColorWidget
2020-04-12 00:30:48 +00:00
2020-04-19 23:26:53 +00:00
from ..models import WEIClub, WEIRegistration, Bus, BusTeam, WEIMembership, WEIRole
2020-04-12 00:30:48 +00:00
class WEIForm(forms.ModelForm):
class Meta:
model = WEIClub
exclude = ('parent_club', 'require_memberships', 'membership_duration', )
widgets = {
"membership_fee_paid": AmountInput(),
"membership_fee_unpaid": AmountInput(),
"membership_start": DatePickerInput(),
"membership_end": DatePickerInput(),
"date_start": DatePickerInput(),
"date_end": DatePickerInput(),
}
2020-04-12 01:31:08 +00:00
class WEIRegistrationForm(forms.ModelForm):
def clean(self):
cleaned_data = super().clean()
if 'user' in cleaned_data:
if not NoteUser.objects.filter(user=cleaned_data['user']).exists():
self.add_error('user', _("The selected user is not validated. Please validate its account first"))
return cleaned_data
2020-04-12 01:31:08 +00:00
class Meta:
model = WEIRegistration
2020-04-19 23:26:53 +00:00
exclude = ('wei', )
2020-04-12 01:31:08 +00:00
widgets = {
"user": Autocomplete(
User,
attrs={
'api_url': '/api/user/',
'name_field': 'username',
'placeholder': 'Nom …',
2020-04-12 01:31:08 +00:00
},
),
"birth_date": DatePickerInput(options={'minDate': '1900-01-01',
'maxDate': '2100-01-01'}),
2020-04-12 01:31:08 +00:00
}
2020-04-13 03:02:16 +00:00
class WEIChooseBusForm(forms.Form):
bus = forms.ModelMultipleChoiceField(
queryset=Bus.objects,
label=_("bus"),
help_text=_("This choice is not definitive. The WEI organizers are free to attribute for you a bus and a team,"
+ " in particular if you are a free eletron."),
2020-08-03 11:33:25 +00:00
widget=CheckboxSelectMultiple(),
)
team = forms.ModelMultipleChoiceField(
queryset=BusTeam.objects,
label=_("Team"),
required=False,
help_text=_("Leave this field empty if you won't be in a team (staff, bus chief, free electron)"),
2020-08-03 11:33:25 +00:00
widget=CheckboxSelectMultiple(),
)
roles = forms.ModelMultipleChoiceField(
queryset=WEIRole.objects.filter(~Q(name="1A")),
label=_("WEI Roles"),
help_text=_("Select the roles that you are interested in."),
2020-08-03 11:33:25 +00:00
initial=WEIRole.objects.filter(name="Adhérent WEI").all(),
widget=CheckboxSelectMultiple(),
)
2020-04-14 01:41:26 +00:00
class WEIMembershipForm(forms.ModelForm):
2020-08-03 11:33:25 +00:00
roles = forms.ModelMultipleChoiceField(
queryset=WEIRole.objects,
label=_("WEI Roles"),
widget=CheckboxSelectMultiple(),
)
2020-04-14 01:41:26 +00:00
credit_type = forms.ModelChoiceField(
queryset=NoteSpecial.objects.all(),
label=_("Credit type"),
empty_label=_("No credit"),
required=False,
)
credit_amount = forms.IntegerField(
label=_("Credit amount"),
widget=AmountInput(),
initial=0,
required=False,
)
last_name = forms.CharField(
label=_("Last name"),
required=False,
)
first_name = forms.CharField(
label=_("First name"),
required=False,
)
bank = forms.CharField(
label=_("Bank"),
required=False,
)
2020-04-19 23:26:53 +00:00
def clean(self):
cleaned_data = super().clean()
if 'team' in cleaned_data and cleaned_data["team"] is not None \
and cleaned_data["team"].bus != cleaned_data["bus"]:
self.add_error('bus', _("This team doesn't belong to the given bus."))
2020-04-19 23:26:53 +00:00
return cleaned_data
2020-04-14 01:41:26 +00:00
class Meta:
model = WEIMembership
fields = ('roles', 'bus', 'team',)
widgets = {
"bus": Autocomplete(
Bus,
attrs={
'api_url': '/api/wei/bus/',
'placeholder': 'Bus…',
2020-04-14 01:41:26 +00:00
}
),
"team": Autocomplete(
BusTeam,
attrs={
'api_url': '/api/wei/team/',
'placeholder': 'Équipe…',
},
resetable=True,
2020-04-14 01:41:26 +00:00
),
}
class WEIMembership1AForm(WEIMembershipForm):
"""
Used to confirm registrations of first year members without choosing a bus now.
"""
roles = None
def clean(self):
return super(forms.ModelForm, self).clean()
class Meta:
model = WEIMembership
fields = ('credit_type', 'credit_amount', 'last_name', 'first_name', 'bank',)
2020-04-13 03:02:16 +00:00
class BusForm(forms.ModelForm):
class Meta:
model = Bus
fields = '__all__'
2020-04-13 03:02:16 +00:00
widgets = {
"wei": Autocomplete(
WEIClub,
attrs={
'api_url': '/api/wei/club/',
'placeholder': 'WEI…',
2020-04-13 03:02:16 +00:00
},
),
}
class BusTeamForm(forms.ModelForm):
class Meta:
2020-04-13 04:01:27 +00:00
model = BusTeam
2020-04-13 03:02:16 +00:00
fields = '__all__'
widgets = {
"bus": Autocomplete(
Bus,
attrs={
'api_url': '/api/wei/bus/',
'placeholder': 'Bus…',
2020-04-13 03:02:16 +00:00
},
),
2020-04-13 04:01:27 +00:00
"color": ColorWidget(),
2020-04-13 03:02:16 +00:00
}