File: forms.py

package info (click to toggle)
slm 2.11-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 24,504 kB
  • sloc: python: 15,349; javascript: 5,043; makefile: 184; sh: 182; xml: 57
file content (132 lines) | stat: -rw-r--r-- 5,557 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
from django.forms import ModelForm, Form, PasswordInput, \
   HiddenInput, ValidationError
from django import forms
from django.utils.translation import gettext_lazy as _

from .models import Parametres, Courriers, Disciplines, Materiel, \
   Classes, Eleves

import re

class donnees_utilisateur_Form(Form):
   labelNom = _("Nom")
   nom = forms.CharField(label=labelNom, max_length=25, required = False)
   prenom = forms.CharField(label=_("Prénom"), max_length=25, required = False)
   email = forms.CharField(label=_("Courriel"), max_length=50, required = False)
   passe1 = forms.CharField(label=_("Mot de passe"), max_length=32,
                            widget=PasswordInput, required = False)
   passe2 = forms.CharField(label=_("Répétez le mot de passe"), max_length=32,
                            widget=PasswordInput, required = False)
   next = forms.CharField(max_length=50, widget = HiddenInput)

   def __init__(self, *args, **kwargs):
      super(donnees_utilisateur_Form, self).__init__(*args, **kwargs)
      self.fields['nom'].widget.attrs['placeholder'] = 'Votre nom ?'
      self.fields['prenom'].widget.attrs['placeholder'] = 'Votre prénom ?'
      self.fields['email'].widget.attrs['placeholder'] = 'Votre courriel ?'
      self.fields['passe1'].widget.attrs['placeholder'] = \
         'Nouveau mot de passe éventuel'
      self.fields['passe2'].widget.attrs['placeholder'] = 'Le même ...'
      return
     
   def clean_passe2(self):
      p1 = self.cleaned_data["passe1"]
      p2 = self.cleaned_data["passe2"]
      if p1 and not p2 == p1:
         raise ValidationError(
            _("Erreur : les deux mots de passes étaient différents, recommencez"))
      if p1 and len(p1) < 7:
         raise ValidationError(
            _("Erreur : un mot de passe doit contenir au moins 7 caractères"))
      minuscules = re.findall(r"[a-z]", p1)
      majuscules = re.findall(r"[A-Z]", p1)
      chiffres = re.findall(r"\d", p1)
      if p1 and (not minuscules or not majuscules or not chiffres):
          raise ValidationError(
            _("Erreur : un mot de passe doit contenir au moins ") + \
             _("une lettre minuscule, une majuscule, et un chiffre"))
      return p2


class Parametres_Form(ModelForm):
   class Meta:
        model = Parametres
        fields = '__all__'
        
class Courriers_Form(ModelForm):
   class Meta:
        model = Courriers
        fields = '__all__'
        exclude = ('N',)

class Materiel_Form(ModelForm):
   discipline = forms.ModelChoiceField(queryset=Disciplines.objects.order_by('libelle'))
   class Meta:
      model = Materiel
      fields = '__all__'
      exclude = ('id','Pretes','Achetes','Perdus')

   def clean(self):
      """
      Au-delà des vérifications usuelles,
      vérifie que la liste d'options/spécialités est vide au cas où
      un manuel est dans le tronc commun
      """
      ModelForm.clean(self)
      tronc = self.cleaned_data.get("tronc")
      lib_option = self.cleaned_data.get("lib_option")
      if tronc and lib_option:
         raise ValidationError(
            _("Un livre ne peut pas être à la fois dans le tronc commun"
              " et définir des options SIÈCLE"))
      return
  
class Eleves_Form(ModelForm):
   classe = forms.ModelChoiceField(queryset=Classes.classes_importantes())
   class Meta:
      model = Eleves
      fields = ('Nom_de_famille', 'Prenom', 'classe',
                'classes_passees', 'no_caution',
                'Lib_Mat_Enseignee_1','Lib_Mat_Enseignee_2',
                'Lib_Mat_Enseignee_3','Lib_Mat_Enseignee_4',
                'Lib_Mat_Enseignee_5','Lib_Mat_Enseignee_6',
                'Lib_Mat_Enseignee_7','Lib_Mat_Enseignee_8',
                'Lib_Mat_Enseignee_9','Lib_Mat_Enseignee_10',
                'Tel_Portable', 'Adresse_Repr_Leg',
                'Tel_Portable_Repr_Leg', 'Tel_Portable_Autre_Repr_Leg',
                'message',
                'a_verifier')
      labels = {f.name: _(f.verbose_name) for f in Eleves._meta.fields}
      widgets = {
         'classes_passees': forms.TextInput(attrs={'readonly': 'readonly'}),
         'no_caution': forms.TextInput(attrs={'readonly': 'readonly'}),
         'a_verifier': forms.TextInput(attrs={'readonly': 'readonly'}),
      }

class Eleves_ancien_Form(ModelForm):
   """
   Formulaire pour les élèves dont le numéro de caution n'avait pas été
   attribué automatiquement par le logiciel, c'est à dire avec un numéro de
   caution inférieur à MIN_NO_CAUTION
   """
   classe = forms.ModelChoiceField(queryset=Classes.classes_importantes())
   class Meta:
      model = Eleves
      fields = ('Nom_de_famille', 'Prenom', 'classe',
                'classes_passees', 'no_caution',
                'Lib_Mat_Enseignee_1','Lib_Mat_Enseignee_2',
                'Lib_Mat_Enseignee_3','Lib_Mat_Enseignee_4',
                'Lib_Mat_Enseignee_5','Lib_Mat_Enseignee_6',
                'Lib_Mat_Enseignee_7','Lib_Mat_Enseignee_8',
                'Lib_Mat_Enseignee_9','Lib_Mat_Enseignee_10',
                'Tel_Portable', 'Adresse_Repr_Leg',
                'Tel_Portable_Repr_Leg', 'Tel_Portable_Autre_Repr_Leg',
                'a_verifier')
      labels = {f.name: _(f.verbose_name) for f in Eleves._meta.fields}
      widgets = {
         'classes_passees': forms.TextInput(attrs={'readonly': 'readonly'}),
         'a_verifier': forms.TextInput(attrs={'readonly': 'readonly'}),
      }

class SiecleForm(forms.Form):
    fichier_siecle = forms.FileField(label='Sélectionner un export de SIÈCLE')