From: Vincent Le Gallic Date: Fri, 11 Mar 2016 04:43:09 +0000 (+0100) Subject: Mais en fait ça marche pas ce merge de dépôts ? X-Git-Url: http://gitweb.pimeys.fr/?p=scripts-20-100.git;a=commitdiff_plain;h=0af61e04c1a2575f983ed8e5efa07efbf04eaa0a Mais en fait ça marche pas ce merge de dépôts ? --- diff --git a/bde/compta/sum_transacs_by_categorie.py b/bde/compta/sum_transacs_by_categorie.py new file mode 100755 index 0000000..5359a62 --- /dev/null +++ b/bde/compta/sum_transacs_by_categorie.py @@ -0,0 +1,93 @@ +#!/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) diff --git a/sum_transacs_by_categorie.py b/sum_transacs_by_categorie.py deleted file mode 100755 index 5359a62..0000000 --- a/sum_transacs_by_categorie.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/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)