]> gitweb.pimeys.fr Git - scripts-20-100.git/commitdiff
Gitted is better
authorVincent Le Gallic <legallic@crans.org>
Thu, 18 Feb 2016 09:16:45 +0000 (10:16 +0100)
committerVincent Le Gallic <legallic@crans.org>
Fri, 11 Mar 2016 04:41:28 +0000 (05:41 +0100)
sum_transacs_by_categorie.py [new file with mode: 0755]

diff --git a/sum_transacs_by_categorie.py b/sum_transacs_by_categorie.py
new file mode 100755 (executable)
index 0000000..5c2448c
--- /dev/null
@@ -0,0 +1,84 @@
+#!/usr/bin/python
+# -*- coding:utf8 -*-
+
+"""
+Récupère les gains BDE par mois et par catégorie.
+
+Une catégorie est définie par une liste de descriptions.
+Le script mange donc une liste de fichiers contenant une description par ligne.
+"""
+
+import sys
+import psycopg2
+import psycopg2.extras
+
+def getcursor():
+    con = psycopg2.connect(database='note')
+    cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
+    return con, cur
+
+def get_sum(descriptions, debut, fin):
+    """
+    Récupère le montant total des transactions reçue par le BDE dans ayant
+    leur descrption dans ``descriptions``
+    """
+    req = """
+        SELECT COALESCE(sum(quantite*montant), 0) AS s
+        FROM transactions
+        WHERE valide
+          AND date >= %(debut)s
+          AND date < %(fin)s
+          AND destinataire = 0
+          AND description = ANY (%(descriptions)s);
+    """
+    con, cur = getcursor()
+    cur.execute(req, {"debut" : debut + ' 00:00:00', "fin" : fin + ' 00:00:00', "descriptions" : descriptions})
+    s = cur.fetchone()["s"] or 0
+    return s
+
+def get_dates(y, m, d):
+    """
+    Donne les dates de découpage de ``d``/``m``/``y`` à ``d-1``/``m``/``y+1``.
+    """
+    dates = ["%s-%s-%s" % (y, m, d)]
+    for i in range(m + 1, 13):
+        dates.append("%s-%s-01" % (y, i))
+    for i in range(1, m):
+        dates.append("%s-%s-01" % (y + 1, i))
+    dates.append("%s-%s-%s" % (y + 1, m, d - 1))
+    return dates
+
+def get_year_sums(dates, filename):
+    """
+    Récupère les données sur l'année pour une catégorie.
+    """
+    descriptions = open(filename).readlines()
+    descriptions = [d.rstrip() for d in descriptions]
+    sums = []
+    for id in range(len(dates) - 1):
+        ddebut, dfin = dates[id], dates[id + 1]
+        sums.append(get_sum(descriptions, ddebut, dfin))
+    return sums
+
+if __name__ == "__main__":
+    filenames = sys.argv[1:]
+    print filenames
+    y, m, d = 2015, 2, 16
+    dates = get_dates(y, m, d)
+    ys = {}
+    for fn in filenames:
+        ys[fn] = get_year_sums(dates, fn)
+    print "debut\tfin\t" + "\t".join(filenames)
+    for id in range(len(dates) - 1):
+        ddebut, dfin = dates[id], dates[id + 1]
+        print "%s\t%s\t%s" % (
+            ddebut,
+            dfin,
+            "\t".join([str(ys[fn][id]) for fn in filenames])
+        )
+
+    print "totaux"
+    print "%s-%s-%s\t %s-%s-%s\t %s" % (y, m, d, y+1, m, d-1,
+        "\t".join([str(sum(ys[fn])) for fn in filenames]),)
+    print "total"
+    print str(sum([sum(ys[fn]) for fn in filenames]))