[gestion/gest_crans2.py] stub
Ignore-this: 740e01c5cddeb013e1623a203e645510 darcs-hash:20090825144545-bd074-babd13c9be44f260b0c80543af7438fc822333c7.gz
This commit is contained in:
parent
4665f5f560
commit
049bdf9245
1 changed files with 274 additions and 0 deletions
274
gestion/gest_crans2.py
Executable file
274
gestion/gest_crans2.py
Executable file
|
@ -0,0 +1,274 @@
|
|||
#! /usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
u"""Nouvelle interface utilisateur du système de gestion des machines et
|
||||
adhérents du crans. Largement inspirée par l'ancienne version écrite par
|
||||
Frédéric Pauget.
|
||||
|
||||
Copyright (C) 2009 Antoine Durand-Gasselin <adg@crans.org>
|
||||
Licence : GPLv2
|
||||
|
||||
Utilise des wizard.Scenario des objets qu'on construit avec wizard.Steps
|
||||
(qu'on construit avec des dialogwizard.DialogStepGenerator). Ces
|
||||
Scenario sont ensuite lancés: transformés en wizard.Running, qui prend
|
||||
en argument un dictionnaire, et renvoie un dictionnaire rempli selon les
|
||||
choix faits par l'utilisateur dans l'interface dialog. (reste à bien
|
||||
gérer les exceptions et les erreurs).
|
||||
|
||||
Idéalement, on \"tranforme\" les crans_ldap.Adherents en dicos, que l'on
|
||||
modifie avec des dialog.Running, et on les sauve dans la base de donnée.
|
||||
Bon là où ça se complique c'est qu'il faudrait reporter en temps réel
|
||||
les erreurs qui sont renvoyées par crans_ldap.
|
||||
|
||||
Après on peut inscrire des gens de deux manières différentes: soit avec
|
||||
un crans_ldap.Adherent(), soit avec un dico construit à partir d'infos
|
||||
rentrés depuis la préinscription.
|
||||
|
||||
"""
|
||||
|
||||
### Rapport de bug automatique
|
||||
# Destinataires, si vide n'envoi rien
|
||||
To = ['fred@crans.org', 'glondu@crans.org', 'dimino@crans.org',
|
||||
'salles@crans.org', 'cohen@crans.org', 'segaud@crans.org',
|
||||
'adg@crans.org']
|
||||
|
||||
import os, sys#, string
|
||||
# import dialog
|
||||
# from whos import aff
|
||||
# import signal, getopt
|
||||
# from time import strftime, strptime, localtime, mktime
|
||||
# import re
|
||||
#
|
||||
# import affich_tools, config
|
||||
# from lock import make_lock, remove_lock
|
||||
from ldap_crans import crans_ldap, script_utilisateur#, blacklist_items, ann_scol, droits_possibles, droits_critiques, smtpserv,
|
||||
sys.path.append('/usr/scripts')
|
||||
from lib.dialogwizard.wizard import Scenario, Running, step_scenario, unit_scenario
|
||||
from lib.dialogwizard.dialogwizard import DialogStepGenerator
|
||||
from ldap_crans import Adherent #, AssociationCrans, Club
|
||||
# from ldap_crans import Machine, MachineFixe, MachineWifi, MachineCrans, BorneWifi
|
||||
# import user_tests
|
||||
|
||||
# isadm = user_tests.isadm()
|
||||
# isdeconnecteur = user_tests.isdeconnecteur()
|
||||
|
||||
#db = crans_ldap()
|
||||
#droits = db.search("uid=%s" % script_utilisateur)['adherent'][0].droits()
|
||||
droits = []
|
||||
isimprimeur = u"Imprimeur" in droits
|
||||
iscontroleur = u'Tresorier' in droits
|
||||
isbureau = u'Bureau' in droits
|
||||
encoding = sys.stdin.encoding or 'utf-8'
|
||||
|
||||
if u'Nounou' in droits and not os.environ.has_key('DIALOGRC') \
|
||||
and not os.path.exists(os.path.expanduser('~/.dialogrc')):
|
||||
os.environ['DIALOGRC'] = '/etc/dialog.rc'
|
||||
|
||||
dsgen = DialogStepGenerator(u'Gestion des adhérents et machines du Crans')
|
||||
|
||||
#########################################################################
|
||||
## Fonctions de remplissage ou modification des paramètres d'un adhérent
|
||||
|
||||
prompt_new_adher = \
|
||||
dsgen.form_step (u"Inscription adhérent", '',
|
||||
[('nom', 'Nom :', 20),
|
||||
('prenom', u'Prénom :', 20),
|
||||
('tel', u'Numéro de téléphone', 13),
|
||||
('chbre', u'Chambre :', 5) ])
|
||||
|
||||
prompt_addr_ext = \
|
||||
dsgen.form_step (u"Adresse extérieure de %(nom)s", '',
|
||||
[('addr1', 'Adresse', 40), ('addr2', '', 40),
|
||||
('addr3', 'Code Postal :', 6),
|
||||
('addr4', 'Ville :', 20)])
|
||||
|
||||
def prompt_etudes(name):
|
||||
etab_step = \
|
||||
dsgen.select_step(u'Études de %(nom)s (1/3)',
|
||||
u"Choisissez l'établissement :",
|
||||
'etud1',
|
||||
[("ENS", u"ENS -- École Normale Supérieure de Cachan "),
|
||||
("IUT Cachan", u"IUT Cachan"),
|
||||
("Maximilien Sorre", u"Maximilien Sorre"),
|
||||
("Gustave Eiffel", u"Gustave Eiffel"),
|
||||
("P1", u"P1 -- Université Panthéon Sorbonne"),
|
||||
("P2", u"P2 -- Université Panthéon Assas"),
|
||||
("P3", u"P3 -- Université de la Sorbonne Nouvelle"),
|
||||
("P4", u"P4 -- Université Paris Sorbonne"),
|
||||
("P5", u"P5 -- Université René Descartes"),
|
||||
("P6", u"P6 -- Université Pierre et Marie Curie"),
|
||||
("P7", u"P7 -- Université Denis Diderot"),
|
||||
("P8", u"P8 -- Université Vincennes Saint Denis"),
|
||||
("P9", u"P9 -- Université Paris Dauphine"),
|
||||
("P10", u"P10 -- Université de Nanterre"),
|
||||
("P11", u"P11 -- Université de Paris Sud (Orsay)"),
|
||||
("P12", u"P12 -- Université Val de Marne"),
|
||||
("P13", u"P13 -- Université Paris Nord"),
|
||||
("IUFM", u"IUFM"),
|
||||
("Personnel ENS", u"Personnel ENS"),
|
||||
("Personnel CROUS", u"Personnel CROUS"),
|
||||
("autre", u"autre")])
|
||||
|
||||
etab_other = \
|
||||
dsgen.input_step(u'Études de %(nom)s (1/3)',
|
||||
u"Préciser l'établissement :",
|
||||
'etud1')
|
||||
|
||||
year_ens_step = \
|
||||
dsgen.select_step(u"Études de %(nom)s (2/3)",
|
||||
u"Choisissez l'année administrative",
|
||||
'etud2',
|
||||
[("1", u"License"),
|
||||
("2", u"Master 1"),
|
||||
("3", u"Agrégation"),
|
||||
("4", u"Master 2"),
|
||||
("5", u"1ère année thèse"),
|
||||
("6", u"2ème année thèse"),
|
||||
("7", u"3ème année thèse"),
|
||||
("", "Autre")])
|
||||
|
||||
year_step = \
|
||||
dsgen.input_step(u"Études de %(nom)s (2/3)",
|
||||
u"Année adminstrative :\nET UNIQUEMENT l'ANNEE : la section sera demandée après.",
|
||||
'etud2')
|
||||
|
||||
section_step = \
|
||||
dsgen.input_step(u'Études de %(nom)s (3/3)',
|
||||
u'Section :',
|
||||
'etud3')
|
||||
|
||||
section1_step = \
|
||||
dsgen.select_step(u'Études de %(nom)s (3/3)',
|
||||
u'Choisissez la section :',
|
||||
'etud3',
|
||||
[ ("A0", "Informatique"),
|
||||
("A1", "Mathématiques"),
|
||||
("A2", "Physique fondamentale"),
|
||||
("A''2", "Chimie"),
|
||||
("A3", "Biochimie"),
|
||||
("B123", "Technologie mécanique"),
|
||||
("EEA", "Électronique, électrotechnique et automatique"),
|
||||
("C", "Art et création industrielle"),
|
||||
("D2", "Economie gestion"),
|
||||
("D3", "Sciences sociales"),
|
||||
("E", "Anglais") ])
|
||||
|
||||
section2_step = \
|
||||
dsgen.select_step(u'Études de %(nom)s (3/3)',
|
||||
u'Choisissez la section :',
|
||||
'etud3',
|
||||
[ ("A0", "Informatique"),
|
||||
("A1", "Mathématiques"),
|
||||
("A2", "Physique fondamentale"),
|
||||
("A''2", "Chimie"),
|
||||
("A3", "Biochimie"),
|
||||
("B1", "Mécanique"),
|
||||
("B2", "Génie civil"),
|
||||
("B3", "Génie mécanique"),
|
||||
("EEA", "Électronique, électrotechnique et automatique"),
|
||||
("C", "Art et création industrielle"),
|
||||
("D2", "Economie gestion"),
|
||||
("D3", "Sciences sociales"),
|
||||
("E", "Anglais") ])
|
||||
|
||||
section3_step = \
|
||||
dsgen.select_step(u'Études de %(nom)s (3/3)',
|
||||
u'Choisissez la section :',
|
||||
'etud3',
|
||||
[ ("A0", "Informatique"),
|
||||
("A1", "Mathématiques"),
|
||||
("A2", "Physique fondamentale"),
|
||||
("A'2", "Physique appliquée"),
|
||||
("A''2", "Chimie"),
|
||||
("A3", "Biochimie"),
|
||||
("B1", "Mécanique"),
|
||||
("B2", "Génie civil"),
|
||||
("B3", "Génie mécanique"),
|
||||
("B4", "Génie électrique"),
|
||||
("C", "Art et création industrielle"),
|
||||
("D2", "Economie gestion"),
|
||||
("D3", "Sciences sociales"),
|
||||
("E", "Anglais") ])
|
||||
|
||||
section5_step = \
|
||||
dsgen.select_step(u'Études de %(nom)s (3/3)',
|
||||
u'Choisissez le laboratoire :',
|
||||
'etud3',
|
||||
[ ("CMLA", u"Centre de Mathématiques et de Leurs Applications"),
|
||||
("GAPP", u"Groupe d'Analyse des Politiques Publiques"),
|
||||
("IDHE", u"Institutions et Dynamiques Historiques de l'Economie"),
|
||||
("LBPA", u"Laboratoire de Biotechnologies et Pharmacologie génétique Appliquées"),
|
||||
("LMT", u"Laboratoire de Mécanique et Technologie"),
|
||||
("LPQM", u"Laboratoire de Photonique Quantique et Moléculaire"),
|
||||
("LSV", u"Laboratoire de Spécification et Vérification"),
|
||||
("LURPA", u"Laboratoire Universitaire de Recherche en Production Automatisée"),
|
||||
("PPSM", u"Laboratoire de Photophysique et Photochimie Supramoléculaires et Macromoléculaires"),
|
||||
("SATIE", u"Systèmes et Applications des Technologies de l'Information et de l'Energie"),
|
||||
("STEF", u"Sciences Techniques Education Formation") ])
|
||||
|
||||
etudes_scenar = Scenario()
|
||||
etudes_scenar.nest(etab_step)
|
||||
|
||||
ens_scenar = Scenario()
|
||||
ens_scenar.nest(year_ens_step)
|
||||
ens_scenar.case((lambda d: d['etud2']),
|
||||
{ '1': step_scenario(section1_step),
|
||||
'2': step_scenario(section2_step),
|
||||
'3': step_scenario(section3_step),
|
||||
'4': step_scenario(section3_step),
|
||||
'5': step_scenario(section5_step),
|
||||
'6': step_scenario(section5_step),
|
||||
'7': step_scenario(section5_step) },
|
||||
fallback = step_scenario(section_step))
|
||||
|
||||
other_etab_scenar = Scenario()
|
||||
other_etab_scenar.nest(year_step)
|
||||
other_etab_scenar.nest(section_step)
|
||||
|
||||
etudes_scenar.branch((lambda d: d['etud1'] == 'other'),
|
||||
step_scenario(etab_other),
|
||||
unit_scenario())
|
||||
|
||||
etudes_scenar.branch((lambda d: d['etud1'] == 'ENS'),
|
||||
ens_scenar, other_etab_scenar)
|
||||
|
||||
return etudes_scenar
|
||||
|
||||
prompt_connexion = \
|
||||
dsgen.form_step (u"Type de connexion",
|
||||
u'Inscription adhérent',
|
||||
'typ', [('1', 'Adhésion'),
|
||||
('2', 'Inscription gratuite')])
|
||||
|
||||
prompt_papiers = \
|
||||
dsgen.checklist_step('', u'État administratif de %(nom)s',
|
||||
[('carte', u"Carte d'étudiant %s fourniee" % ann_scol),
|
||||
('paiement%s' % this_year, u'Cotisation %s réglée et charte signée' % ann_scol),
|
||||
('chartema', u'Charte des membres actifs signée')])
|
||||
|
||||
prompt_login = \
|
||||
dsgen.input_step(u'Choix du login pour %(nom)s',
|
||||
u'Le choix du login doit faire au maximum 15 caractères\nIl ne doit *pas* être un pseudo ou un prénom, mais doit être relié au nom de famille\nSeuls les caractères alphabétiques et le - sont autorisés', 'login')
|
||||
|
||||
prompt_mailaddress = \
|
||||
dsgen.input_step(u'Addresse mail extérieure de %(nom)s',
|
||||
'')
|
||||
|
||||
dummy_scenar = Scenario()
|
||||
dummy_scenar.nest(prompt_new_adher)
|
||||
dummy_scenar.nest(prompt_addr_ext)
|
||||
dummy_scenar.quote(prompt_etudes('toto'))
|
||||
|
||||
Running(dummy_scenar).run()
|
||||
|
||||
def inscrit_in_ldap(adherent):
|
||||
"""Prend en argument un dictionnaire, et l'inscrit dans la base ldap
|
||||
|
||||
Les champs suivants ont OBLIGATOIRES:
|
||||
nom, prenom, chbre, mail, login
|
||||
|
||||
Les champs suivants sont OPTIONNELS:
|
||||
carte, paiementYEAR, tel, etud1, etud2, etud3, addr1, addr2, addr3, addr4
|
||||
"""
|
||||
|
||||
adher = Adherent()
|
Loading…
Add table
Add a link
Reference in a new issue