""" Ce fichier est dedié à la gestion des contact de tout type Chaque ligne contriendra le nom de la collection du recid concerné ex : - id, - related_collection - relected_recid - type (standard, livraison, facturation, etc) - nom - email - telephone_fix - telephone_mobile - linkin, - facebook - adresse - code_postal - ville - pays """ import pymongo from pymongo import MongoClient import json from bson import ObjectId import re from datetime import datetime import prj_common as mycommon import secrets import inspect import sys, os import csv import pandas as pd from pymongo import ReturnDocument import GlobalVariable as MYSY_GV from math import isnan import GlobalVariable as MYSY_GV import ela_index_bdd_classes as eibdd import email_mgt as email import ast """ Ajout d'un contact """ def Add_Contact(diction): try: diction = mycommon.strip_dictionary(diction) """ Verification des input acceptés """ field_list = ['token', "raison_sociale", "nom", "siret", "tva", "email", "telephone", "website", "comment",'adr_adresse', 'adr_code_postal', 'adr_ville', 'adr_pays', 'type', 'telephone_mobile', 'linkedin', 'facebook', 'twitter', 'related_collection', 'related_collection_owner_email', 'prenom'] incom_keys = diction.keys() for val in incom_keys: if val not in field_list: mycommon.myprint(str( inspect.stack()[0][3]) + " Le champ '" + val + "' n'existe pas") return False, " Les informations fournies sont incorrectes", """ Verification des champs obligatoires """ field_list_obligatoire = ['token', "email", 'related_collection', 'related_collection_owner_email',] for val in field_list_obligatoire: if val not in diction: mycommon.myprint( str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans liste ") return False, " Les informations fournies sont incorrectes", """ Verification de l'identité et autorisation de l'entité qui appelle cette API """ token = "" if ("token" in diction.keys()): if diction['token']: token = diction['token'] # Verifier la validité du token retval = mycommon.check_partner_token_validity("", token) if retval is False: return "Err_Connexion", " La session de connexion n'est pas valide" partner_recid = mycommon.get_parnter_recid_from_token(token) if (partner_recid is False): mycommon.myprint( str(inspect.stack()[0][3]) + " - partner_recid est KO. Les données de connexion sont incorrectes ") return False, " Vous n'etes pas autorisé à utiliser cette API " # Recuperation des données du partenaire local_status, my_partner = mycommon.get_partner_data_from_recid(partner_recid) if (local_status is False): mycommon.myprint(str(inspect.stack()[0][3]) + " - impossible de recuperer les données du partenaire") return False, str(inspect.stack()[0][3]) + " - impossible de recuperer les données du partenaire. " """ Verification s'il n'existe pas un cient du partenaire qui porte la meme adresse email """ tmp_count = MYSY_GV.dbname['contact'].count_documents({'email': str(diction['email']), 'valide': '1', 'partner_recid': my_partner['recid']}) if (tmp_count > 0): mycommon.myprint( str(inspect.stack()[0][ 3]) + " - Il existe déjà un contact qui porte le même email principal = " +str(diction['email'])) return False, " - Vous avez déjà un contact qui a le même email principal " """ Recuperation des données fournies en entrée """ data = {} data['partner_recid'] = my_partner['recid'] raison_sociale = "" if ("raison_sociale" in diction.keys()): if diction['raison_sociale']: raison_sociale = diction['raison_sociale'] data['raison_sociale'] = diction['raison_sociale'] nom = "" if ("nom" in diction.keys()): if diction['nom']: nom = diction['nom'] data['nom'] = diction['nom'] siret = "" if ("siret" in diction.keys()): if diction['siret']: siret = diction['siret'] data['siret'] = diction['siret'] prenom = "" if ("prenom" in diction.keys()): if diction['prenom']: prenom = diction['prenom'] data['prenom'] = diction['prenom'] adr_adresse = "" if ("adr_adresse" in diction.keys()): if diction['adr_adresse']: adr_adresse = diction['adr_adresse'] data['adr_adresse'] = diction['adr_adresse'] adr_code_postal = "" if ("adr_code_postal" in diction.keys()): if diction['adr_code_postal']: adr_code_postal = diction['adr_code_postal'] data['adr_code_postal'] = diction['adr_code_postal'] adr_ville = "" if ("adr_ville" in diction.keys()): if diction['adr_ville']: adr_ville = diction['adr_ville'] data['adr_ville'] = diction['adr_ville'] adr_pays = "" if ("adr_pays" in diction.keys()): if diction['adr_pays']: adr_pays = diction['siret'] data['adr_pays'] = diction['adr_pays'] tva = "" if ("tva" in diction.keys()): if diction['tva']: tva = diction['tva'] data['tva'] = diction['tva'] email = "" if ("email" in diction.keys()): if diction['email']: email = diction['email'] data['email'] = diction['email'] if( mycommon.isEmailValide(email) is False): mycommon.myprint( str(inspect.stack()[0][ 3]) + " - L'adresse email "+str(email)+" n'est pas valide") return False, " - - L'adresse email "+str(email)+" n'est pas valide " telephone = "" if ("telephone" in diction.keys()): if diction['telephone']: telephone = diction['telephone'] data['telephone'] = diction['telephone'] telephone_mobile = "" if ("telephone_mobile" in diction.keys()): if diction['telephone_mobile']: telephone_mobile = diction['telephone_mobile'] data['telephone_mobile'] = diction['telephone_mobile'] website = "" if ("website" in diction.keys()): if diction['website']: website = diction['website'] data['website'] = diction['website'] comment = "" if ("comment" in diction.keys()): if diction['comment']: comment = diction['comment'] data['comment'] = diction['comment'] linkedin = "" if ("linkedin" in diction.keys()): if diction['linkedin']: linkedin = diction['linkedin'] data['linkedin'] = diction['linkedin'] facebook = "" if ("facebook" in diction.keys()): if diction['facebook']: facebook = diction['facebook'] data['facebook'] = diction['facebook'] twitter = "" if ("twitter" in diction.keys()): if diction['twitter']: twitter = diction['twitter'] data['twitter'] = diction['twitter'] type = "" if ("type" in diction.keys()): if diction['type']: type = diction['type'] data['type'] = diction['type'] if( type not in MYSY_GV.CONTACT_TYPE): mycommon.myprint( "- Le type de contact "+str(type)+" n'est pas autorisé") return False, "- Le type de contact "+str(type)+" n'est pas autorisé" related_collection = "" if ("related_collection" in diction.keys()): if diction['related_collection']: related_collection = diction['related_collection'] data['related_collection'] = diction['related_collection'] if (related_collection not in MYSY_GV.CONTACT_COLLECTION): mycommon.myprint( "- La collection " + str(related_collection) + " n'accepte pas de contact") return False, "- La collection " + str(related_collection) + " n'accepte pas de contact" if ("related_collection_owner_email" in diction.keys()): related_collection_owner_email = str(diction['related_collection_owner_email']) """ Recuperation du recid associé au related_collection_owner_email dans la collection : related_collection """ #print(" #### on cherche le recid du mail "+ str(related_collection_owner_email)+" dans la collection "+str(diction['related_collection'])+" ." ) local_tmp_val = MYSY_GV.dbname[str(diction['related_collection'])].find_one({'email':related_collection_owner_email}) if (local_tmp_val is None or "recid" not in local_tmp_val.keys()): mycommon.myprint( str(inspect.stack()[0][3]) + " - impossible de recuperer les données de "+ str(related_collection_owner_email)+" dans la collection "+str(diction['related_collection']) ) return False, str(inspect.stack()[0][3]) + " - impossible de recuperer les données de "+str(related_collection_owner_email)+" dans la collection "+str(diction['related_collection'])+" . " data['related_collection_recid'] = str(local_tmp_val['recid']) data['valide'] = '1' data['locked'] = '0' data['date_update'] = str(datetime.now()) # Creation du RecId data['recid'] = mycommon.create_user_recid() inserted_id = "" inserted_id = MYSY_GV.dbname['contact'].insert_one(data).inserted_id if (not inserted_id): mycommon.myprint( " Impossible de créer le contact ") return False, " Impossible de créer le contact " return True, " Le contact a été correctement créé" except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno)) return False, " Impossible d'ajouter le contact " """ Mise à jour d'un contact en se basant sur : - token (partner_recid) - email - related_collection """ def Update_Contact(diction): try: diction = mycommon.strip_dictionary(diction) """ Verification des input acceptés """ field_list = ['token', "raison_sociale", "nom", "siret", "tva", "email", "telephone", "website", "comment",'adr_adresse', 'adr_code_postal', 'adr_ville', 'adr_pays', 'type', 'telephone_mobile', 'linkedin', 'facebook', 'twitter', 'related_collection_recid', 'related_collection_recid', ] incom_keys = diction.keys() for val in incom_keys: if val not in field_list: mycommon.myprint(str( inspect.stack()[0][3]) + " Le champ '" + val + "' n'existe pas") return False, " Les informations fournies sont incorrectes", """ Verification des champs obligatoires """ field_list_obligatoire = ['token', "email", 'related_collection', ] for val in field_list_obligatoire: if val not in diction: mycommon.myprint( str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans liste ") return False, " Les informations fournies sont incorrectes", """ Verification de l'identité et autorisation de l'entité qui appelle cette API """ token = "" if ("token" in diction.keys()): if diction['token']: token = diction['token'] # Verifier la validité du token retval = mycommon.check_partner_token_validity("", token) if retval is False: return "Err_Connexion", " La session de connexion n'est pas valide" partner_recid = mycommon.get_parnter_recid_from_token(token) if (partner_recid is False): mycommon.myprint( str(inspect.stack()[0][3]) + " - partner_recid est KO. Les données de connexion sont incorrectes ") return False, " Vous n'etes pas autorisé à utiliser cette API " # Recuperation des données du partenaire local_status, my_partner = mycommon.get_partner_data_from_recid(partner_recid) if (local_status is False): mycommon.myprint(str(inspect.stack()[0][3]) + " - impossible de recuperer les données du partenaire") return False, str(inspect.stack()[0][3]) + " - impossible de recuperer les données du partenaire. " """ Verification s'il n'existe pas un cient du partenaire qui perte le meme nom, ou la meme adresse email """ qry_update = {'email': str(diction['email']), 'valide': '1', 'partner_recid': str(my_partner['recid']), 'related_collection':str(diction['related_collection'])} print(" ### qry_update = ", qry_update) tmp_count = MYSY_GV.dbname['contact'].count_documents(qry_update) if (tmp_count <= 0): mycommon.myprint( str(inspect.stack()[0][ 3]) + " - Ce contact n'existe pas: nom = "+str(diction['nom'])) return False, " - Ce contact n'existe pas, mise à jour impossible " """ Recuperation des données fournies en entrée """ data_update = {} """ Recuperation des données fournies en entrée """ raison_sociale = "" if ("raison_sociale" in diction.keys()): raison_sociale = diction['raison_sociale'] data_update['raison_sociale'] = diction['raison_sociale'] nom = "" if ("nom" in diction.keys()): nom = diction['nom'] # data_update['nom'] = diction['nom'] - on ne modifie pas le nom siret = "" if ("siret" in diction.keys()): siret = diction['siret'] data_update['siret'] = diction['siret'] adr_adresse = "" if ("adr_adresse" in diction.keys()): adr_adresse = diction['adr_adresse'] data_update['adr_adresse'] = diction['adr_adresse'] adr_code_postal = "" if ("adr_code_postal" in diction.keys()): adr_code_postal = diction['adr_code_postal'] data_update['adr_code_postal'] = diction['adr_code_postal'] adr_ville = "" if ("adr_ville" in diction.keys()): adr_ville = diction['adr_ville'] data_update['adr_ville'] = diction['adr_ville'] adr_pays = "" if ("adr_pays" in diction.keys()): adr_pays = diction['adr_pays'] data_update['adr_pays'] = diction['adr_pays'] tva = "" if ("tva" in diction.keys()): tva = diction['tva'] data_update['tva'] = diction['tva'] telephone = "" if ("telephone" in diction.keys()): telephone = diction['telephone'] data_update['telephone'] = diction['telephone'] email = "" if ("email" in diction.keys()): email = diction['email'] # data_update['email'] = diction['email'] - on ne modifie pas le mail telephone_mobile = "" if ("telephone_mobile" in diction.keys()): telephone_mobile = diction['telephone_mobile'] data_update['telephone_mobile'] = diction['telephone_mobile'] website = "" if ("website" in diction.keys()): website = diction['website'] data_update['website'] = diction['website'] comment = "" if ("comment" in diction.keys()): comment = diction['comment'] data_update['comment'] = diction['comment'] linkedin = "" if ("linkedin" in diction.keys()): linkedin = diction['linkedin'] data_update['linkedin'] = diction['linkedin'] facebook = "" if ("facebook" in diction.keys()): facebook = diction['facebook'] data_update['facebook'] = diction['facebook'] twitter = "" if ("twitter" in diction.keys()): twitter = diction['twitter'] data_update['twitter'] = diction['twitter'] type = "" if ("type" in diction.keys()): type = diction['type'] data_update['type'] = diction['type'] if (type not in MYSY_GV.CONTACT_TYPE): mycommon.myprint( "- Le type de contact " + str(type) + " n'est pas autorisé") return False, "- Le type de contact " + str(type) + " n'est pas autorisé" data_update['valide'] = '1' data_update['locked'] = '0' data_update['date_update'] = str(datetime.now()) """ Clés de mise à jour """ data_cle = {} data_cle['partner_recid'] = str(my_partner['recid']) data_cle['email'] = str(diction['email']) data_cle['nom'] = str(diction['nom']) data_cle['valide'] = "1" data_cle['locked'] = "0" inserted_id = "" result = MYSY_GV.dbname['contact'].find_one_and_update( data_cle, {"$set": data_update}, upsert=False, return_document=ReturnDocument.AFTER ) if ("_id" not in result.keys()): mycommon.myprint( " Impossible de mettre à jour le contact : email = " + str(diction['email'])) return False, " Impossible de mettre à jour le client " return True, " Le contact a été correctement mis à jour" except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno)) return False, " Impossible de mettre à jour le contact " """ Recuperation de la liste des contacts d'une entité en se basant sur - related_collection - token (partner_recid) - related_collection_owner_email (s'il est fourni) alog : on va aller chercher le recid du related_collection_owner_email dans la collection concerné """ def Get_List_Entity_Contact(diction): try: diction = mycommon.strip_dictionary(diction) """ Verification des input acceptés """ field_list = ['token', 'related_collection', 'related_collection_owner_email'] incom_keys = diction.keys() for val in incom_keys: if val not in field_list: mycommon.myprint(str( inspect.stack()[0][3]) + " Le champ '" + val + "' n'existe pas") return False, " Les informations fournies sont incorrectes", """ Verification des champs obligatoires """ field_list_obligatoire = ['token', 'related_collection'] for val in field_list_obligatoire: if val not in diction: mycommon.myprint( str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans liste ") return False, " Les informations fournies sont incorrectes", """ Verification de l'identité et autorisation de l'entité qui appelle cette API """ token = "" if ("token" in diction.keys()): if diction['token']: token = diction['token'] # Verifier la validité du token retval = mycommon.check_partner_token_validity("", token) if retval is False: return "Err_Connexion", " La session de connexion n'est pas valide" # Recuperation des données du partenaire local_status, my_partner = mycommon.get_partner_data_from_token(token) if (local_status is False): mycommon.myprint(str(inspect.stack()[0][3]) + " - impossible de recuperer les données de l'utilisateur ") return False, str(inspect.stack()[0][3]) + " - impossible de recuperer les données de l'utilisateur. " """ Clés de mise à jour """ data_cle = {} data_cle['partner_recid'] = str(my_partner['recid']) data_cle['related_collection'] = str(diction['related_collection']) if ("related_collection_owner_email" in diction.keys()): related_collection_owner_email = str(diction['related_collection_owner_email']) """ Recuperation du recid associé au related_collection_owner_email dans la collection : related_collection """ print(" #### on cherche le recid du mail "+ str(related_collection_owner_email)+" dans la collection "+str(diction['related_collection'])+" ." ) local_tmp_val = MYSY_GV.dbname[str(diction['related_collection'])].find_one({'email':related_collection_owner_email}) print(" #### local_tmp_val = ", local_tmp_val) if (local_tmp_val is None or "recid" not in local_tmp_val.keys()): mycommon.myprint( str(inspect.stack()[0][3]) + " - impossible de recuperer les données de "+ str(related_collection_owner_email)+" dans la collection "+str(diction['related_collection']) ) return False, str(inspect.stack()[0][3]) + " - impossible de recuperer les données de "+str(related_collection_owner_email)+" dans la collection "+str(diction['related_collection'])+" . " data_cle['related_collection_recid'] = str(local_tmp_val['recid']) data_cle['locked'] = "0" RetObject = [] val_tmp = 1 for retval in MYSY_GV.dbname['contact'].find(data_cle): user = retval user['id'] = str(val_tmp) val_tmp = val_tmp + 1 RetObject.append(mycommon.JSONEncoder().encode(user)) return True, RetObject except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno)) return False, " Impossible de recuperer la liste des contact " """ Recuperation d'un contact donnée en se basant sur on token, email, related_collection, related_collection_recid """ def Get_Given_Contact(diction): try: diction = mycommon.strip_dictionary(diction) """ Verification des input acceptés """ field_list = ['token', 'email', 'related_collection', 'related_collection_owner_email'] incom_keys = diction.keys() for val in incom_keys: if val not in field_list: mycommon.myprint(str( inspect.stack()[0][3]) + " Le champ '" + val + "' n'existe pas") return False, " Les informations fournies sont incorrectes", """ Verification des champs obligatoires """ field_list_obligatoire = ['token', 'email', 'related_collection', 'related_collection_owner_email'] for val in field_list_obligatoire: if val not in diction: mycommon.myprint( str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans liste ") return False, " Les informations fournies sont incorrectes", """ Verification de l'identité et autorisation de l'entité qui appelle cette API """ token = "" if ("token" in diction.keys()): if diction['token']: token = diction['token'] # Verifier la validité du token retval = mycommon.check_partner_token_validity("", token) if retval is False: return "Err_Connexion", " La session de connexion n'est pas valide" # Recuperation des données du partenaire local_status, my_partner = mycommon.get_partner_data_from_token(token) if (local_status is False): mycommon.myprint(str(inspect.stack()[0][3]) + " - impossible de recuperer les données de l'utilisateur ") return False, str(inspect.stack()[0][3]) + " - impossible de recuperer les données de l'utilisateur. " # Recuperation du recid du related_collection_owner_email related_collection_owner_data = MYSY_GV.dbname[str(diction['related_collection'])].find_one({'email':str(diction['related_collection_owner_email']), 'valide':'1', 'locked':'0'}) if( related_collection_owner_data is None or 'recid' not in related_collection_owner_data.keys()): mycommon.myprint(str(inspect.stack()[0][3]) + " - related_collection_owner_email inconnu ") return False, str(inspect.stack()[0][3]) + " - related_collection_owner_email inconnu " """ Clés de mise à jour """ data_cle = {} data_cle['partner_recid'] = str(my_partner['recid']) data_cle['email'] = str(diction['email']) data_cle['related_collection'] = str(diction['related_collection']) data_cle['related_collection_recid'] = str(related_collection_owner_data['recid']) data_cle['valide'] = "1" data_cle['locked'] = "0" RetObject = [] val_tmp = 1 print(" ### data_cle = ", data_cle) for retval in MYSY_GV.dbname['contact'].find(data_cle): user = retval user['id'] = str(val_tmp) val_tmp = val_tmp + 1 RetObject.append(mycommon.JSONEncoder().encode(user)) print(" ### RetObject = ", RetObject) return True, RetObject except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno)) return False, " Impossible de recuperer le contact "