Commit 1ec2191f authored by Hamza Dely's avatar Hamza Dely

Merge branch 'experimental'

Ajout de l'application WEI
parents 0e110546 9a5b726e
......@@ -421,3 +421,179 @@ class TransfertForm(MoneyForm):
class DeleteCompteForm(forms.Form):
"""Formulaire de confirmation de suppression de compte."""
anonymiser = forms.BooleanField(label="Anonymiser le compte (nom, prénom, mail, adresse, …)", required=False)
DEPTS = (
('', '<Choisir un département>'),
('A0', 'Informatique (A0)'),
('A1', 'Mathématiques (A1)'),
('A2', 'Physique (A2)'),
('A\'2', 'Physique Appliquée (A\'2)'),
('A"2', 'Chimie (A"2)'),
('A3', 'Biologie (A3)'),
('B1234', 'SAPHIRE (B1234)'),
('B1', 'Mécanique (B1)'),
('B2', 'Génie Civil (B2)'),
('B3', 'Génie Mécanique (B3)'),
('B4', 'EEA (B4)'),
('C', 'Design (C)'),
('D1', 'Troll (D1)'),
('D2', 'Eco-Gestion (D2)'),
('D3', 'Sciences sociales (D3)'),
('E', 'Anglais (E)'),
('EXT', 'Autre (EXT)'),
)
MODES_PAIEMENTS = (
('note', 'Note'),
('soge', 'Société Générale'),
('virement', 'Virement Bancaire (sous conditions*)'),
)
ROLES = (
('libre', 'Electron libre'),
('chef_equipe', 'Chef d\'équipe (3A+)'),
('chef_bus', 'Chef de bus (2A sobre)'),
('staff', 'Staff WEI'),
('inconnu', 'Je ne sais pas'),
)
class WEImonInscriptionForm(forms.Form):
"""
Questionnaire WEI pour les 2A+
"""
tel = forms.CharField(max_length=10, required=True, label="Téléphone")
urgence_nom = forms.CharField(max_length=255, required=True, label="Nom de la personne à contacter en cas d'urgence")
urgence_tel = forms.CharField(max_length=10, required=True, label="Téléphone de la personne à contacter en cas d'urgence")
annee = forms.IntegerField(min_value=1, required=True, label="Années à l'ENS (2015-2016 incluse)")
dept = forms.ChoiceField(choices=DEPTS, required=True, initial='', label="Département d'enseignement")
paiement = forms.ChoiceField(choices=MODES_PAIEMENTS, required=True, initial='note', label="Mode de paiement")
normalien = forms.BooleanField(required=False, initial=False, label="Normalien, Prof, Directeur de département...")
conge = forms.BooleanField(required=False, initial=False, label="Si normalien : CIR, CST, Joker ...")
pbsante = forms.CharField(widget=forms.Textarea, required=False, label="Informations pour le staff WEI (allergies/intolérances, végétarien, problèmes de santé, ...)")
bus = forms.CharField(max_length=255, initial='Je ne sais pas', required=False, label="Bus demandé")
role = forms.MultipleChoiceField(choices=ROLES, initial='inconnu', required=True, label="Je voudrais faire mon WEI en tant que", widget=forms.CheckboxSelectMultiple)
def _is_tel_number(self, data):
"""
Méthode permettant de vérifier qu'il s'agit bien d'un numéro
de téléphone valide.
"""
raw_tel = data
AUTH_PREFIXES = ['01', '02', '03', '04', '05', '06', '07', ]
# On commence par vérifier que le numéro a la bonne taille
if len(raw_tel) != 10:
raise forms.ValidationError("Ton numéro de téléphone ne fait pas 10 chiffres")
# Ensuite on vérifie le préfixe
if not raw_tel[0:2] in AUTH_PREFIXES:
raise forms.ValidationError("Ton numéro de téléphone est invalide")
# Ensuite on vérifie qu'il s'agit bien d'un entier
try:
cleaned_tel = int(raw_tel)
except ValueError:
raise forms.ValidationError("Ton numéro de téléphone est invalide")
return raw_tel
def clean_tel(self):
"""
Méthode effectuant les vérifications sur la validité du champ tel
entré par l'utilisateur.
"""
return self._is_tel_number(self.cleaned_data["tel"])
def clean_urgence_tel(self):
"""
Méthode effectuant les vérifications sur la validité du champ urgence_tel
entré par l'utilisateur.
"""
return self._is_tel_number(self.cleaned_data["urgence_tel"])
def clean_role(self):
"""
Méthode procédant à la validation du champ role, et le transformant en
chaine de caractères afin de pouvoir être stocké dans la base de données.
"""
return ";".join(self.cleaned_data["role"])
def clean_conge(self):
"""
Méthode désactivant le champ conge si normalien n'est pas coché.
"""
val_norm = self.cleaned_data["normalien"]
val_conge = self.cleaned_data["conge"]
if val_norm == True:
return val_conge
else:
return False
class WEIVieuxForm(forms.Form):
"""
Questionnaire WEI pour les 2A+
"""
pseudo = forms.CharField(max_length=255, required=True, label="Nom de note")
tel = forms.CharField(max_length=10, required=True, label="Téléphone")
mail = forms.EmailField(max_length=254, required=True, label="Email")
urgence_nom = forms.CharField(max_length=255, required=True, label="Nom de la personne à contacter en cas d'urgence")
urgence_tel = forms.CharField(max_length=10, required=True, label="Téléphone de la personne à contacter en cas d'urgence")
annee = forms.IntegerField(min_value=0, required=True, label="Années à l'ENS (2015-2016 incluse)")
dept = forms.ChoiceField(choices=DEPTS, required=True, initial='', label="Département d'enseignement")
paiement = forms.ChoiceField(choices=MODES_PAIEMENTS, required=True, label="Mode de paiement")
normalien = forms.BooleanField(required=False, initial=False, label="Normalien, Prof, Directeur de département...")
conge = forms.BooleanField(required=False, initial=False, label="Si normalien : CIR, CST ...")
pbsante = forms.CharField(widget=forms.Textarea, required=False, label="Informations pour le staff WEI (allergies/intolérances, végétarien, problèmes de santé, ...)")
bus = forms.CharField(max_length=255, initial='Je ne sais pas', required=False, label="Bus demandé")
role = forms.MultipleChoiceField(choices=ROLES, initial='inconnu', required=True, label="Je voudrais faire mon WEI en tant que", widget=forms.CheckboxSelectMultiple)
def _is_tel_number(self, data):
"""
Méthode permettant de vérifier qu'il s'agit bien d'un numéro
de téléphone valide.
"""
raw_tel = data
AUTH_PREFIXES = ['01', '02', '03', '04', '05', '06', '07', ]
# On commence par vérifier que le numéro a la bonne taille
if len(raw_tel) != 10:
raise forms.ValidationError("Ton numéro de téléphone ne fait pas 10 chiffres")
# Ensuite on vérifie le préfixe
if not raw_tel[0:2] in AUTH_PREFIXES:
raise forms.ValidationError("Ton numéro de téléphone est invalide")
# Ensuite on vérifie qu'il s'agit bien d'un entier
try:
cleaned_tel = int(raw_tel)
except ValueError:
raise forms.ValidationError("Ton numéro de téléphone est invalide")
return raw_tel
def clean_tel(self):
"""
Méthode effectuant les vérifications sur la validité du champ tel
entré par l'utilisateur.
"""
return self._is_tel_number(self.cleaned_data["tel"])
def clean_urgence_tel(self):
"""
Méthode effectuant les vérifications sur la validité du champ urgence_tel
entré par l'utilisateur.
"""
return self._is_tel_number(self.cleaned_data["urgence_tel"])
def clean_role(self):
"""
Méthode procédant à la validation du champ role, et le transformant en
chaine de caractères afin de pouvoir être stocké dans la base de données.
"""
return ";".join(self.cleaned_data["role"])
......@@ -47,6 +47,12 @@ urlpatterns = patterns('note.views',
url(ur'^/preinscriptions?/*$', 'preinscriptions'),
# les inscriptions
url(ur'^/inscriptions?(?:/(?P<preid>[^/]*))?(?P<delete>/delete)?/*$', 'inscriptions'),
# Application WEI
url(ur'^/wei/*$', 'WEIaccueil'),
url(ur'^/wei/monInscription/*$', 'WEImonInscription'),
url(ur'^/wei/1a/*$', 'WEI1A'),
url(ur'^/wei/vieux/*$', 'WEIvieux'),
url(ur'^/wei/inscrits/*$', 'WEIinscrits'),
# regeneration du password
url(ur'^/regen_pw/(?P<token>[^/]*)/*$', 'regen_pw'),
# easter egg
......
......@@ -494,6 +494,126 @@ def standard_page_withignores(ignore_casts=[]):
return _decorated
return real_decorator
###############################################################################
### Fonctions utilitaires pour l'application WEI ###
###############################################################################
def _get_dept_code(dept):
"""
Fonction transformant une chaine de caractères désignant un département
d'enseignement en code, par exemple "Physique" -> "A2".
Renvoie 'EXT' si le département est inconnu.
"""
if dept.lower() in [
'info',
'informatique',
'a0',
]:
code = 'A0'
elif dept.lower() in [
'math',
'maths',
'mathématiques',
'mathematiques',
]:
code = 'A1'
elif dept.lower() in [
'physique',
'phys',
'a2',
]:
code = 'A2'
elif dept.lower() in [
'phys. appliquée',
'physique appliquée',
'phys. appliquee',
'physique appliquee',
'phys appliquée',
'phys appliquee',
]:
code = 'A\'2'
elif dept.lower() in [
'chimie',
'a"2',
]:
code = 'A"2'
elif dept.lower() in [
'bio',
'biologie',
'a3',
]:
code = 'A3'
elif dept.lower() in [
'saphire',
'b123',
'b1234',
]:
code = 'B1234'
elif dept.lower() in [
'méca',
'mécanique',
'meca',
'mecanique',
'b1'
]:
code = 'B1'
elif dept.lower() in [
'génie civil',
'genie civil',
'b2',
]:
code = 'B2'
elif dept.lower() in [
'génie mécanique',
'genie mecanique',
'génie mecanique',
'genie mécanique',
'genie méca',
'génie méca',
'genie meca',
'genie méca',
'b3',
]:
code = 'B3'
elif dept.lower() in [
'eea',
'electronique',
'genie electrique',
'génie éléctrique',
'b4',
]:
code = 'B4'
elif dept.lower() in [
'design',
'c',
]:
code = 'C'
elif dept.lower() in [
'eco-gestion',
'ecogestion',
'eco',
'gestion',
'd2',
]:
code = 'D2'
elif dept.lower() in [
'sciences sociales',
'socio',
'd3',
]:
code = 'D3'
elif dept.lower() in [
'anglais',
'anglaise',
'e',
]:
code = 'E'
else:
code = 'EXT'
return code
#: Comme :py:meth:`standard_page_withignores` mais, justement sans ignores, parce que la plupart des pages n'en ont pas besoin.
#: (C'est en fait le résultat de ``standard_page_withignores([])``
standard_page = standard_page_withignores()
This diff is collapsed.
{% extends "note/base.html" %}
{% block title %}Inscription{% endblock %}
{% block mainstyle %}main_style{% endblock %}
{% block content %}
<div class="tabbable">
<div class="labels">
<ul id="tab-labels">
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/" class="default">Consignes d'inscription</a></h5></li>
{% if haswei %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/inscrits/" class="default">Liste des inscrits</a></h5></li>
{% endif %}
{% if myself and is_personne %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/monInscription/" class="default">Mon inscription au WEI</a></h5></li>
{% endif %}
{% if preinscriptions %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/1a/" class="default active">Inscription 1A</a></h5></li>
{% endif %}
{% if inscriptions %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/vieux/" class="default">Inscription 2A+</a></h5></li>
{% endif %}
</ul>
</div>
<div id="tab-panels">
<h1>High[WEI] To Hell</h1>
<br/>
<h1>Inscription 1A WEI 2015</h1>
<br/>
{% if preinscriptions and form %}
<form method="post" action="" class="form-horizontal">{% csrf_token %}
{% include "note/form_contents.html" %}
</form>
{% elif preinscriptions %}
<h3>Le formulaire 1A sera bientôt disponible</h3>
{% else %}
<h3>Vous n'avez pas accès à cette page</h3>
{% endif %}
</div>
</div>
{% endblock %}
{% extends "note/base.html" %}
{% block title %}Inscription{% endblock %}
{% block mainstyle %}main_style{% endblock %}
{% block content %}
<div class="tabbable">
<div class="labels">
<ul id="tab-labels">
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/" class="default active">Consignes d'inscription</a></h5></li>
{% if haswei %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/inscrits/" class="default">Liste des inscrits</a></h5></li>
{% endif %}
{% if myself and is_personne %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/monInscription/" class="default">Mon inscription au WEI</a></h5></li>
{% endif %}
{% if preinscriptions %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/1a/" class="default">Inscription 1A</a></h5></li>
{% endif %}
{% if inscriptions %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/vieux/" class="default">Inscription 2A+</a></h5></li>
{% endif %}
</ul>
</div>
<div id="tab-panels">
<h1>High[WEI] To Hell</h1>
<br/>
<h1>Gestion des inscriptions WEI</h1>
<br/>
<h2>Consignes générales</h2>
<br/>
<p>Informations à venir</p>
</div>
</div>
{% endblock %}
{% extends "note/base.html" %}
{% block title %}Inscription{% endblock %}
{% block mainstyle %}main_style{% endblock %}
{% block content %}
<div class="tabbable">
<div class="labels">
<ul id="tab-labels">
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/" class="default">Consignes d'inscription</a></h5></li>
{% if haswei %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/inscrits/" class="default active">Liste des inscrits</a></h5></li>
{% endif %}
{% if myself and is_personne %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/monInscription/" class="default">Mon inscription au WEI</a></h5></li>
{% endif %}
{% if preinscriptions %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/1a/" class="default">Inscription 1A</a></h5></li>
{% endif %}
{% if inscriptions %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/vieux/" class="default">Inscription 2A+</a></h5></li>
{% endif %}
</ul>
</div>
<div id="tab-panels">
<h1>High[WEI] To Hell</h1>
<br/>
{% if haswei %}
<form method="post" action="">
{% csrf_token %}
<h2>Liste des préinscrits au WEI</h2>
<table class="table table-condensed table-striped">
<thead>
<tr>
<th>ID/PreID</th>
<th>Nom</th>
<th>Prénom</th>
<th>Nom de note</th>
<th>Email</th>
<th>Téléphone</th>
<th>Catégorie</th>
<th>Bus demandés</th>
<th style="text-align : center">WEI Payé</th>
<th style="text-align : center">Caution donnée</th>
<th style="text-align : center">Supprimer</th>
</tr>
</thead>
<tbody>
{% for entry in liste_pre %}
<tr>
<td>{{ entry.idbde }}</td>
<td>{{ entry.nom }}</td>
<td>{{ entry.prenom }}</td>
<td>{{ entry.pseudo }}</td>
<td>{{ entry.mail }}</td>
<td>{{ entry.tel }}</td>
<td>{{ entry.normalien|yesno:"Normalien,Non normalien" }}{% if entry.normalien %} ({{ entry.conge|yesno:"Non payé,Payé" }}){% endif %}</td>
<td>{{ entry.bus }}</td>
<td style="text-align : center"><input name="payé_{{ entry.idwei }}" type="checkbox" {% if entry.payé %}checked{% endif %} /></td>
<td style="text-align : center">{% if entry.caution != None %}<input name="caution_{{ entry.idwei }}" type="checkbox" {% if entry.caution %}checked{% endif %} />{% else %}Éxempté{% endif %}</td>
<td style="text-align : center"><input name="supprimer_{{ entry.idwei }}" type="checkbox" /></td>
</tr>
{% empty %}
<tr>
<td colspan=11 style="text-align : center">Aucune préinscription n'est enregistrée</td>
</tr>
{% endfor %}
</tbody>
</table>
<h2>Liste des inscrits au WEI</h2>
<table class="table table-condensed table-striped">
<thead>
<tr>
<th>ID/PreID</th>
<th>Nom</th>
<th>Prénom</th>
<th>Nom de note</th>
<th>Email</th>
<th>Téléphone</th>
<th>Catégorie</th>
<th>Bus demandés</th>
<th style="text-align : center">WEI payé</th>
<th style="text-align : center">Caution donnée</th>
</tr>
</thead>
<tbody>
{% for entry in liste_insc %}
<tr>
<td>{{ entry.idbde }}</td>
<td>{{ entry.nom }}</td>
<td>{{ entry.prenom }}</td>
<td>{{ entry.pseudo }}</td>
<td>{{ entry.mail }}</td>
<td>{{ entry.tel }}</td>
<td>{{ entry.normalien|yesno:"Normalien,Non normalien" }}{% if entry.normalien %} ({{ entry.conge|yesno:"Non payé,Payé" }}){% endif %}</td>
<td>{{ entry.bus }}</td>
<td style="text-align : center"><input name="payé_{{ entry.idwei }}" type="checkbox" {% if entry.payé %}checked{% endif %}/></td>
<td style="text-align : center">{% if entry.caution != None %}<input name="caution_{{ entry.idwei }}" type="checkbox" {% if entry.caution %}checked{% endif %}/>{% else %}Éxempté{% endif %}</td>
</tr>
{% empty %}
<tr>
<td colspan=10 style="text-align : center">Aucune inscription n'est enregistrée</td>
</tr>
{% endfor %}
</tbody>
</table>
<input class="btn btn-primary" type="submit" value="Valider" />
</form>
{% else %}
<h3>Vous n'avez pas accès à cette page</h3>
<br/>
{% endif %}
</div>
</div>
{% endblock %}
{% extends "note/base.html" %}
{% block title %}Inscription{% endblock %}
{% block mainstyle %}main_style{% endblock %}
{% block content %}
<div class="tabbable">
<div class="labels">
<ul id="tab-labels">
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/" class="default">Consignes d'inscription</a></h5></li>
{% if haswei %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/inscrits/" class="default">Liste des inscrits</a></h5></li>
{% endif %}
{% if myself and is_personne %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/monInscription/" class="default active">Mon inscription au WEI</a></h5></li>
{% endif %}
{% if preinscriptions %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/1a/" class="default">Inscription 1A</a></h5></li>
{% endif %}
{% if inscriptions %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/vieux/" class="default">Inscription 2A+</a></h5></li>
{% endif %}
</ul>
</div>
<div id="tab-panels">
<h1>High[WEI] To Hell</h1>
<br/>
<h1>Mon inscription au WEI 2015</h1>
<br/>
{% if myself and done %}
<h3>Tu as demandé à être inscrit au WEI 2015</h3>
<h3>État de la demande : <span style="color:{{ etat_demande|yesno:"green,orange,red"}}">{{ etat_demande|yesno:"Validée,En cours de traitement,Inconnu" }}</span></h3>
<br/>
<h4>Pour toute demande relative à ton inscription, tu peux contacter un respo WEI ou un respo info BdE</h4>
<h4></h4>
{% elif myself %}
<h2>{{ compte.prenom }} {{ compte.nom }}</h2>
<h3>{{ compte.mail }}</h3>
<br/>
<form method="post" action="" class="form-horizontal">{% csrf_token %}
{% include "note/form_contents.html" %}
</form>
{% else %}
<h3>Ce compte ne peut pas être inscrit au WEI</h3>
{% endif %}
<br/>
</div>
</div>
{% endblock %}
{% extends "note/base.html" %}
{% block title %}Inscription{% endblock %}
{% block mainstyle %}main_style{% endblock %}
{% block content %}
<div class="tabbable">
<div class="labels">
<ul id="tab-labels">
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/" class="default active">Consignes d'inscription</a></h5></li>
{% if haswei %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/inscrits/" class="default">Liste des inscrits</a></h5></li>
{% endif %}
{% if myself and is_personne %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/monInscription/" class="default">Mon inscription au WEI</a></h5></li>
{% endif %}
{% if preinscriptions %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/1a/" class="default">Inscription 1A</a></h5></li>
{% endif %}
{% if inscriptions %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/vieux/" class="default">Inscription 2A+</a></h5></li>
{% endif %}
</ul>
</div>
<div id="tab-panels">
<h1>High[WEI] To Hell</h1>
<br/>
<h1>Inscription WEI</h1>
<br/>
{% if succes %}
<p>Ta demande d'inscription a bien été prise en compte</p>
{% else %}
<p>Une erreur s'est produite lors de ta demande d'inscription. Si le problème persiste, contacte un responsable WEI</p>
{% endif %}
</div>
</div>
{% endblock %}
{% extends "note/base.html" %}
{% block title %}Inscription{% endblock %}
{% block mainstyle %}main_style{% endblock %}
{% block content %}
<div class="tabbable">
<div class="labels">
<ul id="tab-labels">
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/" class="default">Consignes d'inscription</a></h5></li>
{% if haswei %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/inscrits/" class="default">Liste des inscrits</a></h5></li>
{% endif %}
{% if myself and is_personne %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/monInscription/" class="default">Mon inscription au WEI</a></h5></li>
{% endif %}
{% if preinscriptions %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/1a/" class="default">Inscription 1A</a></h5></li>
{% endif %}
{% if inscriptions %}
<li><h5><a href="{{ NOTE_ROOT_URL }}wei/vieux/" class="default active">Inscription 2A+</a></h5></li>
{% endif %}
</ul>
</div>
<div id="tab-panels">
<h1>High[WEI] To Hell</h1>
<br/>
{% if inscriptions and form %}
<h1>Inscription 2A+ WEI 2015</h1>
<br/>
<form method="post" action="" class="form-horizontal">{% csrf_token %}
{% include "note/form_contents.html" %}
</form>
{% elif inscriptions %}
<h3>Le formulaire 2A+ sera bientôt disponible</h3>
<br/>
{% else %}
<h2>Tu n'as pas accès à cette page</h2>
{% endif %}
<br/>
</div>
</div>
{% endblock %}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment