278 lines
12 KiB
Python
278 lines
12 KiB
Python
# -*- 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 delete_photos(request, nochantier, norapport, nomfic):
|
|
query = "DELETE FROM dossier_attaches WHERE nomrep='DOCS_ATTACHES' AND societe='PL' AND nochantier=:nochantier AND nodossier=:norapport AND nomfichier=:nomfic;"
|
|
execute_query(request, query, {'nochantier': nochantier, 'norapport': norapport, 'nomfic': nomfic})
|
|
|
|
|
|
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_articles_by_fam(request, fam):
|
|
query = "SELECT * FROM articles WHERE FAM = :fam;"
|
|
results = request.dbsession.execute(query, {'fam': fam}).fetchall()
|
|
return results
|
|
|
|
def get_rapport_rdf(request):
|
|
# les rapports de RDF encours (non encore facturés)
|
|
query = "SELECT * FROM dem_rdf where date_facture IS NULL;"
|
|
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)
|
|
|
|
def delete_rapport(request, no_id):
|
|
|
|
query = "DELETE FROM dem_rdf WHERE no_id = :no_id"
|
|
execute_query(request, query, {'no_id': no_id})
|
|
|
|
def validate_rapport(request, no_id):
|
|
query = "UPDATE dem_rdf SET date_relu=CURRENT_DATE WHERE no_id = :no_id"
|
|
execute_query(request, query, {'no_id': no_id})
|
|
|
|
def insert_facture_rdf(request, societe, nochantier, user, ref, date_rapport):
|
|
# créer une facture vierge à partir du dossier
|
|
query = "CALL spINS_FACTURE_RDF(:societe, :nochantier, :user, :ref, :date_rapport)"
|
|
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'user': user, 'ref': ref, 'date_rapport': date_rapport})
|
|
|
|
def insert_dossier(request, mbx_name, mbx_search, logged_in, c_nom, c_adr, c_adr2, c_cp, c_ville, c_tel1, nosin, c_obs, tx_trav):
|
|
# créer une dem_devis selon l'email de l'OS
|
|
societe = mbx_name[0:2].upper()
|
|
if 'maif.fr' in mbx_search:
|
|
cd_cli = 2813
|
|
cabinet = 290
|
|
elif 'domus-services.fr' in mbx_search:
|
|
cd_cli = 8991
|
|
cabinet = 289
|
|
|
|
query = """CALL spINS_DEMANDES(:societe, :cd_cli, :c_nom, :c_adr, :c_adr2, :c_cp, :c_ville, :c_tel1, 'MR', :cabinet, 6, :nosin, :c_obs, :tx_trav, :logged_in);"""
|
|
execute_query(request, query, {'societe': societe, 'cd_cli': cd_cli, 'c_nom': c_nom, 'c_adr': c_adr, 'c_adr2': c_adr2, 'c_cp': c_cp,
|
|
'c_ville': c_ville,'c_tel1': c_tel1, 'cabinet': cabinet, 'nosin': nosin, 'c_obs': c_obs, 'tx_trav': tx_trav, 'logged_in': logged_in})
|
|
|
|
query = "SELECT no_id FROM dem_devis WHERE societe = :societe AND date = curdate() AND cd_cli = :cd_cli ORDER BY no_id desc LIMIT 1;"
|
|
results = request.dbsession.execute(query, {'societe': societe, 'cd_cli': cd_cli}).first()
|
|
return results.no_id
|
|
|