initial upload
This commit is contained in:
355
aem_gestion/models/crm.py
Normal file
355
aem_gestion/models/crm.py
Normal 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})
|
||||
|
||||
Reference in New Issue
Block a user