X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=bde%2Fcredits_duplicates.py;h=7cb2fcb822cea95bac50ac2fdad123d1f4b32789;hb=de5c78a0305d0f288adba1fa7eef4366d0ceb958;hp=dc98725954ae128f452873ad2c1b6027686f307b;hpb=8716e3401a1790c24ffd7d4825d86f56ef92e8b3;p=scripts-20-100.git diff --git a/bde/credits_duplicates.py b/bde/credits_duplicates.py index dc98725..7cb2fcb 100755 --- a/bde/credits_duplicates.py +++ b/bde/credits_duplicates.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- encoding: utf-8 -*- -""" Pour trouver les chèque dupliqués sur la note. """ +""" Pour trouver les chèques dupliqués sur la note. """ import psycopg2 import psycopg2.extras @@ -10,12 +10,9 @@ import pprint import subprocess import argparse +import base import pretty_print -def getcursor(): - con = psycopg2.connect(database="note") - con.set_client_encoding("utf-8") - return (con, con.cursor(cursor_factory = psycopg2.extras.DictCursor)) def get_data(cur, delai='1 minute', date='1970-01-01'): """ @@ -48,6 +45,8 @@ def get_data(cur, delai='1 minute', date='1970-01-01'): """ cur.execute(req_create_credits) + cur.execute("CREATE INDEX credits_index_id ON credits (id);") + req = u""" SELECT t1.id AS id1, @@ -60,7 +59,7 @@ def get_data(cur, delai='1 minute', date='1970-01-01'): c.pseudo AS destp, t1.description AS desc1, t2.description AS desc2 - FROM credits t1,credits t2, comptes c + FROM credits t1, credits t2, comptes c WHERE t1.destinataire = c.idbde AND t1.date >= %(date)s AND t2.date >= %(date)s AND t1.type='crédit' @@ -105,6 +104,7 @@ def sort_by_blocks(data): l.sort() result = [", ".join([str(i) for i in l]) for l in result] result = list(set(result)) + result.sort(key=lambda x : int(x.split(",")[0])) return result def get_transactions(cur, ids): @@ -122,14 +122,15 @@ def interactive(blocks, cur, args): ou d'afficher une liste de toutes celles à dévalider. """ ids_to_devalidate = [] + total = 0 for b in blocks: lb = [int(i) for i in b.split(",")] l = get_transactions(cur, b) - formatted = pretty_print.sql_pretty_print(l, keys=["id", "date", "type", "emetteur", "destinataire", "quantite", "montant", "description", "valide", "cantinvalidate"]) + formatted = pretty_print.sql_pretty_print(l, keys=["id", "date", "type", "emetteur", "destinataire", "quantite", "montant", "description", "valide", "cantinvalidate", "prenom", "nom"]) if not args.noless: p = subprocess.Popen(["less"], stdin=subprocess.PIPE) p.communicate(formatted.encode("utf-8")) - print formatted + print formatted.encode("utf-8") print "IDs : %s" % b idkeep = lb[0] question = "Ne garder que %s (= dévalider les autres) ? [o/N/s]" % idkeep @@ -143,8 +144,11 @@ def interactive(blocks, cur, args): elif ans.lower() in ["s"]: lb.remove(idkeep) ids_to_devalidate.extend(lb) + total += l[0]["montant"] * (len(l) - 1) if ids_to_devalidate: - print "\nIDs de transactions à dévalider :\n" + ",".join([str(i) for i in ids_to_devalidate]) + print "\nIDs de transactions à dévalider (%s) :" % len(ids_to_devalidate) + print ",".join([str(i) for i in ids_to_devalidate]) + print "Montant total : %s" % (total,) if __name__ == "__main__": parser = argparse.ArgumentParser(description="Liste les crédits semblables trop proches dans le temps et propose de les dévalider tous sauf 1.") @@ -157,7 +161,7 @@ if __name__ == "__main__": args = parser.parse_args() - con, cur = getcursor() + con, cur = base.getcursor() data = get_data(cur, delai=args.deltat, date=args.date) blocks = sort_by_blocks(data) interactive(blocks, cur, args)