# -*- 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_chantiers_byName(request, societe, name, tous): query = "CALL spGET_CHANTIERS_byName('%s','%s');" % (societe, name) results = request.dbsession.execute(query).fetchall() return results def get_dossier_by_no(request,nodossier): societe = nodossier[0:2] no_id = nodossier[3:] query = """ SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM dem_devis d INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli INNER JOIN p_cabinet a ON d.cabinet = a.code INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp where d.societe = '%s' and d.no_id=%s;""" % (societe, no_id); results = request.dbsession.execute(query).first() return results def get_devis_by_no(request,nodossier): societe = nodossier[0:2] type_doc = nodossier[3:5] no_id = nodossier[5:] if type_doc == 'DE': query = """ SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM devis d INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli INNER JOIN p_cabinet a ON d.cabinet = a.code INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp WHERE d.societe = :societe and d.no_id=:no_id;""" elif type_doc == 'FA': query = """ SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM facture d INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli INNER JOIN p_cabinet a ON d.cabinet = a.code INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp WHERE d.societe = :societe and d.no_id=:no_id;""" else: query = """ SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM proforma d INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli INNER JOIN p_cabinet a ON d.cabinet = a.code INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp WHERE d.societe = :societe and d.no_id=:no_id;""" results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first() return results def get_dossier_rdv_by_no(request,nodossier, nolig): societe = nodossier[0:2] no_id = nodossier[3:] if nolig == '0': query = "SELECT * FROM dem_lig WHERE societe = :societe AND no_id = :no_id;" results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall() else: query = """ SELECT l.*, d.C_QUALITE, d.C_NOM FROM dem_lig l INNER JOIN dem_devis d ON l.societe = d.societe and l.no_id = d.no_id where l.societe = '%s' and l.no_id=%s and l.nolig=%s;""" % (societe, no_id, nolig) results = request.dbsession.execute(query).first() return results def get_documents_byChantier(request,nodossier): societe = nodossier[0:2] no_id = nodossier[3:] query = "CALL spGET_DOSSIERS_byNumeo('%s',%s);" % (societe, no_id) results = request.dbsession.execute(query).fetchall() return results def update_suivi(request, nodossier, nolig, new_values): societe = nodossier[0:2] no_id = nodossier[3:] new_values['societe'] = societe new_values['NO_ID'] = no_id s = '' for param in new_values.keys(): if s: s += ",%s=:%s" % (param, param) else: s = "%s=:%s" % (param, param) if nolig == '0': query = "INSERT INTO dem_lig SET %s" % s else: new_values['nolig'] = nolig query = "UPDATE dem_lig SET %s WHERE societe = :societe AND NO_ID = :no_id AND NOLIG = :nolig ;" % s execute_query(request, query, new_values) def get_similaires_byChantier(request, societe, C_NOM, C_ADR, C_CP, C_VILLE): query = """ SELECT CONCAT(societe,'-',NO_ID) AS nodossier, dem_devis.* FROM dem_devis WHERE societe<>:societe AND C_NOM=:C_NOM AND C_ADR=:C_ADR AND C_CP=:C_CP AND C_VILLE=:C_VILLE;""" results = request.dbsession.execute(query, {'societe': societe, 'C_NOM': C_NOM, 'C_ADR': C_ADR, 'C_CP': C_CP, 'C_VILLE': C_VILLE}).fetchall() return results def get_devis_lig_by_no(request,nodossier): societe = nodossier[0:2] type_doc = nodossier[3:5] no_id = nodossier[5:] if type_doc == 'DE': query = "SELECT * FROM devis_lig WHERE societe = :societe and no_id=:no_id;" elif type_doc == 'FA': query = "SELECT * FROM facture_lig WHERE societe = :societe and no_id=:no_id;" else: query = "SELECT * FROM proforma_lig WHERE societe = :societe and no_id=:no_id;" results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall() return results def get_docs_attaches(request, nodossier, norapport, filename): societe = nodossier[0:2] nochantier = int(nodossier[3:]) if filename == '': query = "SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = :societe AND nochantier = :nochantier AND nodossier=0 ORDER BY cree_le;" else: query = """SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = :societe AND nochantier = :nochantier AND nodossier = :norapport AND nomfichier = :filename ORDER BY cree_le;""" results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'filename': filename}).fetchall() return results def get_photos(request, nochantier, norapport): query = "SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = 'PL' AND nochantier = :nochantier AND nodossier = :norapport ORDER BY cree_le;" results = request.dbsession.execute(query, {'nochantier': nochantier, 'norapport': norapport}).fetchall() return results def update_dossier(request, nodossier, new_values): societe = nodossier[0:2] nochantier = int(nodossier[3:]) s = '' for param in new_values.keys(): if s: s += ",%s=:%s" % (param, param) else: s = "%s=:%s" % (param, param) new_values['societe'] = societe new_values['nochantier'] = nochantier query = "UPDATE dem_devis SET %s WHERE societe=:societe AND no_id=:nochantier" % s execute_query(request, query, new_values) def insert_dossier_attaches(request, nodossier, norapport, filename, filesize, user): societe = nodossier[0:2] nochantier = int(nodossier[3:]) # fichier existe ? item = get_docs_attaches(request, nodossier, norapport, filename) if item: return # enregistrer dans la table dossier_attaches query = """INSERT INTO dossier_attaches (nomrep, societe, nochantier, nodossier, nomfichier, taillefichier, cree_le, usermaj) VALUES('DOCS_ATTACHES',:societe,:nochantier,:norapport,:filename,:filesize,NOW(),:user);""" execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'filename': filename, 'filesize': filesize, 'user': user}) def get_rapport_by_no(request,nodossier,date_inter): societe = nodossier[0:2] nochantier = nodossier[3:] if date_inter == '': query = "SELECT * FROM dem_rdf WHERE societe = :societe AND nochantier = :nochantier;" results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).fetchall() else: query = "SELECT * FROM dem_rdf WHERE societe = :societe AND nochantier = :nochantier AND date_inter=:date_inter;" results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'date_inter': date_inter}).first() return results def get_rapport_by_no_id(request,no_id): query = "SELECT * FROM dem_rdf WHERE no_id = :no_id;" results = request.dbsession.execute(query, {'no_id': no_id}).first() return results def get_rapport_rdf(request): # les rapports deRDF query = "SELECT * FROM dem_rdf;" results = request.dbsession.execute(query, ).fetchall() return results def insert_rapport(request,nodossier,logged_in): societe = nodossier[0:2] nochantier = nodossier[3:] query = """INSERT INTO dem_rdf (societe, nochantier, cd_cli, nomcli, c_qualite, c_nom, c_adr, c_adr2, c_cp, c_ville, c_tel1, c_telp, nosin, auteur_code) SELECT societe, no_id, cd_cli, nomcli, c_qualite, c_nom, c_adr, c_adr2, c_cp, c_ville, c_tel1, c_telp, nosin, :auteur_code FROM dem_devis WHERE societe = :societe AND no_id = :nochantier;""" execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'auteur_code': logged_in}) def get_rdf_causes(request, code): query = "SELECT libelle FROM rdf_causes where code LIKE :code;" results = request.dbsession.execute(query, {'code': code + '%'}).fetchall() return results def update_rapport(request, nodossier, date_inter, new_values): societe = nodossier[0:2] nochantier = int(nodossier[3:]) s = '' for param in new_values.keys(): if s: s += ",%s=:%s" % (param, param) else: s = "%s=:%s" % (param, param) new_values['societe'] = societe new_values['nochantier'] = nochantier new_values['date_inter'] = date_inter query = "UPDATE dem_rdf SET %s WHERE societe=:societe AND nochantier=:nochantier AND date_inter=:date_inter;" % s execute_query(request, query, new_values)