]> gitweb.pimeys.fr Git - scripts-20-100.git/commitdiff
[bde] all_date.py : pour récupérer les soldes de tous les comptes à une date donnée
authorVincent Le Gallic <legallic@crans.org>
Thu, 10 Mar 2016 03:12:08 +0000 (04:12 +0100)
committerVincent Le Gallic <legallic@crans.org>
Fri, 11 Mar 2016 04:41:28 +0000 (05:41 +0100)
bde/all_date.py [new file with mode: 0755]

diff --git a/bde/all_date.py b/bde/all_date.py
new file mode 100755 (executable)
index 0000000..190a5cb
--- /dev/null
@@ -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