initial upload

This commit is contained in:
2023-06-22 10:34:18 +02:00
parent 6df897b44d
commit 5c621cf669
1030 changed files with 355394 additions and 49 deletions

355
aem_gestion/models/crm.py Normal file
View File

@@ -0,0 +1,355 @@
# -*- 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
from .default import (
execute_query,
)
def to_int(x):
try:
number = int(x.replace(',', '.'))
return number
except ValueError:
return 0
def get_contacts(request, agence):
query = """
SELECT cd_prospect, cree_le, civilite, nomprenom,permis_demande, a_relancer_le, tel_portable, date_relance1, date_relance2, date_relance3, statut, prochain_rdv_le
FROM prospects WHERE agence = :agence and cloture_le IS NULL ORDER BY nomprenom
"""
results = request.dbsession.execute(query, {'agence': agence}).fetchall()
return results
def get_prospects_by_name(request, name, tous):
if tous == False:
encours = 'and cloture_le IS NULL'
else:
encours = ""
if to_int(name) > 0:
if len(name) == 6:
# lire le contact par son code
query = "SELECT * FROM prospects WHERE cd_prospect=:name %s;" % encours
results = request.dbsession.execute(query, {'name': name}).fetchall()
else:
# lire le contact par son no mobile
query = "SELECT * FROM prospects WHERE tel_portable=:name;"
results = request.dbsession.execute(query, {'name': name}).fetchall()
else:
# lire le contact par son nom
query = "SELECT * FROM prospects WHERE nomprenom like :name %s ORDER BY nomprenom;" % encours
results = request.dbsession.execute(query, {'name': name + "%"}).fetchall()
return results
def get_prospects_by_code(request, code):
# lire le contact par son code
query = """SELECT * FROM prospects e WHERE e.cd_prospect=:code;"""
results = request.dbsession.execute(query, {'code': code}).first()
return results
def get_devis_cpf(request, no_devis):
# lire le devis CPF par son numéro
query = """SELECT * FROM devis_cpf WHERE no_devis=:no_devis;"""
results = request.dbsession.execute(query, {'no_devis': no_devis}).first()
return results
def get_devis_cpf_by_nodossier(request, no_dossier, no_devis):
# lire le devis CPF par son numéro
query = """SELECT * FROM devis_cpf WHERE no_dossier=:no_dossier AND no_devis <> :no_devis;"""
results = request.dbsession.execute(query, {'no_dossier': no_dossier, 'no_devis': no_devis}).first()
return results
def get_devis(request, no_devis):
# lire le devis par son numéro
query = """SELECT * FROM devis WHERE no_devis=:no_devis;"""
results = request.dbsession.execute(query, {'no_devis': no_devis}).first()
return results
def get_devis_by_prospect(request, code):
# lire les devis par le code prospect
query = """SELECT * FROM devis WHERE cd_prospect=:code;"""
results = request.dbsession.execute(query, {'code': code}).fetchall()
return results
def get_devis_cpf_by_prospect(request, code):
# lire les devis_cpf par le code prospect
query = """SELECT * FROM devis_cpf WHERE cd_prospect=:code;"""
results = request.dbsession.execute(query, {'code': code}).fetchall()
return results
def get_prospects_rdv_byDate(request, agence, datedeb, datefin):
# lire les rdv prospects
query = """
SELECT r.*, COALESCE(p.statut, '') as p_statut FROM prospects_rdv r LEFT JOIN prospects p ON r.cd_prospect = p.cd_prospect
WHERE r.agence = :agence AND DATE(debut_rdv) >= :datedeb AND DATE(debut_rdv) <= :datefin;
"""
results = request.dbsession.execute(query, {'agence': agence, 'datedeb': datedeb, 'datefin': datefin}).fetchall()
return results
def get_prospects_rdv_byRelance(request, agence, datedeb, datefin):
# lire les rdv prospects
query = "SELECT * FROM prospects WHERE statut='En-cours' AND agence = :agence AND STR_TO_DATE(a_relancer_le,'%d/%m/%Y') >= :datedeb AND STR_TO_DATE(a_relancer_le,'%d/%m/%Y') <= :datefin;"
results = request.dbsession.execute(query, {'agence': agence, 'datedeb': datedeb, 'datefin': datefin}).fetchall()
return results
def update_contacts_rdv(request, no_ligne, type, cd_prospect, debut, fin, resultat, statut, objet, notes, contact, option, agence, cd_uti):
query = "CALL spUPD_PROSPECTS_RDV(:no_ligne, :type, :cd_prospect, :debut, :fin, :resultat, :statut, :objet, :notes, :contact, :option, :agence, :cd_uti);"
execute_query(request, query, {'no_ligne':no_ligne, 'type':type, 'cd_prospect':cd_prospect, 'debut':debut, 'fin':fin, 'resultat':resultat,
'statut':statut, 'objet':objet, 'notes':notes, 'contact':contact, 'option':option, 'agence':agence, 'cd_uti':cd_uti})
def get_prospects_rdv_by_noligne(request, no_ligne):
# lire le rdv B
query = "SELECT * FROM prospects_rdv WHERE no_ligne = :no_ligne;"
results = request.dbsession.execute(query, {'no_ligne': no_ligne}).first()
return results
def get_prospects_rdv_byCode(request, type, cd_prospect):
# lire le rdv d'un prospect ou d'un client
query = "SELECT * FROM prospects_rdv WHERE type_code = :type AND cd_prospect = :cd_prospect;"
results = request.dbsession.execute(query, {'type': type, 'cd_prospect': cd_prospect}).fetchall()
return results
def get_prospects_rdv_byContact(request, type, cd_prospect, no_ligne):
# lire les rdv du prospect
query = "CALL spGet_PROSPECTS_RDV_byPROSPECT(:type, :cd_prospect, :no_ligne)"
results = request.dbsession.execute(query, {'type': type, 'cd_prospect': cd_prospect, 'no_ligne': no_ligne}).fetchall()
return results
def get_statuts(request):
query = "CALL spGet_P_TABLES_byCODE('P_STATUTS', 0);"
results = request.dbsession.execute(query).fetchall()
return results
def delete_contacts_rdv(request, no_ligne):
"""supprimer un rendez-vous"""
query = "delete from prospects_rdv where no_ligne = :no_ligne;"
execute_query(request, query, {'no_ligne': no_ligne})
def get_types_contact(request):
# lire les types de contacts
query = "SELECT * FROM p_types_contact order by libelle;"
results = request.dbsession.execute(query).fetchall()
return results
def get_permis(request):
# lire les types de permis
query = "SELECT * FROM permis order by cat;"
results = request.dbsession.execute(query).fetchall()
return results
def get_origines(request):
# lire les p_origines
query = "SELECT * FROM p_origines order by libelle;"
results = request.dbsession.execute(query).fetchall()
return results
def get_decideurs(request):
# lire les p_types_decideur
query = "SELECT * FROM p_types_decideur order by libelle;"
results = request.dbsession.execute(query).fetchall()
return results
def get_financeurs(request):
# lire les p_types_financeur
query = "SELECT * FROM p_types_financeur order by libelle;"
results = request.dbsession.execute(query).fetchall()
return results
def get_prof_financeurs(request):
# lire les p_professions_financeur
query = "SELECT * FROM p_professions_financeur order by libelle;"
results = request.dbsession.execute(query).fetchall()
return results
def get_types_raison(request):
# lire les p_types_raison
query = "SELECT * FROM p_types_raison order by libelle;"
results = request.dbsession.execute(query).fetchall()
return results
def get_types_formation(request):
# lire les p_types_formation
query = "SELECT * FROM p_types_formation order by libelle;"
results = request.dbsession.execute(query).fetchall()
return results
def get_motifs_abandon(request):
# lire les p_motifs_abandon
query = "SELECT * FROM p_abandons order by libelle;"
results = request.dbsession.execute(query).fetchall()
return results
def update_prospect(request, cd_prospect, agence, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if param == 'nom':
new_values['nom'] = new_values['nom'].upper()
if param == 'prenom':
new_values['prenom'] = new_values['prenom'].upper()
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if cd_prospect == '0':
if 'tel_portable' not in new_values:
new_values['tel_portable'] = ''
if 'type_formation' not in new_values:
new_values['type_formation'] = 'NR'
if 'age' not in new_values:
new_values['age'] = 'NR'
if 'permis_demande' not in new_values:
new_values['permis_demande'] = 'NR'
new_values['agence'] = agence
query = "CALL spINS_PROSPECTS(0, :civilite, :nom, :prenom, :ville, :tel_portable, '', :permis_demande, :age, :agence);"
results = request.dbsession.execute(query, {'civilite':new_values['civilite'], 'nom':new_values['nom'], 'prenom':new_values['prenom'],
'ville':new_values['ville'], 'tel_portable':new_values['tel_portable'], 'permis_demande':new_values['permis_demande'],
'age':new_values['age'], 'agence':new_values['agence'],}).first()
cd_prospect = results.newcode
new_values['cd_prospect'] = cd_prospect
query = "UPDATE prospects SET %s WHERE cd_prospect = :cd_prospect;" % s
execute_query(request, query, new_values)
def delete_prospect(request, cd_prospect):
query = "DELETE FROM prospects WHERE cd_prospect = :cd_prospect ;"
execute_query(request, query, {'cd_prospect': cd_prospect})
def update_prospect_won(request, cd_prospect, cd_uti, agence):
query = "CALL spUPD_PROSPECTS_GAGNE(:cd_prospect, :cd_uti, :agence)"
execute_query(request, query, {'cd_prospect': cd_prospect, 'cd_uti': cd_uti, 'agence': agence})
def update_prospect_lost(request, cd_prospect, motif_abandon, cd_uti):
query = "CALL spUpd_PROSPECTS_PERDU(:cd_prospect, :motif_abandon, :cd_uti)"
execute_query(request, query, {'cd_prospect': cd_prospect, 'cd_uti': cd_uti, 'motif_abandon': motif_abandon})
def get_p_tva(request):
# lire les p_tva
query = "SELECT * FROM p_tva order by taux;"
results = request.dbsession.execute(query).fetchall()
return results
def update_devis_cpf(request, no_devis, code, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if no_devis == '0':
if code[:1] == 'P':
new_values['cd_prospect'] = code[1:]
new_values['cd_cli'] = 0
else:
new_values['cd_prospect'] = 0
new_values['cd_cli'] = code[1:]
query = """CALL spINS_DEVIS_CPF(:cd_prospect, :cd_cli, :type_devis, :montant_pec, :montant_ht, :nb_heures_pec, :no_dossier, :demande_le, :cd_uti);"""
execute_query(request, query, new_values)
else:
new_values['no_devis'] = no_devis
query = "UPDATE devis_cpf SET %s WHERE no_devis = :no_devis;" % s
execute_query(request, query, new_values)
def update_devis(request, no_devis, code, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if param == 'organisme':
new_values['organisme'] = new_values['organisme'].upper()
if param == 'ville_org':
new_values['ville_org'] = new_values['ville_org'].upper()
if param == 'entreprise':
new_values['entreprise'] = new_values['entreprise'].upper()
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if no_devis == '0':
if 'entreprise' not in new_values:
new_values['entreprise'] = ''
if 'adr2_org' not in new_values:
new_values['adr2_org'] = ''
if code[:1] == 'P':
new_values['cd_prospect'] = code[1:]
new_values['cd_cli'] = 0
else:
new_values['cd_prospect'] = 0
new_values['cd_cli'] = code[1:]
query = """CALL spINS_DEVIS(:cd_prospect, :cd_cli, :organisme, :entreprise, :adr_org, :adr2_org, :cp_org, :ville_org, :type_devis, :cd_uti);"""
execute_query(request, query, new_values)
else:
new_values['no_devis'] = no_devis
query = "UPDATE devis SET %s WHERE no_devis = :no_devis;" % s
execute_query(request, query, new_values)
def delete_type_devis(request, type_devis):
query = "DELETE FROM p_types_devis WHERE type_devis = :type_devis ;"
execute_query(request, query, {'type_devis': type_devis})
def update_devis_status(request, no_devis, statut):
query = "UPDATE devis SET statut = :statut WHERE no_devis = :no_devis ;"
execute_query(request, query, {'no_devis': no_devis, 'statut': statut})
def update_devis_cpf_status(request, no_devis, statut):
query = "UPDATE devis_cpf SET statut = :statut WHERE no_devis = :no_devis ;"
execute_query(request, query, {'no_devis': no_devis, 'statut': statut})
def cancel_devis(request, no_devis):
query = "UPDATE devis SET no_pec=NULL, date_pec=NULL, date_debut_pec=NULL, date_fin_pec=NULL WHERE no_devis = :no_devis;"
execute_query(request, query, {'no_devis': no_devis})
def get_prospect_suivi(request, cd_prospect, no_ligne):
if no_ligne == 0:
query = "SELECT * FROM prospects_suivi WHERE cd_prospect = :cd_prospect ORDER BY cree_le DESC;"
results = request.dbsession.execute(query, {'cd_prospect': cd_prospect}).fetchall()
else:
query = "SELECT * FROM prospects_suivi WHERE no_ligne = :no_ligne;"
results = request.dbsession.execute(query, {'no_ligne': no_ligne}).first()
return results
def insert_prospect_suivi(request, cd_prospect, infos, user):
query = "INSERT INTO prospects_suivi (cd_prospect, cd_uti, infos) VALUES (:cd_prospect, :user, :infos);"
execute_query(request, query, {'cd_prospect': cd_prospect, 'user': user, 'infos': infos})
def update_prospect_suivi(request, no_ligne, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if no_ligne == '0':
query = "INSERT INTO prospects_suivi SET %s" % s
else:
new_values['no_ligne'] = no_ligne
query = "UPDATE prospects_suivi SET %s WHERE no_ligne = :no_ligne;" % s
execute_query(request, query, new_values)
def delete_prospect_suivi(request, no_ligne):
query = "DELETE FROM prospects_suivi WHERE no_ligne = :no_ligne ;"
execute_query(request, query, {'no_ligne': no_ligne})