X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=bde%2Fvirements.py;fp=bde%2Fvirements.py;h=0000000000000000000000000000000000000000;hb=62bd5a01bbcc7b96c4b1dd098415253d14492517;hp=030fca6bba862b21147c27be7503141cd6350df1;hpb=7630720dd491fa53093743e683d4e05f22d03afd;p=scripts-20-100.git diff --git a/bde/virements.py b/bde/virements.py deleted file mode 100755 index 030fca6..0000000 --- a/bde/virements.py +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/python -# -*- encoding: utf-8 -*- - - -""" Pour faciliter les remboursements note en cas de commande prima/pizzas/hanako/yang/… - - TO DO : Rajouter une option --same où on ne précise pas la part des participants, - tout le monde a la même (donc post-calculée) -""" - -import psycopg2, psycopg2.extras - -def getcursor(): - con = psycopg2.connect(database="bde") - cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor) - return con,cur - -def trouver(term): - term = str(term) - sterm = "%%%s%%" % term - req = "SELECT * FROM adherents WHERE pseudo ILIKE %s OR nom ILIKE %s OR prenom ILIKE %s OR CAST(numcbde AS varchar)=%s ORDER BY nom;" - con, cur = getcursor() - cur.execute(req, (sterm, sterm, sterm, term)) - return cur.fetchall() - -def pprint(l): - keys = ["numcbde", "prenom", "nom", "pseudo", "solde"] - l = [{"numcbde" : str(i["numcbde"]), - "prenom" : i["prenom"], - "nom" : i["nom"], - "pseudo" : i["pseudo"], - "solde" : str(i["solde"])} for i in l] - maxs = [ max([len(i[key]) for i in [{key:key}]+l]) for key in keys ] - pattern = u"| %%%ss | %%-%ss | %%-%ss | %%-%ss | %%%ss |" % tuple(maxs) - sep = (pattern % tuple([u"-"*i for i in maxs])).replace(u"|", u"+").replace(u" ", u"-") - print sep - print pattern % tuple(keys) - print sep - for i in l: - print pattern % tuple([i[key] for key in keys]) - print sep - -class EndLoop(Exception): - pass - -class PasLesMemesTotaux(Exception): - pass - -def ask_one(): - term = raw_input("Search : ") - if term=="": - raise EndLoop - l = trouver(term) - if len(l) == 1: - return l[0] - elif len(l) > 1: - pprint(l) - print "" - ans = None - while ans!="0": - ans = raw_input("numcbde (ou 0)=") - res = [i for i in l if str(i["numcbde"]) == ans] - if len(res)==1: - return res[0] - -def get_montant(ask="montant=", total=None): - montant = None - while montant==None: - smontant = raw_input(ask) - if smontant.lower() in ["all", "tout"] and total!=None: - return total - if smontant == "" and total=="coeff": - return 1 - try: - return float(smontant) - except: - pass - -def get_people(total=None): - liste = [] - print "Ajoutez des notes : (vide pour finir)" - try: - while True: - res = ask_one() - if res: - montant = get_montant(total=total) - liste.append((montant, res)) - except EndLoop: - return liste - -def execute_virement(emetteur, destinataire, montant, motif): - if emetteur["numcbde"] != destinataire["numcbde"]: - print "INSERT INTO transactions (conso, emetteur, destinataire, montant, quantite, valide, remarque)\ - VALUES (1, %s, %s, %s, 1, true, '%s');" % (emetteur["numcbde"], destinataire["numcbde"], montant, motif) - -def execute_virements(emetteurs, destinataires, motif): - totalem = sum([i[0] for i in emetteurs]) - totalde = sum([i[0] for i in destinataires]) - if abs(totalem - totalde) >= 0.01: - raise PasLesMemesTotaux - if totalem == 0: - print "Je vais pas m'emmerder pour un montant nul." - exit(0) - # On commence par faire payer tous les participants au premier payeur - premier = destinataires[0][1] - for (montant, em) in emetteurs: - execute_virement(em, premier, montant, motif) - # Ensuite le premier payeur rembourse les autres - for (montant, de) in destinataires[1:]: - execute_virement(premier, de, montant, motif) - - -def virements(): - motif = raw_input("Motif : ") - print "= Liste des participants =" - emetteurs = get_people() - total = sum([i[0] for i in emetteurs]) - print "\nParticipants :\n" + " ".join(["%s (%s)" % (i[1]["pseudo"], i[0]) for i in emetteurs]) - print "Total : %s" % total + "\n" - coeff = get_montant(ask="coefficient (réduction,…) =", total="coeff") - # Si le coeff n'est pas 1, il faut changer les valeurs - if coeff!=1: - emetteurs = [(em[0]*coeff, em[1]) for em in emetteurs] - total = total*coeff - print "= Payeurs =" - destinataires = get_people(total=total) - total_pay = sum([i[0] for i in destinataires]) - print "\nParticipants :\n" + " ".join(["%s (%s)" % (i[1]["pseudo"], i[0]) for i in emetteurs]) - print "Total : %s" % total - print "\nPayeurs :\n" + " ".join(["%s (%s)" % (i[1]["pseudo"], i[0]) for i in destinataires]) - print "Total : %s" % total_pay + "\n" - if abs(total-total_pay) >= 0.01: - print "Les totaux des participations et des paiements ne concordent pas !\nAbort." - exit(1) - - print "Transactions à effectuer :" - execute_virements(emetteurs, destinataires, motif) - -if __name__ == "__main__": - virements()