From 2c42b09713080aadab1f6e897e28adf7d5d4deb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ch=C3=A9rifBALDE?= Date: Thu, 4 Aug 2022 19:32:36 +0200 Subject: [PATCH] d --- main.py | 15 +++++ partners.py | 178 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 191 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index 4f05f0f..2950f2d 100644 --- a/main.py +++ b/main.py @@ -1185,6 +1185,21 @@ def UpdateMetier(): +''' +Cette API effectue la migration d'un compte utilisateur +vers un compte pro (ou compte partenaire) +''' +@app.route('/myclass/api/UpgradetoPro/', methods=['GET','POST']) +@crossdomain(origin='*') +def UpgradetoPro(): + # On recupere le corps (payload) de la requete + payload = request.form.to_dict() + print(" ### payload = ", payload) + status, result = pa.UpgradetoPro(payload) + return jsonify(status=status, message=result) + + + if __name__ == '__main__': print(" debut api") context = SSL.Context(SSL.SSLv23_METHOD) diff --git a/partners.py b/partners.py index bc303b9..0707beb 100644 --- a/partners.py +++ b/partners.py @@ -58,13 +58,13 @@ def add_partner_account(diction): ''' field_list = ['nom', 'adr_street', 'adr_city', 'adr_zip', 'adr_country','link_linkedin','link_facebook','link_twitter', 'email','pwd', 'telephone','contact_nom','contact_prenom','contact_tel','contact_mail'] + incom_keys = diction.keys() for val in incom_keys: if val not in field_list: - mycommon.myprint(str(inspect.stack()[0][3]) + " - Creation partner account : Le champ '" + val + "' n'existe pas, Creation partenaire annulée") + mycommon.myprint(str(inspect.stack()[0][3]) + " - Creation partner account : Le champ '" + val + "' n'est pas autorisé, Creation partenaire annulée") return False, "Impossible de créer le partenaire" - ''' Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente, On controle que les champs obligatoires sont presents dans la liste @@ -732,3 +732,177 @@ def partner_login(diction): exc_type, exc_obj, exc_tb = sys.exc_info() mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno)) return False, " Impossible de recuperer la formation" + + +""" +Cette fonction upgrade un compte utilisateur vers +un compte PRO (aussi appelé compte partenaire). + +Ceci revient à créer un nouveau compte utilisateur. aini la personne en face +aura +- un compte utilisateur classique et +- un compte pro + +En suite on desactive le compte utilisateur classique et on maintient que le compte pro. + +Pour migrer un compte utilisateur classique vers un compte pro, voici ce qu'il faut faire : + +1 - recuperer les infos du contact . ici à partir du token de la personne connectée, on peut aller chercher ses info. +2 - recuperer les infos de la société +3 - recuperer les infos sur pack + +etape 1 : add_partner_account(diction) +etape 2 : Desactivation du compte utilisateur +""" +def UpgradetoPro(diction): + try: + field_list = ['token', 'nom', 'adr_street', 'adr_city', 'adr_zip', 'adr_country', 'link_linkedin', 'link_facebook', + 'link_twitter', 'email', 'pwd', 'telephone', 'contact_nom', 'contact_prenom', 'contact_tel', 'contact_mail'] + incom_keys = diction.keys() + for val in incom_keys: + if val not in field_list: + mycommon.myprint(str(inspect.stack()[0][ + 3]) + " - Creation partner account : Le champ '" + val + "' n'existe pas, UpgradetoPro annulée") + return False, "Impossible de créer le partenaire" + + ''' + Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente, + On controle que les champs obligatoires sont presents dans la liste + ''' + field_list_obligatoire = ['token', 'nom', 'adr_street', 'adr_city', 'adr_zip', 'adr_country', 'email', 'telephone'] + + 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, "Impossible de créer le partenaire" + + token = "" + new_diction = {} + user_recid = "None" + + if ("token" in diction.keys()): + if diction['token']: + token = diction['token'] + + + if ( len(str(token)) > 0 ): + retval = mycommon.check_token_validity("", token) + + if retval is False : + mycommon.myprint(str(inspect.stack()[0][3])+" - Le token n'est pas valide") + return False, "Le token n'est pas valide" + + # Recuperation du recid de l'utilisateur + user_recid = mycommon.get_user_recid_from_token(token) + if user_recid is False: + mycommon.myprint(str(inspect.stack()[0][3])+" - Impossible de recuperer le token de l'utilisateur") + return False, " Impossible de migrer vers le compte pro" + + + # Recuperation des paramettre du compe + if ("nom" in diction.keys()): + if diction['nom']: + new_diction['nom'] = diction['nom'] + + if ("adr_street" in diction.keys()): + if diction['adr_street']: + new_diction['adr_street'] = diction['adr_street'] + + if ("adr_city" in diction.keys()): + if diction['adr_city']: + new_diction['adr_city'] = diction['adr_city'] + + if ("adr_zip" in diction.keys()): + if diction['adr_zip']: + new_diction['adr_zip'] = diction['adr_zip'] + + if ("adr_country" in diction.keys()): + if diction['adr_country']: + new_diction['adr_country'] = diction['adr_country'] + + if ("link_linkedin" in diction.keys()): + if diction['link_linkedin']: + new_diction['link_linkedin'] = diction['link_linkedin'] + + if ("link_facebook" in diction.keys()): + if diction['link_facebook']: + new_diction['link_facebook'] = diction['link_facebook'] + + if ("link_twitter" in diction.keys()): + if diction['link_twitter']: + new_diction['link_twitter'] = diction['link_twitter'] + + if ("email" in diction.keys()): + if diction['email']: + new_diction['email'] = diction['email'] + + if ("telephone" in diction.keys()): + if diction['telephone']: + new_diction['telephone'] = diction['telephone'] + + ''' + Create default pwd for new account + ''' + new_diction['pwd'] = mycommon.create_token_urlsafe(); + + + ''' + Recuperation des information du contact. + Pour memo, le compte utilisateur qui fait cette migration devient automatiquement + le contact principal du compte pro. + ''' + coll_user_account = MYSY_GV.dbname['user_account'] + for x in coll_user_account.find({"recid": user_recid}): + if ("email" in x.keys()): + if x['email']: + new_diction['contact_mail'] = x['email'] + + if x['last_name']: + new_diction['contact_nom'] = x['last_name'] + + if x['surname']: + new_diction['contact_prenom'] = x['surname'] + + if x['mob_phone']: + new_diction['contact_tel'] = x['mob_phone'] + + print(" new_diction la = "+str(new_diction)) + + status, retval = add_partner_account(new_diction) + + if( status ): + ''' + La migration s'est bien passée. + Maintenant mettre le compte utilisateur : + - "migrated : 1" + - "migrated_mail_account" : le mail du compte pro associé + - "migration_date" : datetime.now() + + ''' + mydata = {} + mydata['migrated'] = "1" + mydata['migrated_date'] = str(datetime.now()) + mydata['migrated_mail_account'] = new_diction['email'] + ret_val = coll_user_account.find_one_and_update( + {"recid": user_recid}, + {"$set": mydata}, + return_document=ReturnDocument.AFTER ) + if (ret_val and ret_val['_id']): + mycommon.myprint( + str(inspect.stack()[0][3]) + " le compte recid "+str(user_recid)+" migré en compte pro "+str(mydata)) + + else: + mycommon.myprint(str(inspect.stack()[0][3]) + " impossible de migrer le user_account : " + str(user_recid)+" en compte pro") + return False, " Impossible de finaliser la migration vers le compte PRO : " + + + else: + return False, "Impossible de migrer le compte vers le compte pro" + + return True, "Le compte à été bien migré vers un compte pro" + + except Exception as e: + exc_type, exc_obj, exc_tb = sys.exc_info() + mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno)) + return False, " Impossible de migrer vers le compte pro"