X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=bde%2Fsolde_date.py;h=f685c736b84527e97159dbcf95e0d57a09c79571;hb=7e4a560133f4679b54210d674b306f58373d99d9;hp=7fb0960c2a5f9c8e8fd821dff39ae2d8169bfcdf;hpb=95260bf211e8671a1bd4f7b2b4b806473bbb19db;p=scripts-20-100.git diff --git a/bde/solde_date.py b/bde/solde_date.py index 7fb0960..f685c73 100755 --- a/bde/solde_date.py +++ b/bde/solde_date.py @@ -1,33 +1,47 @@ #!/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. -import sys -import psycopg2,psycopg2.extras +Usage : solde_date.py idbde date +""" -con = psycopg2.connect(database='note') -cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor) +import sys +import psycopg2 +import psycopg2.extras -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) +import base -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 = base.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.