]> gitweb.pimeys.fr Git - scripts-20-100.git/commitdiff
[bde/combiennegs] Pour savoir combien de fois les gens sont passés en négatif
authorVincent Le Gallic <legallic@crans.org>
Sun, 28 Sep 2014 12:21:43 +0000 (14:21 +0200)
committerVincent Le Gallic <legallic@crans.org>
Sun, 28 Sep 2014 12:21:43 +0000 (14:21 +0200)
bde/combiennegs.py [new file with mode: 0755]

diff --git a/bde/combiennegs.py b/bde/combiennegs.py
new file mode 100755 (executable)
index 0000000..c6f43fb
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+""" Pour savoir combien de fois les gens sont passés en négatif """
+
+import psyopg2
+import psyopg2.extras
+
+year = 2014
+
+def get_data(con, year):
+    cur = con.getcursor(cursor_factory = psycopg2.DictCursor)
+    cur.execute("SELECT * FROM transactions ORDER BY date ASC;")
+    transactions = cur.fetchall()
+    cur.execute("SELECT adherent FROM inscriptions WHERE annee = %s;", (year,))
+    numcbdes = cur.fetchall()
+    return (numcbdes, transactions)
+
+def combienneg(numcbdes, alltrans):
+    soldes = {n : 0 for n in numcbdes}
+    nbnegs = {n : 0 for n in numcbdes}
+    for trans in [t for t in alltrans if t["valide"]]:
+        for (num, signe) in [(t["emetteur"], -1), (t["destinataire"], 1)]:
+            newsolde = soldes[num] + t["montant"] * t["quantite"] * signe
+            if soldes[num] >= 0 and newsolde < 0:
+                nbnegs[num] += 1
+            soldes[num] += newsolde
+    return nbnegs
+
+if __name__ == "__main__":
+    con = psycopg2.connect("bde")
+    numcbdes, transactions = get_data(con, year)
+    nbnegs = combienneg(numcbdes, transactions)