From c5e6e764c24dd5e98cf08ca26881b5fd93810db6 Mon Sep 17 00:00:00 2001 From: Vincent Le Gallic Date: Thu, 10 Mar 2016 04:12:08 +0100 Subject: [PATCH] =?utf8?q?[bde]=20all=5Fdate.py=20:=20pour=20r=C3=A9cup?= =?utf8?q?=C3=A9rer=20les=20soldes=20de=20tous=20les=20comptes=20=C3=A0=20?= =?utf8?q?une=20date=20donn=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- bde/all_date.py | 76 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100755 bde/all_date.py diff --git a/bde/all_date.py b/bde/all_date.py new file mode 100755 index 0000000..190a5cb --- /dev/null +++ b/bde/all_date.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +""" +Pour récupérer les soldes de tous les comptes à une date donnée +et éventuellement les sommer. +""" + +import sys +import psycopg2 +import psycopg2.extras +import argparse + +import solde_date +import base + + +def get_idbdes(include_bde=False, with_personnes=True, with_clubs=True): + """Récupère les idbdes de tous les comptes.""" + req_template = "SELECT idbde FROM comptes WHERE idbde %s 0 AND type = ANY (%%s);" + if include_bde: + req = req_template % ">=" + else: + req = req_template % ">" + types = [] + if with_clubs: + types.append("club") + if with_personnes: + types.append("personne") + con, cur = base.getcursor() + cur.execute(req, (types,)) + l = cur.fetchall() + l = [i[0] for i in l] + return l + +def main(args): + """Calcule les solde de tous les comptes à ``date``""" + idbdes = get_idbdes(args.bde, args.personnes, args.clubs) + nb = len(idbdes) + nbchiffres = len(str(nb)) + template = "\r%%%ss/%%s" % nbchiffres + soldes = {} + for (i, idbde) in enumerate(idbdes): + soldes[idbde] = solde_date.get_solde_date(idbde, args.date) + if (i + 1) % 10 == 0 and not args.quiet: + sys.stdout.write(template % (i + 1, nb)) + sys.stdout.flush() + if not args.quiet: + sys.stdout.write(template % (i + 1, nb)) + sys.stdout.flush() + print "" + return soldes + + +parser = argparse.ArgumentParser(description=__doc__) + +parser.add_argument('-c', '--clubs', help="Inclure les clubs dans le calcul", action="store_true") +parser.add_argument('-p', '--personnes', help="Inclure les personnes dans le calcul", action="store_true") +parser.add_argument('-b', '--bde', help="Inclure le compte BDE dans le calcul", action="store_true") +parser.add_argument('-s', '--sum', help="Afficher les sommes", action="store_true") +parser.add_argument('-v', '--verbose', help="Afficher les soldes de tous les comptes", action="store_true") +parser.add_argument('-q', '--quiet', help="Ne pas afficher la progression", action="store_true") + +parser.add_argument("date", type=str, help="La date à laquelle on veut faire le calcul") + +if __name__ == "__main__": + args = parser.parse_args() + soldes = main(args) + if args.verbose: + import pprint + pprint.pprint(soldes) + if args.sum: + pos = sum([s for (i, s) in soldes.iteritems() if s > 0]) + print "Total des soldes positifs : %s" % pos + neg = sum([s for (i, s) in soldes.iteritems() if s < 0]) + print "Total des soldes négatifs : %s" % neg -- 2.39.2