initial import

This commit is contained in:
2017-03-06 17:58:18 +01:00
commit 0e7b015d20
276 changed files with 101193 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
from sqlalchemy import engine_from_config
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import configure_mappers
import zope.sqlalchemy
from pyramid.security import (
Allow,
Authenticated,
DENY_ALL,
)
# run configure_mappers after defining all of the models to ensure
# all relationships can be setup
configure_mappers()
class RootFactory(object):
"""Defines an ACL for groups/permissions mapping"""
__acl__ = [ (Allow, Authenticated, 'view'),
(Allow, 'group:administrators', 'manage'),
DENY_ALL,
]
def __init__(self, request):
pass
def get_engine(settings, prefix='sqlalchemy.'):
return engine_from_config(settings, prefix)
def get_session_factory(engine):
factory = sessionmaker()
factory.configure(bind=engine)
return factory
def get_tm_session(session_factory, transaction_manager):
"""
Get a ``sqlalchemy.orm.Session`` instance backed by a transaction.
This function will hook the session to the transaction manager which
will take care of committing any changes.
- When using pyramid_tm it will automatically be committed or aborted
depending on whether an exception is raised.
- When using scripts you should wrap the session in a manager yourself.
For example::
import transaction
engine = get_engine(settings)
session_factory = get_session_factory(engine)
with transaction.manager:
dbsession = get_tm_session(session_factory, transaction.manager)
"""
dbsession = session_factory()
zope.sqlalchemy.register(
dbsession, transaction_manager=transaction_manager)
return dbsession
def includeme(config):
"""
Initialize the model for a Pyramid app.
Activate this setup using ``config.include('mondumas.models')``.
"""
settings = config.get_settings()
# use pyramid_tm to hook the transaction lifecycle to the request
config.include('pyramid_tm')
session_factory = get_session_factory(get_engine(settings))
config.registry['dbsession_factory'] = session_factory
# make request.dbsession available for use in Pyramid
config.add_request_method(
# r.tm is the transaction manager used by pyramid_tm
lambda r: get_tm_session(session_factory, r.tm),
'dbsession',
reify=True
)

166
mondumas/models/default.py Normal file
View File

@@ -0,0 +1,166 @@
# -*- 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})