]> gitweb.pimeys.fr Git - scripts-20-100.git/blobdiff - bde/credits_duplicates.py
typo
[scripts-20-100.git] / bde / credits_duplicates.py
index dc98725954ae128f452873ad2c1b6027686f307b..7cb2fcb822cea95bac50ac2fdad123d1f4b32789 100755 (executable)
@@ -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)