chargement initial
This commit is contained in:
84
caotek_mesavoirs/models/__init__.py
Normal file
84
caotek_mesavoirs/models/__init__.py
Normal 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
|
||||
)
|
||||
121
caotek_mesavoirs/models/agenda.py
Normal file
121
caotek_mesavoirs/models/agenda.py
Normal file
@@ -0,0 +1,121 @@
|
||||
# -*- 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 dateutil.relativedelta
|
||||
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_agendas(request):
|
||||
""" lire la liste des personnes ayant un agenda"""
|
||||
query = "CALL spGET_AGENDAS('T')"
|
||||
results = request.dbsession.execute(query).fetchall()
|
||||
return results
|
||||
|
||||
def get_table(code):
|
||||
if code == 'DD':
|
||||
table = 'dem_devis'
|
||||
elif code == 'OS':
|
||||
table = 'ordres'
|
||||
else:
|
||||
table = 'rdvous'
|
||||
return table
|
||||
|
||||
def get_table_details(code):
|
||||
if code == 'DD':
|
||||
table = 'dem_lig'
|
||||
elif code == 'OS':
|
||||
table = 'ordres_lig'
|
||||
else:
|
||||
table = 'rdvous_lig'
|
||||
return table
|
||||
|
||||
|
||||
def get_dossier_by_no(request,nodossier):
|
||||
societe = nodossier[0:2]
|
||||
table = get_table(nodossier[3:5])
|
||||
no_id = nodossier[6:]
|
||||
query = """
|
||||
SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM %s d
|
||||
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
|
||||
INNER JOIN p_cabinet a ON d.societe = a.societe and d.cabinet = a.code
|
||||
INNER JOIN p_experts e ON d.societe = e.societe and d.cabinet = e.code_cab and d.expert = e.code_exp
|
||||
where d.societe = '%s' and d.no_id=%s;""" % (table, societe, no_id);
|
||||
results = request.dbsession.execute(query).first()
|
||||
return results
|
||||
|
||||
def get_dossier_rdv_by_no(request,nodossier, nolig):
|
||||
societe = nodossier[0:2]
|
||||
table = get_table_details(nodossier[3:5])
|
||||
no_id = nodossier[6:]
|
||||
if nolig == '0':
|
||||
query = "SELECT * FROM %s where societe = '%s' and no_id=%s;" % (table, societe, no_id)
|
||||
results = request.dbsession.execute(query).fetchall()
|
||||
else:
|
||||
query = "SELECT * FROM %s where societe = '%s' and no_id=%s and nolig=%s;" % (table, societe, no_id, nolig)
|
||||
results = request.dbsession.execute(query).first()
|
||||
return results
|
||||
|
||||
def get_rendez_vous(request, itc):
|
||||
d = datetime.now()
|
||||
d = d - dateutil.relativedelta.relativedelta(months=3)
|
||||
# début du mois M-2
|
||||
datedeb = d.strftime('%Y-%m-01')
|
||||
|
||||
# lire les rdv de l'ITC
|
||||
query = """
|
||||
(SELECT CONCAT(l.societe,"-OS-",l.no_id) as nodossier, l.rdv_debut, l.rdv_fin, e.c_nom FROM ordres_lig l
|
||||
INNER JOIN ordres e ON l.societe=e.societe AND l.no_id=e.no_id
|
||||
WHERE l.datevi >= :datedeb AND l.liste=:itc ORDER BY l.datevi, l.heurevi)
|
||||
UNION
|
||||
(SELECT CONCAT(l.societe,"-DD-",l.no_id) as nodossier, l.rdv_debut, l.rdv_fin, e.c_nom FROM dem_lig l
|
||||
INNER JOIN dem_devis e ON l.societe=e.societe AND l.no_id=e.no_id
|
||||
WHERE l.datevi >= :datedeb AND l.liste=:itc ORDER BY l.datevi, l.heurevi)
|
||||
UNION
|
||||
(SELECT CONCAT(l.societe,"-RD-",l.no_id) as nodossier, l.rdv_debut, l.rdv_fin, e.c_nom FROM rdvous_lig l
|
||||
INNER JOIN rdvous e ON l.societe=e.societe AND l.no_id=e.no_id
|
||||
WHERE l.datevi >= :datedeb AND l.liste=:itc ORDER BY l.datevi, l.heurevi);
|
||||
"""
|
||||
results = request.dbsession.execute(query, {'datedeb': datedeb, 'itc': itc}).fetchall()
|
||||
return results
|
||||
|
||||
def delete_rdv(request, nodossier, nolig):
|
||||
societe = nodossier[0:2]
|
||||
table = get_table_details(nodossier[3:5])
|
||||
no_id = nodossier[6:]
|
||||
|
||||
query = "DELETE FROM %s where societe = '%s' and no_id=%s and nolig=%s;" % (table, societe, no_id, nolig)
|
||||
execute_query(request, query, {})
|
||||
|
||||
def update_rdv(request, nodossier, nolig, comment, commentvi, date_rdv):
|
||||
societe = nodossier[0:2]
|
||||
table = get_table_details(nodossier[3:5])
|
||||
no_id = nodossier[6:]
|
||||
|
||||
# formater les champs
|
||||
ddate = datetime.strptime(date_rdv, '%d-%m-%Y %H:%M')
|
||||
datevi = ddate.strftime("%Y-%m-%d")
|
||||
heurevi = date_rdv[-5:]
|
||||
auj = date.today().strftime("%Y-%m-%d")
|
||||
|
||||
if nolig == '0':
|
||||
query = "INSERT INTO %s SET societe='%s',no_id=%s,date='%s',datevi='%s',heurevi='%s',comment='%s',commentvi='%s'" % (table, societe, no_id,auj,datevi, heurevi, comment, commentvi)
|
||||
else:
|
||||
query = "UPDATE %s SET datevi='%s', heurevi='%s', comment='%s', commentvi='%s' where societe = '%s' and no_id=%s and nolig=%s;" % (table, datevi, heurevi, comment, commentvi, societe, no_id, nolig)
|
||||
|
||||
execute_query(request, query, {})
|
||||
|
||||
83
caotek_mesavoirs/models/default.py
Normal file
83
caotek_mesavoirs/models/default.py
Normal file
@@ -0,0 +1,83 @@
|
||||
# -*- 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_member_by_mdp_oublie(request, lien):
|
||||
query = "SELECT * FROM p_users WHERE mdp_oublie=:lien;"
|
||||
results = request.dbsession.execute(query, {'lien':lien}).first()
|
||||
return results
|
||||
|
||||
def get_member_by_id(request, mbr_id):
|
||||
if mbr_id == '0':
|
||||
query = "SELECT * FROM P_USERS ORDER BY cd_uti"
|
||||
results = request.dbsession.execute(query).fetchall()
|
||||
else:
|
||||
# lire le membres par son identifianr
|
||||
query = """SELECT * FROM p_users WHERE CD_UTI=:mbr_id;"""
|
||||
results = request.dbsession.execute(query, {'mbr_id': mbr_id}).first()
|
||||
return results
|
||||
|
||||
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 p_users SET mdp_oublie=:r_uuid, mdp_oublie_date=now() WHERE CD_UTI=: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 p_users SET mdp = SHA1(:password), mdp_oublie=NULL, mdp_oublie_date=NULL WHERE cd_uti=:login;"
|
||||
execute_query(request, query, {'login': login, 'password': password})
|
||||
|
||||
def update_last_connection(request, login):
|
||||
"""Update last connection for login """
|
||||
query = "UPDATE p_users SET dern_cnx_le=NOW() WHERE cd_uti=:login;"
|
||||
execute_query(request, query, {'login': login})
|
||||
|
||||
def update_membre(request, cd_uti, new_values):
|
||||
# formater les champs
|
||||
s = ''
|
||||
for param in new_values.keys():
|
||||
if param == 'nom':
|
||||
new_values['nom'] = new_values['nom'].upper()
|
||||
if param == 'access':
|
||||
' ne prend que le 1er caractère'
|
||||
new_values['access'] = new_values['access'][0]
|
||||
|
||||
if s:
|
||||
s += ",%s=:%s" % (param, param)
|
||||
else:
|
||||
s = "%s=:%s" % (param, param)
|
||||
|
||||
if cd_uti == '0':
|
||||
query = "INSERT INTO p_users SET %s" % s
|
||||
else:
|
||||
new_values['cd_uti'] = cd_uti
|
||||
query = "UPDATE p_users SET %s WHERE cd_uti = :cd_uti;" % s
|
||||
execute_query(request, query, new_values)
|
||||
|
||||
def delete_membre(request, cd_uti):
|
||||
query = "DELETE FROM p_users WHERE cd_uti = :cd_uti ;"
|
||||
execute_query(request, query, {'cd_uti': cd_uti})
|
||||
|
||||
Reference in New Issue
Block a user