--- /dev/null
+#!/usr/bin/python
+# -*- coding:utf8 -*-
+
+"""
+Affiche 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 base
+
+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 montant != 0
+ AND description = ANY (%(descriptions)s);
+ """
+ con, cur = base.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, yf, mf, df):
+ """
+ Donne les dates de découpage de ``d``/``m``/``y`` à ``d-1``/``m``/``y+1``.
+ """
+ dates = ["%d-%02d-%02d" % (y, m, d)]
+ m += 1
+ if m == 13:
+ m = 1
+ y += 1
+ while (y, m) <= (yf, mf):
+ dates.append("%d-%02d-01" % (y, m))
+ m += 1
+ if m == 13:
+ m = 1
+ y += 1
+ # On a atteint le dernier mois
+ dates.append("%d-%02d-%02d" % (yf, mf, df))
+ 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('\n') 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
+
+
+def main(filenames):
+ """Fait le boulot."""
+ print filenames
+ y, m, d = 2015, 2, 16
+ yf, mf, df = 2016, 2, 19
+ dates = get_dates(y, m, d, yf, mf, df)
+ 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, yf, mf, df,
+ "\t".join([str(sum(ys[fn])) for fn in filenames]),)
+ print "total"
+ print str(sum([sum(ys[fn]) for fn in filenames]))
+
+if __name__ == "__main__":
+ filenames = sys.argv[1:]
+ main(filenames)
+++ /dev/null
-#!/usr/bin/python
-# -*- coding:utf8 -*-
-
-"""
-Affiche 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 base
-
-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 montant != 0
- AND description = ANY (%(descriptions)s);
- """
- con, cur = base.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, yf, mf, df):
- """
- Donne les dates de découpage de ``d``/``m``/``y`` à ``d-1``/``m``/``y+1``.
- """
- dates = ["%d-%02d-%02d" % (y, m, d)]
- m += 1
- if m == 13:
- m = 1
- y += 1
- while (y, m) <= (yf, mf):
- dates.append("%d-%02d-01" % (y, m))
- m += 1
- if m == 13:
- m = 1
- y += 1
- # On a atteint le dernier mois
- dates.append("%d-%02d-%02d" % (yf, mf, df))
- 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('\n') 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
-
-
-def main(filenames):
- """Fait le boulot."""
- print filenames
- y, m, d = 2015, 2, 16
- yf, mf, df = 2016, 2, 19
- dates = get_dates(y, m, d, yf, mf, df)
- 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, yf, mf, df,
- "\t".join([str(sum(ys[fn])) for fn in filenames]),)
- print "total"
- print str(sum([sum(ys[fn]) for fn in filenames]))
-
-if __name__ == "__main__":
- filenames = sys.argv[1:]
- main(filenames)