# -*- 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 insert_log(request, proc, msg): query = "INSERT t_log_nuit (proc,msg) VALUES (:proc,:msg);" execute_query(request, query, {'proc': proc, 'msg' :msg}) def truncate_log(request): query = "TRUNCATE t_log_nuit;" execute_query(request, query, {}) def get_log(request): # lire les rappels non envoyés query = "SELECT * FROM t_log_nuit;" results = request.dbsession.execute(query, {}).fetchall() return results def get_email_rappels(request): # lire les rappels non envoyés query = """ SELECT r.*, e.c_qualite, e.c_nom, e.c_adr, e.c_adr2, e.c_ville, e.c_email, s.tel, s.nom as nom_societe FROM email_rappels r INNER JOIN dem_devis e ON r.societe = e.societe AND r.nochantier = e.no_id INNER JOIN p_societe s ON r.societe = s.societe WHERE ISNULL(envoye_le) ORDER BY no_id;""" results = request.dbsession.execute(query, {}).fetchall() return results def update_rappels(request): query = "CALL spUPD_RAPPELS();" execute_query(request, query, {}) def update_email_rappels(request, no_id): query = "UPDATE email_rappels SET envoye_le = NOW() WHERE no_id = :no_id;" execute_query(request, query, {'no_id': no_id}) def get_societes(request, societe): if societe == '0': query = "SELECT * FROM p_societe;" results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall() else: query = "SELECT * FROM p_societe WHERE societe = :societe;" results = request.dbsession.execute(query, {'societe': societe}).first() return results def chantierExiste(request,societe, no_id): query = "SELECT no_id FROM dem_devis WHERE societe = :societe and no_id = :no_id;" results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first() if results: return len(results) > 0 else: return False def get_all_chantiers(request,societe): query = "SELECT * FROM dem_devis WHERE societe = :societe;" results = request.dbsession.execute(query, {'societe': societe}).fetchall() return results def get_last_facture(request, societe, nochantier): query = "SELECT * FROM facture WHERE societe = :societe AND nochantier = :nochantier order by date DESC LIMIT 1;" results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).first() return results def get_last_devis(request, societe, nochantier): query = "SELECT * FROM devis WHERE societe = :societe AND nochantier = :nochantier order by date DESC LIMIT 1;" results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).first() return results def update_chantier_status(request, societe, no_id, status): query = "UPDATE dem_devis SET status = :status, DATEMAJ = DATEMAJ WHERE societe = :societe AND no_id = :no_id AND status <> :status;" execute_query(request, query, {'societe': societe, 'no_id': no_id, 'status': status})