# -*- coding: utf8 -*- from sqlalchemy import text from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import ( scoped_session, sessionmaker, ) from zope.sqlalchemy import ( ZopeTransactionExtension, mark_changed ) from datetime import * import transaction def execute_query(request, query, params): """Execute query and mark session as changed""" request.dbsession.execute(query, params) mark_changed(request.dbsession) transaction.commit() def get_comptes(request, type): if type == 'recette': query = "SELECT * FROM p_comptes where no_compte like '7%' order by no_compte;" else: query = "SELECT * FROM p_comptes where no_compte like '6%' order by no_compte;" results = request.dbsession.execute(query).fetchall() return results def get_member_by_mdp_oublie(request, lien): query = "SELECT * FROM membres WHERE mdp_oublie=:lien;" results = request.dbsession.execute(query, {'lien':lien}).first() return results def get_member_by_email(request, email): # lire le membres par son email query = """SELECT * FROM membres WHERE email=:email;""" results = request.dbsession.execute(query, {'email': email}).first() return results def get_member_by_id(request, mbr_id): # lire le membres par son identifianr query = """SELECT * FROM membres WHERE mbr_id=:mbr_id;""" results = request.dbsession.execute(query, {'mbr_id': mbr_id}).first() return results def get_membres(request): # lire les membres query = """SELECT * FROM membres order by nom, prenom;""" results = request.dbsession.execute(query).fetchall() return results def delete_don(request, mbr_id, don_id): query = "DELETE FROM mbr_dons WHERE mbr_id = :mbr_id and don_id = :don_id;" execute_query(request, query, {'mbr_id': mbr_id, 'don_id': don_id}) def update_don(request, mbr_id, don_id, new_values): # formater les champs s = '' for param in new_values.keys(): if param == 'date': ddate = datetime.strptime(new_values['date'], '%d/%m/%Y') new_values['date'] = ddate.strftime("%Y/%m/%d") if s: s += ",%s=:%s" % (param, param) else: s = "%s=:%s" % (param, param) if don_id == '0': new_values['mbr_id'] = mbr_id query = "INSERT INTO mbr_dons SET %s" % s else: new_values['mbr_id'] = mbr_id new_values['don_id'] = don_id query = "UPDATE mbr_dons SET %s WHERE mbr_id = :mbr_id and don_id = :don_id;" % s execute_query(request, query, new_values) def update_journal(request, jnl, no_id, new_values): # formater les champs s = '' for param in new_values.keys(): if param == 'date': ddate = datetime.strptime(new_values['date'], '%d/%m/%Y') new_values['date'] = ddate.strftime("%Y/%m/%d") if s: s += ",%s=:%s" % (param, param) else: s = "%s=:%s" % (param, param) if no_id == '0': if jnl == 'C': query = "INSERT INTO jnl_caisse SET %s" % s else: query = "INSERT INTO jnl_caisse SET %s" % s else: new_values['no_id'] = no_id if jnl == 'C': query = "UPDATE jnl_caisse SET %s WHERE no_id = :no_id;" % s else: query = "UPDATE jnl_banque SET %s WHERE no_id = :no_id;" % s execute_query(request, query, new_values) def delete_membre(request, mbr_id): query = "DELETE FROM membres WHERE mbr_id = :mbr_id ;" execute_query(request, query, {'mbr_id': mbr_id}) def insert_gift_to_account(request, libelle_esp, libelle_chq): import pdb;pdb.set_trace() # genere une écriture dans le journal de caisse pour les espèces query = "SELECT sum(montant) as total FROM mbr_dons where valide_le IS NULL and mode='ESPECE';" result = request.dbsession.execute(query).first() if result.total > 0: query = """INSERT INTO jnl_caisse (date, compte, libelle, recette, valide_le) VALUES (CURRENT_DATE, '7540', :libelle_esp, :total_esp, CURRENT_DATE);""" execute_query(request, query, {'libelle_esp': libelle_esp, 'total_esp': result.total}) # genere une écriture dans le journal de banque pour les chèques query = "SELECT sum(montant) as total FROM mbr_dons where valide_le IS NULL and mode='CHEQUE';" result = request.dbsession.execute(query).first() if result.total > 0: query = """INSERT INTO jnl_banque (date, compte, libelle, recette, valide_le) VALUES (CURRENT_DATE, '7540', :libelle_chq, :total_chq, CURRENT_DATE);""" execute_query(request, query, {'libelle_chq': libelle_chq, 'total_chq': result.total}) # valider les dons query = "UPDATE mbr_dons SET valide_le = CURRENT_DATE WHERE valide_le IS NULL;" execute_query(request, query, {}) def update_membre(request, mbr_id, new_values): # formater les champs s = '' for param in new_values.keys(): if param == 'nom': new_values['nom'] = new_values['nom'].upper() if param == 'ville': new_values['ville'] = new_values['ville'].upper() if s: s += ",%s=:%s" % (param, param) else: s = "%s=:%s" % (param, param) if mbr_id == '0': query = "INSERT INTO membres SET %s" % s else: new_values['mbr_id'] = mbr_id query = "UPDATE membres SET %s WHERE mbr_id = :mbr_id;" % s execute_query(request, query, new_values) def update_membre_mdp_oublie(request, login): import base64 import uuid # get a UUID - URL safe, Base64 r_uuid = base64.urlsafe_b64encode(uuid.uuid4().bytes) r_uuid = r_uuid.replace('=', '') query = "UPDATE membres SET mdp_oublie=:r_uuid, mdp_oublie_date=now() WHERE email=:login;" execute_query(request, query, {'r_uuid':r_uuid, 'login':login}) return r_uuid def update_membre_mdp(request, login, password): """Update password for member login""" query = "UPDATE membres SET mdp = SHA1(:password), mdp_oublie=NULL, mdp_oublie_date=NULL WHERE email=:login;" execute_query(request, query, {'login': login, 'password': password})