You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

157 lines
6.0 KiB

from django import forms
from django.contrib.auth.models import User, Group
from dal import autocomplete
from .models import School, CotisationHistory, WhiteListHistory, BanishmentHistory
from preferences.models import PaymentMethod
class LoginForm(forms.Form):
"""
Form to log in.
"""
username = forms.CharField(max_length=255, label="Nom d'utitisateur")
password = forms.CharField(max_length=255, widget=forms.PasswordInput, label="Mot de passe")
class CreateUserForm(forms.ModelForm):
"""
Form to create a new user (:class:`django.contrib.auth.models.User`).
"""
class Meta:
model = User
fields = ("username", "last_name", "first_name", "email")
school = forms.ModelChoiceField (queryset=School.objects.all(), label="École")
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super(CreateUserForm, self).__init__(*args, **kwargs)
def clean(self):
cleaned_data = super().clean()
email = cleaned_data.get("email")
if User.objects.filter(email=email).count() > 0:
if User.objects.filter(email=email).count() == 1 and User.objects.get(email=email) == self.user:
pass
else:
raise forms.ValidationError("L'adresse email est déjà utilisée")
class CreateGroupForm(forms.ModelForm):
"""
Form to create a new group (:class:`django.contrib.auth.models.Group`).
"""
class Meta:
model = Group
fields = ("name", )
class EditGroupForm(forms.ModelForm):
"""
Form to edit a group (:class:`django.contrib.auth.models.Group`).
"""
class Meta:
model = Group
fields = "__all__"
class SelectUserForm(forms.Form):
"""
Form to select a user from all users (:class:`django.contrib.auth.models.User`).
"""
user = forms.ModelChoiceField(queryset=User.objects.all(), required=True, label="Utilisateur", widget=autocomplete.ModelSelect2(url='users:all-users-autocomplete', attrs={'data-minimum-input-length':2}))
class SelectNonSuperUserForm(forms.Form):
"""
Form to select a user from all non-superuser users (:class:`django.contrib.auth.models.User`).
"""
user = forms.ModelChoiceField(queryset=User.objects.filter(is_active=True), required=True, label="Utilisateur", widget=autocomplete.ModelSelect2(url='users:non-super-users-autocomplete', attrs={'data-minimum-input-length':2}))
class SelectNonAdminUserForm(forms.Form):
"""
Form to select a user from all non-staff users (:class:`django.contrib.auth.models.User`).
"""
user = forms.ModelChoiceField(queryset=User.objects.filter(is_active=True), required=True, label="Utilisateur", widget=autocomplete.ModelSelect2(url='users:non-admin-users-autocomplete', attrs={'data-minimum-input-length':2}))
class GroupsEditForm(forms.ModelForm):
"""
Form to edit a user's list of groups (:class:`django.contrib.auth.models.User` and :class:`django.contrib.auth.models.Group`).
"""
class Meta:
model = User
fields = ("groups", )
class EditPasswordForm(forms.Form):
"""
Form to change the password of a user (:class:`django.contrib.auth.models.User`).
"""
password = forms.CharField(max_length=255, widget=forms.PasswordInput, label="Mot de passe actuel")
password1 = forms.CharField(max_length=255, widget=forms.PasswordInput, label="Nouveau mot de passe")
password2 = forms.CharField(max_length=255, widget=forms.PasswordInput, label="Nouveau mot de passe (répétez)")
def clean_password2(self):
"""
Verify if the two new passwords are identical
"""
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise forms.ValidationError("Les mots de passe ne sont pas identiques")
return password2
class addCotisationHistoryForm(forms.ModelForm):
"""
Form to add a :class:`users.models.CotisationHistory` to user (:class:`django.contrib.auth.models.User`).
"""
def __init__(self, *args, **kwargs):
super(addCotisationHistoryForm, self).__init__(*args, **kwargs)
self.fields['paymentMethod'].queryset = PaymentMethod.objects.filter(is_usable_in_cotisation=True).filter(is_active=True)
class Meta:
model = CotisationHistory
fields = ("cotisation", "paymentMethod")
class addWhiteListHistoryForm(forms.ModelForm):
"""
Form to add a :class:`users.models.WhiteListHistory` to user (:class:`django.contrib.auth.models.User`).
"""
class Meta:
model = WhiteListHistory
fields = ("duration", "reason")
class addBanishmentHistoryForm(forms.ModelForm):
"""
Form to add a :class:`users.models.BanishmentHistory` to user (:class:`django.contrib.auth.models.User`).
"""
class Meta:
model = BanishmentHistory
fields = ("end_date", "reason")
class SchoolForm(forms.ModelForm):
"""
Form to add and edit a :class:`users.models.School`.
"""
class Meta:
model = School
fields = "__all__"
class ExportForm(forms.Form):
"""
Form to export list of users (:class:`django.contrib.auth.models.User`) to csv file
"""
QUERY_TYPE_CHOICES = (
('all', 'Tous les comptes'),
('all_active', 'Tous les comptes actifs'),
('adherent', 'Tous les adhérents'),
('adherent_active', 'Tous les adhérents actifs')
)
FIELDS_CHOICES = (
('username', 'Nom d\'utilisateur'),
('last_name', 'Nom'),
('first_name', 'Prénom'),
('email', 'Adresse mail'),
('school', 'École'),
('balance', 'Solde'),
('credit', 'Crédit'),
('debit', 'Débit')
)
query_type = forms.ChoiceField(choices=QUERY_TYPE_CHOICES, label="Ensemble de la demande")
fields = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=FIELDS_CHOICES, label="Champs")
group = forms.ModelChoiceField(queryset=Group.objects.all(), empty_label="Tous les groupes", required=False, label="Groupe")