]> gitweb.pimeys.fr Git - scripts-20-100.git/blob - bde/integrite/fix_integrity.py
932460000dcc77d036ce91cd8bc687bd3cb08575
[scripts-20-100.git] / bde / integrite / fix_integrity.py
1 #!/usr/bin/python
2 # -*- coding:utf8 -*-
3
4 """ Codé pour rétablir l'intégrité de la BDD.
5
6 Pour générer des transactions dans le passé
7 pour les gens qui n'avaient pas commencé avec un solde nul.
8 """
9
10 import psycopg2, psycopg2.extras
11
12 con = psycopg2.connect(database="bde", connection_factory=psycopg2.extras.DictConnection)
13 cur = con.cursor()
14
15 from commands import getstatusoutput as ex
16 import os
17 import sys
18
19 req="""SELECT numcbde,pseudo,gagne-perdu as calcul,effectif,effectif-(gagne-perdu) as a_enlever
20 FROM
21 (SELECT numcbde,pseudo,
22 (SELECT COALESCE(sum(montant*quantite), 0)
23 FROM transactions
24 WHERE destinataire=main.numcbde AND valide='t') as gagne,
25 (SELECT COALESCE(sum(montant*quantite), 0)
26 FROM transactions
27 WHERE emetteur=main.numcbde AND valide='t') as perdu,
28 (SELECT solde
29 FROM adherents WHERE numcbde=main.numcbde) as effectif
30 FROM adherents as main)
31 AS calculs
32 WHERE gagne-perdu!=effectif AND numcbde>0 ORDER BY numcbde;"""
33
34 cur.execute(req)
35
36 l = cur.fetchall()
37
38 f=open("request_fixing.sql", "w")
39 f.write("ALTER TABLE transactions DISABLE TRIGGER ALL;\n")
40 for bug in l:
41 to_credit = bug["effectif"] - bug["calcul"]
42 if to_credit > 0:
43 emet, dest = 0, bug["numcbde"]
44 elif to_credit < 0:
45 emet, dest = bug["numcbde"], 0
46 f.write("INSERT INTO transactions (conso, emetteur, destinataire, montant, quantite, remarque) VALUES (1, %s, %s, %s, 1, 'Solde initial');\n" % (emet, dest, abs(to_credit)))
47 # En fait à cause des solde négatifs, il faut DISABLE les triggers, donc on n'a pas besoin d'update après
48 #f.write("UPDATE adherents SET solde=solde - (%s) WHERE numcbde=%s;\n" % (to_credit, bug["numcbde"]))
49
50 f.write("ALTER TABLE transactions ENABLE TRIGGER ALL;\n")
51 f.close()