]> gitweb.pimeys.fr Git - scripts-20-100.git/blob - bde/all_date.py
[bde] all_date.py : pour récupérer les soldes de tous les comptes à une date donnée
[scripts-20-100.git] / bde / all_date.py
1 #!/usr/bin/env python
2 # -*- encoding: utf-8 -*-
3
4 """
5 Pour récupérer les soldes de tous les comptes à une date donnée
6 et éventuellement les sommer.
7 """
8
9 import sys
10 import psycopg2
11 import psycopg2.extras
12 import argparse
13
14 import solde_date
15 import base
16
17
18 def get_idbdes(include_bde=False, with_personnes=True, with_clubs=True):
19 """Récupère les idbdes de tous les comptes."""
20 req_template = "SELECT idbde FROM comptes WHERE idbde %s 0 AND type = ANY (%%s);"
21 if include_bde:
22 req = req_template % ">="
23 else:
24 req = req_template % ">"
25 types = []
26 if with_clubs:
27 types.append("club")
28 if with_personnes:
29 types.append("personne")
30 con, cur = base.getcursor()
31 cur.execute(req, (types,))
32 l = cur.fetchall()
33 l = [i[0] for i in l]
34 return l
35
36 def main(args):
37 """Calcule les solde de tous les comptes à ``date``"""
38 idbdes = get_idbdes(args.bde, args.personnes, args.clubs)
39 nb = len(idbdes)
40 nbchiffres = len(str(nb))
41 template = "\r%%%ss/%%s" % nbchiffres
42 soldes = {}
43 for (i, idbde) in enumerate(idbdes):
44 soldes[idbde] = solde_date.get_solde_date(idbde, args.date)
45 if (i + 1) % 10 == 0 and not args.quiet:
46 sys.stdout.write(template % (i + 1, nb))
47 sys.stdout.flush()
48 if not args.quiet:
49 sys.stdout.write(template % (i + 1, nb))
50 sys.stdout.flush()
51 print ""
52 return soldes
53
54
55 parser = argparse.ArgumentParser(description=__doc__)
56
57 parser.add_argument('-c', '--clubs', help="Inclure les clubs dans le calcul", action="store_true")
58 parser.add_argument('-p', '--personnes', help="Inclure les personnes dans le calcul", action="store_true")
59 parser.add_argument('-b', '--bde', help="Inclure le compte BDE dans le calcul", action="store_true")
60 parser.add_argument('-s', '--sum', help="Afficher les sommes", action="store_true")
61 parser.add_argument('-v', '--verbose', help="Afficher les soldes de tous les comptes", action="store_true")
62 parser.add_argument('-q', '--quiet', help="Ne pas afficher la progression", action="store_true")
63
64 parser.add_argument("date", type=str, help="La date à laquelle on veut faire le calcul")
65
66 if __name__ == "__main__":
67 args = parser.parse_args()
68 soldes = main(args)
69 if args.verbose:
70 import pprint
71 pprint.pprint(soldes)
72 if args.sum:
73 pos = sum([s for (i, s) in soldes.iteritems() if s > 0])
74 print "Total des soldes positifs : %s" % pos
75 neg = sum([s for (i, s) in soldes.iteritems() if s < 0])
76 print "Total des soldes négatifs : %s" % neg