Commit 620a619d authored by Praibait's avatar Praibait

Merge branch 'InterfacePot'

parents b084065b 7f834329
......@@ -217,7 +217,27 @@ def _forge_request(skeleton, pieces):
pieces[k] = separator + pieces[k]
return skeleton % pieces
def quick_search(term, old=False, byidbde=False, hide_solde=False, exclude=None):
def _degre_negatif(comptes):
con, cur = BaseFonctions.getcursor()
cur.execute("SELECT solde_negatif, solde_tres_negatif, solde_pas_plus_negatif FROM configurations WHERE used = true;")
neg, tres_neg, pas_plus_neg = cur.fetchone()
for i in range(len(comptes)):
c = comptes[i]
c = dict(c)
solde = c["solde"]
if solde >= neg:
c["negatif"] = 0
elif solde >= tres_neg:
c["negatif"] = 1
elif solde >= pas_plus_neg:
c["negatif"] = 2
else:
c["negatif"] = 3
comptes[i] = c
def quick_search(term, old=False, byidbde=False, hide_solde=False, exclude=None, byname=False):
"""Effectue une recherche simple :
* sur les pseudos, les alias et l'historique
......@@ -296,8 +316,14 @@ def quick_search(term, old=False, byidbde=False, hide_solde=False, exclude=None)
"idbde" : {"specific_select" : "c.idbde AS terme, c.idbde",
"specific_from" : "",
"specific_where" : "CAST(idbde AS text) LIKE %(term_liked)s"},
"nom" : {"specific_select" : "c.nom AS terme, c.idbde",
"specific_from" : "",
"specific_where" : _forge_test("c.nom", is_regex)},
"prenom" : {"specific_select" : "c.prenom AS terme, c.idbde",
"specific_from" : "",
"specific_where" : _forge_test("c.prenom", is_regex)}
}
# Ensuite on différencie le cas idbde de l'autre
if byidbde:
# On transformer l'entier id en chaîne et on ajoute le "%" (= filtre begin)
......@@ -313,7 +339,7 @@ def quick_search(term, old=False, byidbde=False, hide_solde=False, exclude=None)
term_liked = like_replace(term) + "%"
term_regex = "^" + term
# On recherche sur les pseudos, puis les alias, puis les historiques
search_types = ["pseudo", "alias", "historique"]
search_types = ["pseudo", "alias", "historique"] + (["nom", "prenom"] if byname else [])
# On ne modifie pas les chaînes trouvées
post_transform_term = lambda x : x
con, cur = BaseFonctions.getcursor()
......@@ -344,18 +370,7 @@ def quick_search(term, old=False, byidbde=False, hide_solde=False, exclude=None)
# ça sert à les afficher de couleurs différentes
# NB : le solde est bien en centimes
if not hide_solde:
cur.execute("SELECT solde_negatif, solde_tres_negatif, solde_pas_plus_negatif FROM configurations WHERE used = true;")
neg, tres_neg, pas_plus_neg = cur.fetchone()
for i in range(len(results)):
solde = results[i]["solde"]
if solde >= neg:
results[i]["negatif"] = 0
elif solde >= tres_neg:
results[i]["negatif"] = 1
elif solde >= pas_plus_neg:
results[i]["negatif"] = 2
else:
results[i]["negatif"] = 3
_degre_negatif(results)
else:
# Rappel : tout utilisateur qui peut faire un don a le droit de faire un quick_search, mais pas de voir les soldes
# donc on enlève les soldes dans ce cas
......@@ -381,3 +396,23 @@ def quick_search(term, old=False, byidbde=False, hide_solde=False, exclude=None)
results[i]["vieux"] = vieux
return results
def search_invite(term, idact):
""" Fonction de recherche des invités à une activité
term : terme de recherche. Match sur nom, prénomde l'invité et sur le pseudo de l'inviteur
idact : id de l'activité concernée
Retourne la liste des invités à cette activités avec le degré de négativité de leur inviteur"""
invites = []
con, cur = BaseFonctions.getcursor()
cur.execute(u"""SELECT 'invite' AS type, i.id AS idbde, i.nom, i.prenom,
c.idbde AS Ridbde, c.nom AS Rnom, c.prenom AS Rprenom, c.pseudo AS pseudo, c.solde AS solde
FROM invites AS i
JOIN comptes AS c
ON i.responsable=c.idbde
WHERE i.activite={0} AND (i.nom ILIKE '{1}%' OR i.prenom ILIKE '{1}%' OR pseudo ILIKE '{1}%' OR c.nom ILIKE '{1}%' OR c.prenom ILIKE '{1}%');""".format(idact, term))
invites = cur.fetchall()
_degre_negatif(invites)
return invites
......@@ -9,7 +9,7 @@ Author: Vincent Le Gallic <legallic@crans.org>
Dans ce fichier sont définies les classes suivantes :
* :py:class:`Server` (un serveur qui répond à un unique client)
* :py:class:`MainServer` (serveur qui attend les connexions entrantes et thread des instances de Server)
Si ce script est exécuté en tant que __main__, il instancie un MainServer et le lance.
"""
......@@ -199,6 +199,8 @@ class Server(object):
search = ServeurFonctions.search
quick_search = ServeurFonctions.quick_search
search_pot = ServeurFonctions.search_pot
historique_pseudo = ServeurFonctions.historique_pseudo
......@@ -289,6 +291,9 @@ class Server(object):
#### Activités
get_activites = ServeurFonctions.get_activites
historique_activite = ServeurFonctions.historique_activite
# alias de get_activites
activites = get_activites
......@@ -304,6 +309,7 @@ class Server(object):
valider_activite = ServeurFonctions.valider_activite
devalider_activite = ServeurFonctions.devalider_activite
openclose_activite = ServeurFonctions.openclose_activite
add_invite = ServeurFonctions.add_invite
del_invite = ServeurFonctions.del_invite
......@@ -312,6 +318,10 @@ class Server(object):
liste_invites = ServeurFonctions.liste_invites
do_entree_pot = ServeurFonctions.do_entree_pot
stats_entree_pot = ServeurFonctions.stats_entree_pot
### Fonctions pour l'application WEI
wei_get_info = WeiFonctions.wei_get_info
......
This diff is collapsed.
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