# -*- 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_users_actifs(request,cd_uti): if cd_uti =='': query = "SELECT * FROM p_users WHERE agenda <> 0 ORDER BY NOM" results = request.dbsession.execute(query).fetchall() else: query = "SELECT * FROM p_users WHERE cd_uti = :cd_uti;" results = request.dbsession.execute(query, {'cd_uti': cd_uti}).first() 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, {})