Commit fc216432 authored by Maxime Bombar's avatar Maxime Bombar

Pour adhérer un 1A pour le wei on utilise le formulaire d'inscription classique

parent 9f0e6e09
......@@ -313,6 +313,8 @@ class Server(object):
liste_invites = ServeurFonctions.liste_invites
### Fonctions pour l'application WEI
wei_get_info = WeiFonctions.wei_get_info
wei_main = WeiFonctions.wei_main
wei_get_listes = WeiFonctions.wei_get_listes
wei_readherer = WeiFonctions.wei_readherer
......
......@@ -1423,23 +1423,33 @@ def inscrire(self, data):
"""
Deux possibilités :
* ``data = [<preid>, <dico>, <pay>]``
* ``data = [<preid>, <dico>, <pay>, <override_adh>]``
* ``data = [<ident>, <dico>, <pay>, <from_wei>]``
* ``data = [<ident>, <dico>, <pay>, <from_wei>, <override_adh>]``
Valide une préinscription.
* ``<preid>`` est l'identifiant de préinscription,
* ``<dico>`` contient des tas d'infos (``"wei"`` et ``"annee"`` étant obligatoires)
* ``<pay> = [<on_note>, <type_de_paiement>, <params>]``, avec :
Si <from_wei> est faux, <ident> est une <preid>
* Valide une préinscription.
** ``<preid>`` est l'identifiant de préinscription,
** ``<dico>`` contient des tas d'infos (``"wei"`` et ``"annee"`` étant obligatoires)
** ``<pay> = [<on_note>, <type_de_paiement>, <params>]``, avec :
* ``<on_note>`` = solde à ajouter à la note (en centimes)
* ``<type_de_paiement>`` à valeur dans ``"cheque", "especes", "virement", "soge"``
* ``params = {"nom": <nom>, "prenom": <prenom>, "banque": <banque>}``
* ``<override_adh>`` est le montant qu'on veut que l'adhérent paye pour son inscription
(facultatif, nécessite le droit ``"adhesions_admin"`` si différent du montant par défaut)
** ``<on_note>`` = solde à ajouter à la note (en centimes)
** ``<type_de_paiement>`` à valeur dans ``"cheque", "especes", "virement", "soge"``
** ``params = {"nom": <nom>, "prenom": <prenom>, "banque": <banque>}``
** ``<overripde_adh>`` est le montant qu'on veut que l'adhérent paye pour son inscription
(facultatif, nécessite le droit ``"adhesions_admin"`` si différent du montant par défaut)
Sinon <ident> est un <idwei> :
** <idwei> est l'identifiant du wei
** <dico> contient des tas d'infos
** ``<pay> = [<on_note>, <type_de_paiement>, <params>]``, avec : plus tard ....
_log relevant ids : preid, idbde, id de la transaction de crédit (ou NULL),
id de moyen de paiement (ou NULL), id de la transaction d'adhésion (ou NULL), id de l'adhésion (ou NULL)
"""
dicotypes = {"type": unicode, "nom": unicode, "prenom": unicode, "mail": unicode,
"pseudo": unicode, "passwd": unicode, "normalien": unicode, "fonction": unicode,
......@@ -1449,12 +1459,12 @@ def inscrire(self, data):
dates = ["previous_report_date", "next_report_date"] # les dates sont un cas un peu particulier
# On mémorise la version fournie pour pouvoir faire joujou avec avec mais loguer correctement
datasaved = copy.deepcopy(data)
if (type(data) == list) and ([type(i) for i in data] in [[int, dict, list], [int, dict, list, int]]):
if len(data) == 3:
preid, dico, pay = data
if (type(data) == list) and ([type(i) for i in data] in [[int, dict, list, bool], [int, dict, list, bool, int]]):
if len(data) == 4:
ident, dico, pay, from_wei = data
override_adh = None
elif len(data) == 4:
preid, dico, pay, override_adh = data
elif len(data) == 5:
ident, dico, pay, from_wei, override_adh = data
if override_adh < 0:
_badparam(self, u"inscrire (override montant <0)")
return
......@@ -1498,22 +1508,33 @@ def inscrire(self, data):
if not typeok:
_badparam(self, u"inscrire (%s)" % reason)
return
if self._has_acl("inscriptions"):
# On commence par récupérer les données de la préinscription
if self._has_acl("inscriptions") or self._has_acl("wei_admin"):
# On initialise la connexion à la base de données
con, cur = BaseFonctions.getcursor()
cur.execute("SELECT * FROM preinscriptions WHERE preid = %s;", (preid,))
# Si on est face a une inscription "normale"
if not from_wei:
# On commence par récupérer les données de la préinscription
preid = ident
cur.execute("SELECT * FROM preinscriptions WHERE preid = %s;", (preid,))
# Si on est face a une inscription wei
else:
idwei = ident
cur.execute("SELECT *, dept AS section, infos AS pbsante FROM wei_1a WHERE idwei = %s;", (idwei,))
l = cur.fetchall()
if (len(l) != 1):
self._debug(3, u"Tentative d'inscription d'un preid inexistant.")
self._send(None, 13, u"Ce preid n'existe pas.")
self._debug(3, u"Tentative d'inscription d'un element inexistant.")
self._send(None, 13, u"Cet élément n'existe pas.")
else:
pre_dico = dict(l[0])
# Si on vient du wei, on le signale
if from_wei:
pre_dico["wei"] = True
# on vérifie qu'on a la section
if (pre_dico["section"] == '') and not("section" in dico.keys()):
self._debug(3, u"inscrire : section non spécifiée (à la préinscription non plus)")
self._send(None, 4, u"La section n'a pas été spécifiée à la préinscription, tu dois la spécifier.")
return
pre_dico.update(dico) # du coup il contient des trucs en trop, mais on s'en fou
pre_dico.update(dico) # du coup il contient des trucs en trop, mais on s'en fout
if pre_dico.has_key("pseudo"):
# On vérifie que le pseudo demandé n'est pas déjà pris
if not BaseFonctions.pseudo_libre(pre_dico["pseudo"]):
......@@ -1542,7 +1563,7 @@ def inscrire(self, data):
RETURNING idbde;""",
pre_dico)
pre_dico["idbde"] = cur.fetchone()["idbde"]
log_ids = [pre_dico["preid"], pre_dico["idbde"]]
log_ids = [pre_dico["ident"], pre_dico["idbde"]]
# On ne fait pas payer l'adhésion à un club
if thisisaclub:
log_ids += [None, None, None, None]
......@@ -1552,8 +1573,11 @@ def inscrire(self, data):
WHERE used;""")
prix_wei_normalien, prix_wei_non_normalien = cur.fetchone()
if (pre_dico["wei"] == True):
pre_dico["debit"] = (prix_wei_normalien if (pre_dico["normalien"] == True)
else prix_wei_non_normalien)
if (pre_dico["soge"] == True):
pre_dico["debit"] = 0
else:
pre_dico["debit"] = (prix_wei_normalien if (pre_dico["normalien"] == True)
else prix_wei_non_normalien)
else:
pre_dico["debit"] = __price_today(self)
# On a le droit de changer le montant de l'adhésion si on les droits pour
......@@ -1579,8 +1603,9 @@ def inscrire(self, data):
# On l'adhère
ids_credit_et_adh = _private_adhesion(self, pre_dico["idbde"], pre_dico["annee"], pre_dico["debit"], pre_dico["section"], pre_dico["wei"], cur=cur)
log_ids += ids_credit_et_adh
# Et enfin on supprime la préinscription
cur.execute("DELETE FROM preinscriptions WHERE preid = %(preid)s;", pre_dico)
# Et enfin on supprime la préinscription si on n'est pas dans le cas du wei
if not from_wei:
cur.execute("DELETE FROM preinscriptions WHERE preid = %(preid)s;", pre_dico)
self._log("inscrire", cur, datasaved, log_ids)
# On COMMIT à la fin, comme ça si on a crashé au milieu, no problem
# NB : les fonctions appelées en dessous se servent du même curseur et ne le commitent pas
......
......@@ -17,6 +17,7 @@ import BaseFonctions
import ExceptionsNote
import ReadDatabase
from ServeurFonctions import _badparam, _pasledroit, _private_adhesion, _un_transfert
import ServeurFonctions
def wei_main(self):
"""
......@@ -76,6 +77,29 @@ def _role_prettify(value):
return ";".join(roles_pretty)
def wei_get_info(self, idwei):
"""
Fonction renvoyant les informations d'un idwei
"""
# On vérifie tout d'abord que l'utilisateur a bien les droits WEI
if not self._has_acl("wei_admin"):
_pasledroit(self, "wei_admin")
# On ouvre une conneexion avec la base de données
con, cur = BaseFonctions.getcursor()
cur.execute("SELECT *, infos AS pbsante, dept AS section, note AS pseudo FROM wei_1a WHERE idwei = %s;", (idwei,))
infowei = cur.fetchall()
if not infowei:
self._send(None, 404, u"cette préinscription wei n'existe pas.")
self._debug(3, u"wei_get_info failed : l'idwei %s n'existe pas dans la table wei_1a." % (idwei,))
else:
response = dict(infowei[0])
self._send(response)
def wei_get_listes(self, data):
"""
Fonction renvoyant la liste des préinscrits et des
......
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