]>
gitweb.pimeys.fr Git - scripts-20-100.git/blob - bde/old/virements.py
2 # -*- encoding: utf-8 -*-
5 """ Pour faciliter les remboursements note en cas de commande prima/pizzas/hanako/yang/…
7 TO DO : Rajouter une option --same où on ne précise pas la part des participants,
8 tout le monde a la même (donc post-calculée)
11 import psycopg2
, psycopg2
.extras
14 con
= psycopg2
.connect(database
="bde")
15 cur
= con
.cursor(cursor_factory
=psycopg2
.extras
.DictCursor
)
20 sterm
= "%%%s%%" % term
21 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;"
22 con
, cur
= getcursor()
23 cur
.execute(req
, (sterm
, sterm
, sterm
, term
))
27 keys
= ["numcbde", "prenom", "nom", "pseudo", "solde"]
28 l
= [{"numcbde" : str(i
["numcbde"]),
29 "prenom" : i
["prenom"],
31 "pseudo" : i
["pseudo"],
32 "solde" : str(i
["solde"])} for i
in l
]
33 maxs
= [ max([len(i
[key
]) for i
in [{key
:key
}]+l
]) for key
in keys
]
34 pattern
= u
"| %%%ss | %%-%ss | %%-%ss | %%-%ss | %%%ss |" % tuple(maxs
)
35 sep
= (pattern
% tuple([u
"-"*i
for i
in maxs
])).replace(u
"|", u
"+").replace(u
" ", u
"-")
37 print pattern
% tuple(keys
)
40 print pattern
% tuple([i
[key
] for key
in keys
])
43 class EndLoop(Exception):
46 class PasLesMemesTotaux(Exception):
50 term
= raw_input("Search : ")
61 ans
= raw_input("numcbde (ou 0)=")
62 res
= [i
for i
in l
if str(i
["numcbde"]) == ans
]
66 def get_montant(ask
="montant=", total
=None):
69 smontant
= raw_input(ask
)
70 if smontant
.lower() in ["all", "tout"] and total
!=None:
72 if smontant
== "" and total
=="coeff":
75 return float(smontant
)
79 def get_people(total
=None):
81 print "Ajoutez des notes : (vide pour finir)"
86 montant
= get_montant(total
=total
)
87 liste
.append((montant
, res
))
91 def execute_virement(emetteur
, destinataire
, montant
, motif
):
92 if emetteur
["numcbde"] != destinataire
["numcbde"]:
93 print "INSERT INTO transactions (conso, emetteur, destinataire, montant, quantite, valide, remarque)\
94 VALUES (1, %s, %s, %s, 1, true, '%s');" % (emetteur
["numcbde"], destinataire
["numcbde"], montant
, motif
)
96 def execute_virements(emetteurs
, destinataires
, motif
):
97 totalem
= sum([i
[0] for i
in emetteurs
])
98 totalde
= sum([i
[0] for i
in destinataires
])
99 if abs(totalem
- totalde
) >= 0.01:
100 raise PasLesMemesTotaux
102 print "Je vais pas m'emmerder pour un montant nul."
104 # On commence par faire payer tous les participants au premier payeur
105 premier
= destinataires
[0][1]
106 for (montant
, em
) in emetteurs
:
107 execute_virement(em
, premier
, montant
, motif
)
108 # Ensuite le premier payeur rembourse les autres
109 for (montant
, de
) in destinataires
[1:]:
110 execute_virement(premier
, de
, montant
, motif
)
114 motif
= raw_input("Motif : ")
115 print "= Liste des participants ="
116 emetteurs
= get_people()
117 total
= sum([i
[0] for i
in emetteurs
])
118 print "\nParticipants :\n" + " ".join(["%s (%s)" % (i
[1]["pseudo"], i
[0]) for i
in emetteurs
])
119 print "Total : %s" % total
+ "\n"
120 coeff
= get_montant(ask
="coefficient (réduction,…) =", total
="coeff")
121 # Si le coeff n'est pas 1, il faut changer les valeurs
123 emetteurs
= [(em
[0]*coeff
, em
[1]) for em
in emetteurs
]
126 destinataires
= get_people(total
=total
)
127 total_pay
= sum([i
[0] for i
in destinataires
])
128 print "\nParticipants :\n" + " ".join(["%s (%s)" % (i
[1]["pseudo"], i
[0]) for i
in emetteurs
])
129 print "Total : %s" % total
130 print "\nPayeurs :\n" + " ".join(["%s (%s)" % (i
[1]["pseudo"], i
[0]) for i
in destinataires
])
131 print "Total : %s" % total_pay
+ "\n"
132 if abs(total
-total_pay
) >= 0.01:
133 print "Les totaux des participations et des paiements ne concordent pas !\nAbort."
136 print "Transactions à effectuer :"
137 execute_virements(emetteurs
, destinataires
, motif
)
139 if __name__
== "__main__":