]> gitweb.pimeys.fr Git - scripts-20-100.git/blob - sum_transacs_by_categorie.py
5359a62e1d659ce1bda77a87318e31e8f18f3571
[scripts-20-100.git] / sum_transacs_by_categorie.py
1 #!/usr/bin/python
2 # -*- coding:utf8 -*-
3
4 """
5 Affiche les gains BDE par mois et par catégorie.
6
7 Une catégorie est définie par une liste de descriptions.
8 Le script mange donc une liste de fichiers contenant une description par ligne.
9 """
10
11 import sys
12
13 import base
14
15 def get_sum(descriptions, debut, fin):
16 """
17 Récupère le montant total des transactions reçue par le BDE dans ayant
18 leur descrption dans ``descriptions``
19 """
20 req = """
21 SELECT COALESCE(sum(quantite*montant), 0) AS s
22 FROM transactions
23 WHERE valide
24 AND date >= %(debut)s
25 AND date < %(fin)s
26 AND destinataire = 0
27 AND montant != 0
28 AND description = ANY (%(descriptions)s);
29 """
30 con, cur = base.getcursor()
31 cur.execute(req, {"debut" : debut + ' 00:00:00', "fin" : fin + ' 00:00:00', "descriptions" : descriptions})
32 s = cur.fetchone()["s"] or 0
33 return s
34
35 def get_dates(y, m, d, yf, mf, df):
36 """
37 Donne les dates de découpage de ``d``/``m``/``y`` à ``d-1``/``m``/``y+1``.
38 """
39 dates = ["%d-%02d-%02d" % (y, m, d)]
40 m += 1
41 if m == 13:
42 m = 1
43 y += 1
44 while (y, m) <= (yf, mf):
45 dates.append("%d-%02d-01" % (y, m))
46 m += 1
47 if m == 13:
48 m = 1
49 y += 1
50 # On a atteint le dernier mois
51 dates.append("%d-%02d-%02d" % (yf, mf, df))
52 return dates
53
54 def get_year_sums(dates, filename):
55 """
56 Récupère les données sur l'année pour une catégorie.
57 """
58 descriptions = open(filename).readlines()
59 descriptions = [d.rstrip('\n') for d in descriptions]
60 sums = []
61 for id in range(len(dates) - 1):
62 ddebut, dfin = dates[id], dates[id + 1]
63 sums.append(get_sum(descriptions, ddebut, dfin))
64 return sums
65
66
67 def main(filenames):
68 """Fait le boulot."""
69 print filenames
70 y, m, d = 2015, 2, 16
71 yf, mf, df = 2016, 2, 19
72 dates = get_dates(y, m, d, yf, mf, df)
73 ys = {}
74 for fn in filenames:
75 ys[fn] = get_year_sums(dates, fn)
76 print "debut\tfin\t" + "\t".join(filenames)
77 for id in range(len(dates) - 1):
78 ddebut, dfin = dates[id], dates[id + 1]
79 print "%s\t%s\t%s" % (
80 ddebut,
81 dfin,
82 "\t".join([str(ys[fn][id]) for fn in filenames])
83 )
84
85 print "totaux"
86 print "%s-%s-%s\t %s-%s-%s\t %s" % (y, m, d, yf, mf, df,
87 "\t".join([str(sum(ys[fn])) for fn in filenames]),)
88 print "total"
89 print str(sum([sum(ys[fn]) for fn in filenames]))
90
91 if __name__ == "__main__":
92 filenames = sys.argv[1:]
93 main(filenames)