]> gitweb.pimeys.fr Git - scripts-20-100.git/commitdiff
[bde] Gros ménage : archivage de tous les scripts NK2012
authorVincent Le Gallic <legallic@crans.org>
Thu, 10 Mar 2016 03:03:21 +0000 (04:03 +0100)
committerVincent Le Gallic <legallic@crans.org>
Fri, 11 Mar 2016 04:41:28 +0000 (05:41 +0100)
16 files changed:
bde/adhesions.sh [deleted file]
bde/combiennegs.py [deleted file]
bde/enlever_droits_invites.sh [deleted file]
bde/old/adhesions.sh [new file with mode: 0755]
bde/old/combiennegs.py [new file with mode: 0755]
bde/old/enlever_droits_invites.sh [new file with mode: 0755]
bde/old/supprimer_quelquun.py [new file with mode: 0755]
bde/old/this_is_dirty.sh [new file with mode: 0755]
bde/old/tresorerie.sql [new file with mode: 0644]
bde/old/virements.py [new file with mode: 0755]
bde/old/voir_droits.py [new file with mode: 0755]
bde/supprimer_quelquun.py [deleted file]
bde/this_is_dirty.sh [deleted file]
bde/tresorerie.sql [deleted file]
bde/virements.py [deleted file]
bde/voir_droits.py [deleted file]

diff --git a/bde/adhesions.sh b/bde/adhesions.sh
deleted file mode 100755 (executable)
index b3e141d..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-# Pour trouver les années d'adhésion d'un compte
-
-export LESS='-S'
-
-psql note -c "
-   SELECT *
-   FROM adhesions
-   WHERE idbde = $1
-   ORDER BY annee ASC;"
diff --git a/bde/combiennegs.py b/bde/combiennegs.py
deleted file mode 100755 (executable)
index 1e62cd1..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-
-""" Pour savoir combien de fois les gens sont passés en négatif """
-
-import psycopg2
-import psycopg2.extras
-
-def get_data(con):
-    cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
-    cur.execute("SELECT * FROM transactions ORDER BY date ASC;")
-    transactions = cur.fetchall()
-    return transactions
-
-def combienneg(alltrans):
-    nums = list(set([t["emetteur"] for t in alltrans] + [t["destinataire"] for t in alltrans]))
-    soldes = dict([(n, 0) for n in nums])
-    negs = dict([(n, []) for n in nums])
-    for trans in [t for t in alltrans if t["valide"]]:
-        for (num, signe) in [(trans["emetteur"], -1), (trans["destinataire"], 1)]:
-            newsolde = soldes[num] + trans["montant"] * trans["quantite"] * signe
-            if soldes[num] >= 0 and newsolde < 0:
-                negs[num].append(t["date"])
-            soldes[num] = newsolde
-    return (negs, soldes)
-
-if __name__ == "__main__":
-    con = psycopg2.connect(database="bde")
-    transactions = get_data(con)
-    (negs, soldes) = combienneg(transactions)
diff --git a/bde/enlever_droits_invites.sh b/bde/enlever_droits_invites.sh
deleted file mode 100755 (executable)
index d2e4751..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-# Pour virer les droits invités en masse puisque plus personne ne devrait avoir ce droit.
-
-psql bde -c "SELECT * FROM (SELECT numcbde, pseudo, droits, surdroits, droits-(droits&128) AS apres FROM adherents WHERE NOT supreme AND numcbde>0) AS plouf WHERE NOT droits=apres;"
-echo -n "Delete ? [y/N] "
-read ans
-if [[ $ans = "y" ]]
-then
-    psql bde -c "UPDATE adherents SET droits=droits-(droits&128) WHERE numcbde in (SELECT numcbde FROM (SELECT numcbde, pseudo, droits, surdroits, droits-(droits&128) AS apres FROM adherents WHERE NOT supreme AND numcbde>0) AS plouf WHERE NOT droits=apres);"
-fi
diff --git a/bde/old/adhesions.sh b/bde/old/adhesions.sh
new file mode 100755 (executable)
index 0000000..b3e141d
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Pour trouver les années d'adhésion d'un compte
+
+export LESS='-S'
+
+psql note -c "
+   SELECT *
+   FROM adhesions
+   WHERE idbde = $1
+   ORDER BY annee ASC;"
diff --git a/bde/old/combiennegs.py b/bde/old/combiennegs.py
new file mode 100755 (executable)
index 0000000..1e62cd1
--- /dev/null
@@ -0,0 +1,30 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+""" Pour savoir combien de fois les gens sont passés en négatif """
+
+import psycopg2
+import psycopg2.extras
+
+def get_data(con):
+    cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
+    cur.execute("SELECT * FROM transactions ORDER BY date ASC;")
+    transactions = cur.fetchall()
+    return transactions
+
+def combienneg(alltrans):
+    nums = list(set([t["emetteur"] for t in alltrans] + [t["destinataire"] for t in alltrans]))
+    soldes = dict([(n, 0) for n in nums])
+    negs = dict([(n, []) for n in nums])
+    for trans in [t for t in alltrans if t["valide"]]:
+        for (num, signe) in [(trans["emetteur"], -1), (trans["destinataire"], 1)]:
+            newsolde = soldes[num] + trans["montant"] * trans["quantite"] * signe
+            if soldes[num] >= 0 and newsolde < 0:
+                negs[num].append(t["date"])
+            soldes[num] = newsolde
+    return (negs, soldes)
+
+if __name__ == "__main__":
+    con = psycopg2.connect(database="bde")
+    transactions = get_data(con)
+    (negs, soldes) = combienneg(transactions)
diff --git a/bde/old/enlever_droits_invites.sh b/bde/old/enlever_droits_invites.sh
new file mode 100755 (executable)
index 0000000..d2e4751
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Pour virer les droits invités en masse puisque plus personne ne devrait avoir ce droit.
+
+psql bde -c "SELECT * FROM (SELECT numcbde, pseudo, droits, surdroits, droits-(droits&128) AS apres FROM adherents WHERE NOT supreme AND numcbde>0) AS plouf WHERE NOT droits=apres;"
+echo -n "Delete ? [y/N] "
+read ans
+if [[ $ans = "y" ]]
+then
+    psql bde -c "UPDATE adherents SET droits=droits-(droits&128) WHERE numcbde in (SELECT numcbde FROM (SELECT numcbde, pseudo, droits, surdroits, droits-(droits&128) AS apres FROM adherents WHERE NOT supreme AND numcbde>0) AS plouf WHERE NOT droits=apres);"
+fi
diff --git a/bde/old/supprimer_quelquun.py b/bde/old/supprimer_quelquun.py
new file mode 100755 (executable)
index 0000000..b28d711
--- /dev/null
@@ -0,0 +1,86 @@
+#!/usr/bin/python
+# -*- coding:utf8 -*-
+
+""" Codé par 20-100
+    pour "supprimer" quelqu'un dans la note, c'est-à-dire anonymiser le compte.
+"""
+
+from pretty_print import sql_pretty_print as spp
+import psycopg2, psycopg2.extras
+
+class NonZeroError(ValueError):
+    """Erreur levée en cas de tentative de suppression d'un compte de solde non nul."""
+    def __init__(self):
+        super(NonZeroError, self).__init__("Solde du compte non-nul")
+
+def liste_to_sql(l):
+    """Renvoie la liste d'entiers en chaîne sql utilisable"""
+    assert all([type(i) == int for i in l])
+    return "(" + ",".join([str(i) for i in l]) + ")"
+
+def getcursor():
+    """Ouvre une connexion à la base de données."""
+    con = psycopg2.connect(database="bde")
+    cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
+    return con, cur
+
+def get_comptes(liste):
+    """Récupère les comptes entre début et fin.
+       Attention au contenu de liste, quand même."""
+    con, cur = getcursor()
+    cur.execute("SELECT * FROM adherents WHERE numcbde in %s ORDER BY numcbde;" % liste_to_sql(liste))
+    l = cur.fetchall()
+    return l
+
+def check_impossibles(l):
+    """On ne peut pas "supprimer" un compte dont le solde est non nul."""
+    paspossibles = [i for i in l if i["solde"]!=0]
+    if len(paspossibles) > 0:
+        print "\e[1;31mJe supprimerai pas quelqu'un dont le solde n'est pas nul : %s\e[0m" % (",".join([str(adh["numcbde"]) for adh in paspossibles]))
+        raise NonZeroError
+
+def supprime(liste):
+    """Supprime les comptes dont le numcbde est dans ``liste``."""
+    l = get_comptes(liste)
+    check_impossibles(l)
+    con, cur = getcursor()
+    cur.execute("""UPDATE adherents
+                   SET prenom='Erreur', nom='Erreur', sexe='E', pseudo=numcbde,
+                       passwd='!', section='', adresse='', email='nobody@crans.org',
+                       droits=0, surdroits=0, supreme='f', bloque='t', fonction='',
+                       mail_info=0, club='f', telephone='', theme='UNI', pbsante='',
+                       normalien='t', numsecu='' WHERE numcbde in %s;
+                """ % (liste_to_sql(liste)))
+    cur.execute("COMMIT;")
+
+def interactive_begin():
+    """Détermine la liste des comptes à supprimer de manière interactive."""
+    print "\e[1;31mAttention, je ne supprime rien, je ne fais que transformer en Erreur,Erreur...\e[0m"
+    
+    debut = raw_input("Premier id : ")
+    debut = int(debut)
+    fin = raw_input("Dernier id (vide pour 1 seul) : ")
+    if fin == "":
+        fin = debut
+    else:
+        fin = int(fin)
+    
+    return range(debut, fin+1)
+
+def interactive_delete(liste):
+    """Supprime les comptes de manière interactive."""
+    l = get_comptes(liste)
+    print spp(l, ["numcbde", "nom", "prenom", "pseudo", "solde"])
+    
+    ans=raw_input("""Êtes-vous sûr de vouloir les "supprimer" ? """)
+    if ans in ["oui","o","O","OUI","Y","y","YES","yes"]:
+        try:
+            supprime(liste)
+        except NonZeroError:
+            exit(1)
+        print "Et bim !"
+    else:
+        print "Nothing Done"
+
+if __name__ == "__main__":
+    interactive_delete(interactive_begin())
diff --git a/bde/old/this_is_dirty.sh b/bde/old/this_is_dirty.sh
new file mode 100755 (executable)
index 0000000..cb72f58
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+
+#psql bde -c "INSERT INTO transactions (conso, emetteur, destinataire, montant, quantite, valide, remarque) VALUES (1, 2850, 0, 35, 1, true, 'sweat ENS Z');"
+#psql bde -c "INSERT INTO transactions (conso, emetteur, destinataire, montant, quantite, valide, remarque) VALUES (1, 3246, 3539, 94.72, 1, true, 'Pot A♡');"
+#psql bde -c "INSERT INTO transactions (date, conso, emetteur, destinataire, montant, quantite, valide, remarque) VALUES ('2013-01-17 00:14:56', 44, 2822, 0, 2.00, 6, true, 'Pinte');"
+
+#psql bde -c "ALTER TABLE transactions DISABLE TRIGGER ALL;"
+#psql bde -c "ALTER TABLE transactions ENABLE TRIGGER ALL;"
+connard=2187
+recepteur=2798
+quantite=1
+taxe=3.00
+randomreason='Sauce - Menu'
+
+psql bde -c "UPDATE adherents SET solde=solde + 500 WHERE numcbde = ${connard};"
+psql bde -c "INSERT INTO transactions (conso, emetteur, destinataire, montant, quantite, valide, remarque) VALUES (1, ${connard}, ${recepteur}, ${taxe}, ${quantite}, true, '${randomreason}');"
+psql bde -c "UPDATE adherents SET solde=solde - 500 WHERE numcbde = ${connard};"
+
+
diff --git a/bde/old/tresorerie.sql b/bde/old/tresorerie.sql
new file mode 100644 (file)
index 0000000..35a5106
--- /dev/null
@@ -0,0 +1,16 @@
+# écrit par 20-100 le 16/03/13 (ouais enfin surtout le 17)
+# Des requêtes SQL en vrac pour satisfaire Maylis, penser à porter ça sur la NK2015 avec une interface
+# pour les tréoriers
+
+# Avoir les soldes de tout le monde à une date particulière
+SELECT pseudo, numcbde, recu, emis, COALESCE(recu, 0)-COALESCE(emis, 0) AS solde FROM (SELECT adherents.pseudo, adherents.numcbde, (SELECT sum(montant*quantite) FROM transactions WHERE valide AND destinataire=adherents.numcbde AND date<'2012-02-22') AS recu, (SELECT sum(montant*quantite) FROM transactions WHERE valide AND emetteur=adherents.numcbde AND date<'2012-02-22') AS emis FROM adherents) AS calculs;
+
+# Avoir la somme de tous les soldes de tout le monde à cette date :
+SELECT sum(solde) FROM (SELECT pseudo, numcbde, recu, emis, COALESCE(recu, 0)-COALESCE(emis, 0) AS solde FROM (SELECT adherents.pseudo, adherents.numcbde, (SELECT sum(montant*quantite) FROM transactions WHERE valide AND destinataire=adherents.numcbde AND date<'2012-02-22') AS recu, (SELECT sum(montant*quantite) FROM transactions WHERE valide AND emetteur=adherents.numcbde AND date<'2012-02-22') AS emis FROM adherents) AS calculs) AS soldes;
+# Oh ! ça fait 0 ! cool hein ?
+# Eh ben ça a pas été si trivial que ça… -_-
+
+
+# Le résumé des transactions du BDE, regroupé par type.
+SELECT sum(montant*quantite*(CASE WHEN emetteur=destinataire THEN 0 WHEN destinataire=0 THEN 1 ELSE -1 END)) AS total, remarque FROM transactions WHERE valide AND 0 in (emetteur, destinataire) AND date<='2013-02-19' AND date>='2012-02-22' GROUP BY remarque ORDER BY total;
+# Attention : penser à changer les *deux* 0 pour le faire sur quelqu'un d'autre.
diff --git a/bde/old/virements.py b/bde/old/virements.py
new file mode 100755 (executable)
index 0000000..030fca6
--- /dev/null
@@ -0,0 +1,140 @@
+#!/usr/bin/python
+# -*- encoding: utf-8 -*-
+
+
+""" Pour faciliter les remboursements note en cas de commande prima/pizzas/hanako/yang/…
+
+ TO DO : Rajouter une option --same où on ne précise pas la part des participants,
+         tout le monde a la même (donc post-calculée)
+"""
+
+import psycopg2, psycopg2.extras
+
+def getcursor():
+    con = psycopg2.connect(database="bde")
+    cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
+    return con,cur
+
+def trouver(term):
+    term = str(term)
+    sterm = "%%%s%%" % term
+    req = "SELECT * FROM adherents WHERE pseudo ILIKE %s OR nom ILIKE %s OR prenom ILIKE %s OR CAST(numcbde AS varchar)=%s ORDER BY nom;"
+    con, cur = getcursor()
+    cur.execute(req, (sterm, sterm, sterm, term))
+    return cur.fetchall()
+
+def pprint(l):
+    keys = ["numcbde", "prenom", "nom", "pseudo", "solde"]
+    l = [{"numcbde" : str(i["numcbde"]),
+          "prenom" : i["prenom"],
+          "nom" : i["nom"],
+          "pseudo" : i["pseudo"],
+          "solde" : str(i["solde"])} for i in l]
+    maxs = [ max([len(i[key]) for i in [{key:key}]+l]) for key in keys ]
+    pattern = u"| %%%ss | %%-%ss | %%-%ss | %%-%ss | %%%ss |" % tuple(maxs)
+    sep = (pattern % tuple([u"-"*i for i in maxs])).replace(u"|", u"+").replace(u" ", u"-")
+    print sep
+    print pattern % tuple(keys)
+    print sep
+    for i in l:
+        print pattern % tuple([i[key] for key in keys])
+    print sep
+
+class EndLoop(Exception):
+    pass
+
+class PasLesMemesTotaux(Exception):
+    pass
+
+def ask_one():
+    term = raw_input("Search : ")
+    if term=="":
+        raise EndLoop
+    l = trouver(term)
+    if len(l) == 1:
+        return l[0]
+    elif len(l) > 1:
+        pprint(l)
+        print ""
+        ans = None
+        while ans!="0":
+            ans = raw_input("numcbde (ou 0)=")
+            res = [i for i in l if str(i["numcbde"]) == ans]
+            if len(res)==1:
+                return res[0]
+
+def get_montant(ask="montant=", total=None):
+    montant = None
+    while montant==None:
+        smontant = raw_input(ask)
+        if smontant.lower() in ["all", "tout"] and total!=None:
+            return total
+        if smontant == "" and total=="coeff":
+            return 1
+        try:
+            return float(smontant)
+        except:
+            pass
+
+def get_people(total=None):
+    liste = []
+    print "Ajoutez des notes : (vide pour finir)"
+    try:
+        while True:
+            res = ask_one()
+            if res:
+                montant = get_montant(total=total)
+                liste.append((montant, res))
+    except EndLoop:
+        return liste
+
+def execute_virement(emetteur, destinataire, montant, motif):
+    if emetteur["numcbde"] != destinataire["numcbde"]:
+        print "INSERT INTO transactions (conso, emetteur, destinataire, montant, quantite, valide, remarque)\
+               VALUES (1, %s, %s, %s, 1, true, '%s');" % (emetteur["numcbde"], destinataire["numcbde"], montant, motif)
+
+def execute_virements(emetteurs, destinataires, motif):
+    totalem = sum([i[0] for i in emetteurs])
+    totalde = sum([i[0] for i in destinataires])
+    if abs(totalem - totalde) >= 0.01:
+        raise PasLesMemesTotaux
+    if totalem == 0:
+        print "Je vais pas m'emmerder pour un montant nul."
+        exit(0)
+    # On commence par faire payer tous les participants au premier payeur
+    premier = destinataires[0][1]
+    for (montant, em) in emetteurs:
+        execute_virement(em, premier, montant, motif)
+    # Ensuite le premier payeur rembourse les autres
+    for (montant, de) in destinataires[1:]:
+        execute_virement(premier, de, montant, motif)
+    
+
+def virements():
+    motif = raw_input("Motif : ")
+    print "= Liste des participants ="
+    emetteurs = get_people()
+    total = sum([i[0] for i in emetteurs])
+    print "\nParticipants :\n" + "  ".join(["%s (%s)" % (i[1]["pseudo"], i[0]) for i in emetteurs])
+    print "Total : %s" % total + "\n"
+    coeff = get_montant(ask="coefficient (réduction,…) =", total="coeff")
+    # Si le coeff n'est pas 1, il faut changer les valeurs
+    if coeff!=1:
+        emetteurs = [(em[0]*coeff, em[1]) for em in emetteurs]
+    total = total*coeff
+    print "= Payeurs ="
+    destinataires = get_people(total=total)
+    total_pay = sum([i[0] for i in destinataires])
+    print "\nParticipants :\n" + "  ".join(["%s (%s)" % (i[1]["pseudo"], i[0]) for i in emetteurs])
+    print "Total : %s" % total
+    print "\nPayeurs :\n" + "  ".join(["%s (%s)" % (i[1]["pseudo"], i[0]) for i in destinataires])
+    print "Total : %s" % total_pay + "\n"
+    if abs(total-total_pay) >= 0.01:
+        print "Les totaux des participations et des paiements ne concordent pas !\nAbort."
+        exit(1)
+
+    print "Transactions à effectuer :"
+    execute_virements(emetteurs, destinataires, motif)
+
+if __name__ == "__main__":
+    virements()
diff --git a/bde/old/voir_droits.py b/bde/old/voir_droits.py
new file mode 100755 (executable)
index 0000000..9a94fd6
--- /dev/null
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+# -*- coding:utf8 -*-
+
+""" Script pour afficher qui a quels droits.
+
+    Affiche les prénom, nom, pseudo, droits, surdroits des gens qui ont des droits!=par défaut.
+    droits et surdroits sont pretty-printés pour qu'on les comprenne.
+"""
+
+from pyPgSQL import PgSQL
+
+con=PgSQL.connect(database="bde")
+cur=con.cursor()
+
+cur.execute("SELECT prenom,nom,pseudo,droits,surdroits,supreme FROM adherents WHERE numcbde>-1"
+            +" AND NOT droits in (0,1) AND supreme='f' ORDER BY droits;")
+l=cur.fetchall()
+
+#: Correspondance binaire → droit
+dicodroits={
+        1 : "Intranet",
+        2 : "Note",
+        4 : "Consos",
+        8 : "Adhérents",
+       16 : "Boutons",
+       32 : "Inscriptions",
+       64 : "Activités",
+      128 : "Invités",
+      256 : "Transactions",
+      512 : "Forcé",
+     1024 : "Chèques",
+     2048 : "Webmaster",
+     4096 : "Wei",
+     8192 : "Sendmail",
+    16384 : "Bureau",
+    32768 : "Accès extérieur",
+    65536 : "Préinscriptions"
+    }
+
+pow2=[2**i for i in range(17)]
+vrail=[]
+for ligne in l:
+  vrail.append([ligne["prenom"],ligne["nom"],ligne["pseudo"],
+                ",".join([dicodroits[i] for i in pow2 if ligne["droits"]&i]),
+                ",".join([dicodroits[i] for i in pow2 if ligne["surdroits"]&i])])
+
+
+lenprenom = max([len(unicode(ligne[0])) for ligne in vrail]+[len(u"prénom")])
+lennom = max([len(unicode(ligne[1])) for ligne in vrail]+[len(u"nom")])
+lenpseudo = max([len(unicode(ligne[2])) for ligne in vrail]+[len(u"pseudo")])
+lendroits = max([len(unicode(ligne[3])) for ligne in vrail]+[len(u"droits")])
+lensurdroits = max([len(unicode(ligne[4])) for ligne in vrail]+[len(u"surdroits")])
+
+template=" %%-%ds | %%-%ds | %%-%ds | %%-%ds | %%-%ds \n"%(lenprenom,lennom,lenpseudo,lendroits,lensurdroits)
+
+pretty=template%("prénom","nom","pseudo","droits","surdroits")
+pretty+="-"*(lenprenom+2)+"+"+"-"*(lennom+2)+"+"+"-"*(lenpseudo+2)+"+"+"-"*(lendroits+2)+"+"+"-"*(lensurdroits+2)+"\n"
+for i in vrail:
+  pretty+=template%(tuple([unicode(j) for j in i]))
+
+print pretty
diff --git a/bde/supprimer_quelquun.py b/bde/supprimer_quelquun.py
deleted file mode 100755 (executable)
index b28d711..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/python
-# -*- coding:utf8 -*-
-
-""" Codé par 20-100
-    pour "supprimer" quelqu'un dans la note, c'est-à-dire anonymiser le compte.
-"""
-
-from pretty_print import sql_pretty_print as spp
-import psycopg2, psycopg2.extras
-
-class NonZeroError(ValueError):
-    """Erreur levée en cas de tentative de suppression d'un compte de solde non nul."""
-    def __init__(self):
-        super(NonZeroError, self).__init__("Solde du compte non-nul")
-
-def liste_to_sql(l):
-    """Renvoie la liste d'entiers en chaîne sql utilisable"""
-    assert all([type(i) == int for i in l])
-    return "(" + ",".join([str(i) for i in l]) + ")"
-
-def getcursor():
-    """Ouvre une connexion à la base de données."""
-    con = psycopg2.connect(database="bde")
-    cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
-    return con, cur
-
-def get_comptes(liste):
-    """Récupère les comptes entre début et fin.
-       Attention au contenu de liste, quand même."""
-    con, cur = getcursor()
-    cur.execute("SELECT * FROM adherents WHERE numcbde in %s ORDER BY numcbde;" % liste_to_sql(liste))
-    l = cur.fetchall()
-    return l
-
-def check_impossibles(l):
-    """On ne peut pas "supprimer" un compte dont le solde est non nul."""
-    paspossibles = [i for i in l if i["solde"]!=0]
-    if len(paspossibles) > 0:
-        print "\e[1;31mJe supprimerai pas quelqu'un dont le solde n'est pas nul : %s\e[0m" % (",".join([str(adh["numcbde"]) for adh in paspossibles]))
-        raise NonZeroError
-
-def supprime(liste):
-    """Supprime les comptes dont le numcbde est dans ``liste``."""
-    l = get_comptes(liste)
-    check_impossibles(l)
-    con, cur = getcursor()
-    cur.execute("""UPDATE adherents
-                   SET prenom='Erreur', nom='Erreur', sexe='E', pseudo=numcbde,
-                       passwd='!', section='', adresse='', email='nobody@crans.org',
-                       droits=0, surdroits=0, supreme='f', bloque='t', fonction='',
-                       mail_info=0, club='f', telephone='', theme='UNI', pbsante='',
-                       normalien='t', numsecu='' WHERE numcbde in %s;
-                """ % (liste_to_sql(liste)))
-    cur.execute("COMMIT;")
-
-def interactive_begin():
-    """Détermine la liste des comptes à supprimer de manière interactive."""
-    print "\e[1;31mAttention, je ne supprime rien, je ne fais que transformer en Erreur,Erreur...\e[0m"
-    
-    debut = raw_input("Premier id : ")
-    debut = int(debut)
-    fin = raw_input("Dernier id (vide pour 1 seul) : ")
-    if fin == "":
-        fin = debut
-    else:
-        fin = int(fin)
-    
-    return range(debut, fin+1)
-
-def interactive_delete(liste):
-    """Supprime les comptes de manière interactive."""
-    l = get_comptes(liste)
-    print spp(l, ["numcbde", "nom", "prenom", "pseudo", "solde"])
-    
-    ans=raw_input("""Êtes-vous sûr de vouloir les "supprimer" ? """)
-    if ans in ["oui","o","O","OUI","Y","y","YES","yes"]:
-        try:
-            supprime(liste)
-        except NonZeroError:
-            exit(1)
-        print "Et bim !"
-    else:
-        print "Nothing Done"
-
-if __name__ == "__main__":
-    interactive_delete(interactive_begin())
diff --git a/bde/this_is_dirty.sh b/bde/this_is_dirty.sh
deleted file mode 100755 (executable)
index cb72f58..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-
-
-#psql bde -c "INSERT INTO transactions (conso, emetteur, destinataire, montant, quantite, valide, remarque) VALUES (1, 2850, 0, 35, 1, true, 'sweat ENS Z');"
-#psql bde -c "INSERT INTO transactions (conso, emetteur, destinataire, montant, quantite, valide, remarque) VALUES (1, 3246, 3539, 94.72, 1, true, 'Pot A♡');"
-#psql bde -c "INSERT INTO transactions (date, conso, emetteur, destinataire, montant, quantite, valide, remarque) VALUES ('2013-01-17 00:14:56', 44, 2822, 0, 2.00, 6, true, 'Pinte');"
-
-#psql bde -c "ALTER TABLE transactions DISABLE TRIGGER ALL;"
-#psql bde -c "ALTER TABLE transactions ENABLE TRIGGER ALL;"
-connard=2187
-recepteur=2798
-quantite=1
-taxe=3.00
-randomreason='Sauce - Menu'
-
-psql bde -c "UPDATE adherents SET solde=solde + 500 WHERE numcbde = ${connard};"
-psql bde -c "INSERT INTO transactions (conso, emetteur, destinataire, montant, quantite, valide, remarque) VALUES (1, ${connard}, ${recepteur}, ${taxe}, ${quantite}, true, '${randomreason}');"
-psql bde -c "UPDATE adherents SET solde=solde - 500 WHERE numcbde = ${connard};"
-
-
diff --git a/bde/tresorerie.sql b/bde/tresorerie.sql
deleted file mode 100644 (file)
index 35a5106..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-# écrit par 20-100 le 16/03/13 (ouais enfin surtout le 17)
-# Des requêtes SQL en vrac pour satisfaire Maylis, penser à porter ça sur la NK2015 avec une interface
-# pour les tréoriers
-
-# Avoir les soldes de tout le monde à une date particulière
-SELECT pseudo, numcbde, recu, emis, COALESCE(recu, 0)-COALESCE(emis, 0) AS solde FROM (SELECT adherents.pseudo, adherents.numcbde, (SELECT sum(montant*quantite) FROM transactions WHERE valide AND destinataire=adherents.numcbde AND date<'2012-02-22') AS recu, (SELECT sum(montant*quantite) FROM transactions WHERE valide AND emetteur=adherents.numcbde AND date<'2012-02-22') AS emis FROM adherents) AS calculs;
-
-# Avoir la somme de tous les soldes de tout le monde à cette date :
-SELECT sum(solde) FROM (SELECT pseudo, numcbde, recu, emis, COALESCE(recu, 0)-COALESCE(emis, 0) AS solde FROM (SELECT adherents.pseudo, adherents.numcbde, (SELECT sum(montant*quantite) FROM transactions WHERE valide AND destinataire=adherents.numcbde AND date<'2012-02-22') AS recu, (SELECT sum(montant*quantite) FROM transactions WHERE valide AND emetteur=adherents.numcbde AND date<'2012-02-22') AS emis FROM adherents) AS calculs) AS soldes;
-# Oh ! ça fait 0 ! cool hein ?
-# Eh ben ça a pas été si trivial que ça… -_-
-
-
-# Le résumé des transactions du BDE, regroupé par type.
-SELECT sum(montant*quantite*(CASE WHEN emetteur=destinataire THEN 0 WHEN destinataire=0 THEN 1 ELSE -1 END)) AS total, remarque FROM transactions WHERE valide AND 0 in (emetteur, destinataire) AND date<='2013-02-19' AND date>='2012-02-22' GROUP BY remarque ORDER BY total;
-# Attention : penser à changer les *deux* 0 pour le faire sur quelqu'un d'autre.
diff --git a/bde/virements.py b/bde/virements.py
deleted file mode 100755 (executable)
index 030fca6..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/usr/bin/python
-# -*- encoding: utf-8 -*-
-
-
-""" Pour faciliter les remboursements note en cas de commande prima/pizzas/hanako/yang/…
-
- TO DO : Rajouter une option --same où on ne précise pas la part des participants,
-         tout le monde a la même (donc post-calculée)
-"""
-
-import psycopg2, psycopg2.extras
-
-def getcursor():
-    con = psycopg2.connect(database="bde")
-    cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
-    return con,cur
-
-def trouver(term):
-    term = str(term)
-    sterm = "%%%s%%" % term
-    req = "SELECT * FROM adherents WHERE pseudo ILIKE %s OR nom ILIKE %s OR prenom ILIKE %s OR CAST(numcbde AS varchar)=%s ORDER BY nom;"
-    con, cur = getcursor()
-    cur.execute(req, (sterm, sterm, sterm, term))
-    return cur.fetchall()
-
-def pprint(l):
-    keys = ["numcbde", "prenom", "nom", "pseudo", "solde"]
-    l = [{"numcbde" : str(i["numcbde"]),
-          "prenom" : i["prenom"],
-          "nom" : i["nom"],
-          "pseudo" : i["pseudo"],
-          "solde" : str(i["solde"])} for i in l]
-    maxs = [ max([len(i[key]) for i in [{key:key}]+l]) for key in keys ]
-    pattern = u"| %%%ss | %%-%ss | %%-%ss | %%-%ss | %%%ss |" % tuple(maxs)
-    sep = (pattern % tuple([u"-"*i for i in maxs])).replace(u"|", u"+").replace(u" ", u"-")
-    print sep
-    print pattern % tuple(keys)
-    print sep
-    for i in l:
-        print pattern % tuple([i[key] for key in keys])
-    print sep
-
-class EndLoop(Exception):
-    pass
-
-class PasLesMemesTotaux(Exception):
-    pass
-
-def ask_one():
-    term = raw_input("Search : ")
-    if term=="":
-        raise EndLoop
-    l = trouver(term)
-    if len(l) == 1:
-        return l[0]
-    elif len(l) > 1:
-        pprint(l)
-        print ""
-        ans = None
-        while ans!="0":
-            ans = raw_input("numcbde (ou 0)=")
-            res = [i for i in l if str(i["numcbde"]) == ans]
-            if len(res)==1:
-                return res[0]
-
-def get_montant(ask="montant=", total=None):
-    montant = None
-    while montant==None:
-        smontant = raw_input(ask)
-        if smontant.lower() in ["all", "tout"] and total!=None:
-            return total
-        if smontant == "" and total=="coeff":
-            return 1
-        try:
-            return float(smontant)
-        except:
-            pass
-
-def get_people(total=None):
-    liste = []
-    print "Ajoutez des notes : (vide pour finir)"
-    try:
-        while True:
-            res = ask_one()
-            if res:
-                montant = get_montant(total=total)
-                liste.append((montant, res))
-    except EndLoop:
-        return liste
-
-def execute_virement(emetteur, destinataire, montant, motif):
-    if emetteur["numcbde"] != destinataire["numcbde"]:
-        print "INSERT INTO transactions (conso, emetteur, destinataire, montant, quantite, valide, remarque)\
-               VALUES (1, %s, %s, %s, 1, true, '%s');" % (emetteur["numcbde"], destinataire["numcbde"], montant, motif)
-
-def execute_virements(emetteurs, destinataires, motif):
-    totalem = sum([i[0] for i in emetteurs])
-    totalde = sum([i[0] for i in destinataires])
-    if abs(totalem - totalde) >= 0.01:
-        raise PasLesMemesTotaux
-    if totalem == 0:
-        print "Je vais pas m'emmerder pour un montant nul."
-        exit(0)
-    # On commence par faire payer tous les participants au premier payeur
-    premier = destinataires[0][1]
-    for (montant, em) in emetteurs:
-        execute_virement(em, premier, montant, motif)
-    # Ensuite le premier payeur rembourse les autres
-    for (montant, de) in destinataires[1:]:
-        execute_virement(premier, de, montant, motif)
-    
-
-def virements():
-    motif = raw_input("Motif : ")
-    print "= Liste des participants ="
-    emetteurs = get_people()
-    total = sum([i[0] for i in emetteurs])
-    print "\nParticipants :\n" + "  ".join(["%s (%s)" % (i[1]["pseudo"], i[0]) for i in emetteurs])
-    print "Total : %s" % total + "\n"
-    coeff = get_montant(ask="coefficient (réduction,…) =", total="coeff")
-    # Si le coeff n'est pas 1, il faut changer les valeurs
-    if coeff!=1:
-        emetteurs = [(em[0]*coeff, em[1]) for em in emetteurs]
-    total = total*coeff
-    print "= Payeurs ="
-    destinataires = get_people(total=total)
-    total_pay = sum([i[0] for i in destinataires])
-    print "\nParticipants :\n" + "  ".join(["%s (%s)" % (i[1]["pseudo"], i[0]) for i in emetteurs])
-    print "Total : %s" % total
-    print "\nPayeurs :\n" + "  ".join(["%s (%s)" % (i[1]["pseudo"], i[0]) for i in destinataires])
-    print "Total : %s" % total_pay + "\n"
-    if abs(total-total_pay) >= 0.01:
-        print "Les totaux des participations et des paiements ne concordent pas !\nAbort."
-        exit(1)
-
-    print "Transactions à effectuer :"
-    execute_virements(emetteurs, destinataires, motif)
-
-if __name__ == "__main__":
-    virements()
diff --git a/bde/voir_droits.py b/bde/voir_droits.py
deleted file mode 100755 (executable)
index 9a94fd6..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/python
-# -*- coding:utf8 -*-
-
-""" Script pour afficher qui a quels droits.
-
-    Affiche les prénom, nom, pseudo, droits, surdroits des gens qui ont des droits!=par défaut.
-    droits et surdroits sont pretty-printés pour qu'on les comprenne.
-"""
-
-from pyPgSQL import PgSQL
-
-con=PgSQL.connect(database="bde")
-cur=con.cursor()
-
-cur.execute("SELECT prenom,nom,pseudo,droits,surdroits,supreme FROM adherents WHERE numcbde>-1"
-            +" AND NOT droits in (0,1) AND supreme='f' ORDER BY droits;")
-l=cur.fetchall()
-
-#: Correspondance binaire → droit
-dicodroits={
-        1 : "Intranet",
-        2 : "Note",
-        4 : "Consos",
-        8 : "Adhérents",
-       16 : "Boutons",
-       32 : "Inscriptions",
-       64 : "Activités",
-      128 : "Invités",
-      256 : "Transactions",
-      512 : "Forcé",
-     1024 : "Chèques",
-     2048 : "Webmaster",
-     4096 : "Wei",
-     8192 : "Sendmail",
-    16384 : "Bureau",
-    32768 : "Accès extérieur",
-    65536 : "Préinscriptions"
-    }
-
-pow2=[2**i for i in range(17)]
-vrail=[]
-for ligne in l:
-  vrail.append([ligne["prenom"],ligne["nom"],ligne["pseudo"],
-                ",".join([dicodroits[i] for i in pow2 if ligne["droits"]&i]),
-                ",".join([dicodroits[i] for i in pow2 if ligne["surdroits"]&i])])
-
-
-lenprenom = max([len(unicode(ligne[0])) for ligne in vrail]+[len(u"prénom")])
-lennom = max([len(unicode(ligne[1])) for ligne in vrail]+[len(u"nom")])
-lenpseudo = max([len(unicode(ligne[2])) for ligne in vrail]+[len(u"pseudo")])
-lendroits = max([len(unicode(ligne[3])) for ligne in vrail]+[len(u"droits")])
-lensurdroits = max([len(unicode(ligne[4])) for ligne in vrail]+[len(u"surdroits")])
-
-template=" %%-%ds | %%-%ds | %%-%ds | %%-%ds | %%-%ds \n"%(lenprenom,lennom,lenpseudo,lendroits,lensurdroits)
-
-pretty=template%("prénom","nom","pseudo","droits","surdroits")
-pretty+="-"*(lenprenom+2)+"+"+"-"*(lennom+2)+"+"+"-"*(lenpseudo+2)+"+"+"-"*(lendroits+2)+"+"+"-"*(lensurdroits+2)+"\n"
-for i in vrail:
-  pretty+=template%(tuple([unicode(j) for j in i]))
-
-print pretty