]> gitweb.pimeys.fr Git - scripts-20-100.git/commitdiff
[solde_date] proprification, importable
authorVincent Le Gallic <legallic@crans.org>
Thu, 10 Mar 2016 02:38:55 +0000 (03:38 +0100)
committerVincent Le Gallic <legallic@crans.org>
Thu, 10 Mar 2016 02:39:15 +0000 (03:39 +0100)
bde/solde_date.py

index 7fb0960c2a5f9c8e8fd821dff39ae2d8169bfcdf..193822ac58953c1c3c17430224708ae446b49bf4 100755 (executable)
@@ -1,33 +1,50 @@
 #!/usr/bin/python
 # -*- coding:utf8 -*-
 
-""" Codé par 20-100 le 21/04/12
+"""
+Codé par 20-100 le 21/04/12
 
-    sert à connaître le solde d'un compte à une date t donnée."""
+Sert à connaître le solde d'un compte à une date t donnée.
+
+Usage : solde_date.py idbde date
+"""
 
 import sys
 import psycopg2,psycopg2.extras
 
-con = psycopg2.connect(database='note')
-cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
-
-try:
-  idbde = int(sys.argv[1])
-  date = " ".join(sys.argv[2:])
-  # On checke que ça se comprend comme une date
-  if date in ["now","maintenant","today"]:
-    date = "now()"
-  else:
-    cur.execute("SELECT CAST(%s AS timestamp);",(date,))
-except Exception, exc:
-  print "Usage : solde_date numcbde date\nDonne le solde de l'adhérent idbde à la date donnée."
-  exit(1)
+def getcursor():
+    """Obtenir une connexion à la base de données."""
+    con = psycopg2.connect(database='note')
+    cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
+    return con, cur
 
-cur.execute("SELECT sum(montant*quantite) FROM transactions WHERE valide AND destinataire = %s AND date < CAST(%s AS timestamp)"
-            ,(idbde,date))
-received = cur.fetchone()[0]
-cur.execute("SELECT sum(montant*quantite) FROM transactions WHERE valide AND emetteur = %s AND date < CAST(%s AS timestamp)"
-            ,(idbde,date))
-given = cur.fetchone()[0]
+def get_solde_date(idbde, date="now"):
+    """Calcule le solde du compte ``idbde`` à la ``date`` donnée."""
+    con, cur = getcursor()
+    cur.execute(
+        """
+        SELECT COALESCE(sum(montant*quantite), 0)
+        FROM transactions
+        WHERE valide
+          AND destinataire = %s
+          AND date <= CAST(%s AS timestamp)
+        """,
+        (idbde, date))
+    received = cur.fetchone()[0]
+    cur.execute(
+        """
+        SELECT COALESCE(sum(montant*quantite), 0)
+        FROM transactions
+        WHERE valide
+          AND emetteur = %s
+          AND date <= CAST(%s AS timestamp)
+        """,
+        (idbde, date))
+    given = cur.fetchone()[0]
+    return received - given
 
-print (received-given)/100.
+if __name__ == "__main__":
+    idbde = int(sys.argv[1])
+    date = " ".join(sys.argv[2:])
+    solde = get_solde_date(idbde, date)
+    print solde/100.