25/09/2023 - 12h40

master
cherif 2023-09-25 12:42:03 +02:00
parent 152afbf49d
commit 951d495b91
8 changed files with 3004 additions and 20 deletions

View File

@ -1,8 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="22/09/2023 - 12h53"> <list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="22/09/2023 - 18h53">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Inscription_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/Inscription_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Log/log_file.log" beforeDir="false" afterPath="$PROJECT_DIR$/Log/log_file.log" afterDir="false" />
<change beforePath="$PROJECT_DIR$/class_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/class_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ela_index_bdd_classes.py" beforeDir="false" afterPath="$PROJECT_DIR$/ela_index_bdd_classes.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/partner_client.py" beforeDir="false" afterPath="$PROJECT_DIR$/partner_client.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/partner_order.py" beforeDir="false" afterPath="$PROJECT_DIR$/partner_order.py" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -66,13 +73,6 @@
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1680804787304</updated> <updated>1680804787304</updated>
</task> </task>
<task id="LOCAL-00060" summary="06/08/23 - 23h">
<created>1691356503671</created>
<option name="number" value="00060" />
<option name="presentableId" value="LOCAL-00060" />
<option name="project" value="LOCAL" />
<updated>1691356503671</updated>
</task>
<task id="LOCAL-00061" summary="08/08/2023 - 16h"> <task id="LOCAL-00061" summary="08/08/2023 - 16h">
<created>1691504850587</created> <created>1691504850587</created>
<option name="number" value="00061" /> <option name="number" value="00061" />
@ -409,7 +409,14 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1695380023776</updated> <updated>1695380023776</updated>
</task> </task>
<option name="localTasksCounter" value="109" /> <task id="LOCAL-00109" summary="22/09/2023 - 18h53">
<created>1695401442385</created>
<option name="number" value="00109" />
<option name="presentableId" value="LOCAL-00109" />
<option name="project" value="LOCAL" />
<updated>1695401442386</updated>
</task>
<option name="localTasksCounter" value="110" />
<servers /> <servers />
</component> </component>
<component name="Vcs.Log.Tabs.Properties"> <component name="Vcs.Log.Tabs.Properties">
@ -424,7 +431,6 @@
</option> </option>
</component> </component>
<component name="VcsManagerConfiguration"> <component name="VcsManagerConfiguration">
<MESSAGE value="26/08/23 - 20h" />
<MESSAGE value="27/08/23 - 13h" /> <MESSAGE value="27/08/23 - 13h" />
<MESSAGE value="27/08/23 - 22h" /> <MESSAGE value="27/08/23 - 22h" />
<MESSAGE value="28/08/23 - 13h30" /> <MESSAGE value="28/08/23 - 13h30" />
@ -449,6 +455,7 @@
<MESSAGE value="15/09/2023 - 12h" /> <MESSAGE value="15/09/2023 - 12h" />
<MESSAGE value="15/09/2023 - 18h" /> <MESSAGE value="15/09/2023 - 18h" />
<MESSAGE value="22/09/2023 - 12h53" /> <MESSAGE value="22/09/2023 - 12h53" />
<option name="LAST_COMMIT_MESSAGE" value="22/09/2023 - 12h53" /> <MESSAGE value="22/09/2023 - 18h53" />
<option name="LAST_COMMIT_MESSAGE" value="22/09/2023 - 18h53" />
</component> </component>
</project> </project>

View File

@ -4623,7 +4623,7 @@ On y ajoute la formation concernée
""" """
def Get_Statgaire_List_Partner_with_filter(diction): def Get_Statgaire_List_Partner_with_filter(diction):
try: try:
field_list = ['token', 'class_internal_url', 'code_session', 'status', 'email', 'nom', 'class_title', 'code_session'] field_list = ['token', 'class_internal_url', 'code_session', 'status', 'email', 'nom', 'class_title', 'code_session','client_nom']
incom_keys = diction.keys() incom_keys = diction.keys()
for val in incom_keys: for val in incom_keys:
if val not in field_list: if val not in field_list:
@ -4709,7 +4709,28 @@ def Get_Statgaire_List_Partner_with_filter(diction):
filt_class_partner_recid = {'partner_owner_recid': str(partner_recid)} filt_class_partner_recid = {'partner_owner_recid': str(partner_recid)}
query = [{'$match':{ '$and' : [ filt_class_internal_url, filt_session_id, filt_email, filt_nom, {'partner_owner_recid':str(partner_recid)}] } },
# -----
filt_client_nom = {}
sub_filt_client_nom = {}
Lists_partner_client_id = []
if ("client_nom" in diction.keys()):
sub_filt_client_nom = {'nom': {'$regex': str(diction['client_nom']), "$options": "i"},
'partner_recid': str(partner_recid), 'valide': '1', 'locked': '0'}
# Recuperation des '_id' des clients dont le nom match en regexp
# print(" ### sub_filt_client_nom = ", sub_filt_client_nom)
for List_Client_Data in MYSY_GV.dbname['partner_client'].find(sub_filt_client_nom, {'_id': 1}):
Lists_partner_client_id.append(str(List_Client_Data['_id']))
filt_client_nom = {'client_rattachement_id': {'$in': Lists_partner_client_id, }}
# print(' ### filt_client_nom = ', filt_client_nom)
#----
query = [{'$match':{ '$and' : [ filt_class_internal_url, filt_session_id, filt_email, filt_nom, filt_client_nom, {'partner_owner_recid':str(partner_recid)}] } },
{'$lookup': {'$lookup':
{ {
'from': 'myclass', 'from': 'myclass',

File diff suppressed because it is too large Load Diff

View File

@ -3794,6 +3794,7 @@ Cette fonction supprime definitivement une formation.
/!\ : Une formation n'est supprimable que si : /!\ : Une formation n'est supprimable que si :
1 - Il n'y a aucune session à venir. toutes les sessions sont passée. 1 - Il n'y a aucune session à venir. toutes les sessions sont passée.
2 - Si il y a des sessions, alors impossible de la supprimer. Proposer plus tard la notion d'archivage 2 - Si il y a des sessions, alors impossible de la supprimer. Proposer plus tard la notion d'archivage
3 - Dans la suppression, aller supprimer les champs dans la collection "elaindex"
""" """
def delete_Class(diction): def delete_Class(diction):
try: try:
@ -3881,6 +3882,11 @@ def delete_Class(diction):
if( delete_doc.deleted_count > 0 ): if( delete_doc.deleted_count > 0 ):
return True, " La formation a été correctement supprimée" return True, " La formation a été correctement supprimée"
else: else:
# Une formation a été supprimer, maintenant il faut supprimer les champs associés dans la collection "elaindex"
qry_elaindex_to_delete = {"partner_owner_recid":str(my_partner['recid']), "id_formation":str(Myclass_Data['external_code'])}
MYSY_GV.dbname['elaindex'].delete_many(qry_elaindex_to_delete)
return True, " Aucune formation supprimée" return True, " Aucune formation supprimée"
except Exception as e: except Exception as e:
@ -3889,3 +3895,109 @@ def delete_Class(diction):
return False, " Impossible de supprimer la formation " return False, " Impossible de supprimer la formation "
"""
Cette fonction supprime definitivement une formation, en utilisant l'internal_url
/!\ : Une formation n'est supprimable que si :
1 - Il n'y a aucune session à venir. toutes les sessions sont passée.
2 - Si il y a des sessions, alors impossible de la supprimer. Proposer plus tard la notion d'archivage
3 - Dans la suppression, aller supprimer les champs dans la collection "elaindex"
"""
def delete_Class_by_internal_url(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', 'class_internal_url', ]
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', 'class_internal_url',]
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
local_status, my_partner = mycommon.Check_Connexion_And_Return_Partner_Data(diction)
if (local_status is not True):
return local_status, my_partner
# Verifier qu'une seule formation sera supprimée
Myclass_Data_count = MYSY_GV.dbname['myclass'].count_documents({'internal_url': str(diction['class_internal_url']),
'partner_owner_recid': str(my_partner['recid'])})
if( Myclass_Data_count <= 0 ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - La formation est invalide ")
return False, " La formation est invalide ",
if( Myclass_Data_count > 1 ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - L'identifiant fourni correspond à plusieurs formation. Suppression annulée ")
return False, " L'identifiant fourni correspond à plusieurs formation. Suppression annulée",
# Receprer le 'internal_url_"
Myclass_Data = MYSY_GV.dbname['myclass'].find_one({'internal_url': str(diction['class_internal_url']),
'partner_owner_recid':str(my_partner['recid'])})
if( Myclass_Data is None):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - La formation est invalide ")
return False, " La formation est invalide ",
# Verifier qu'il n'y a pas de session associée à cette formation
existe_Session_count = MYSY_GV.dbname['session_formation'].count_documents({'class_internal_url':str(Myclass_Data['internal_url']),
'partner_owner_recid':str(my_partner['recid']),
'valide':'1'})
if( existe_Session_count > 0 ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - La formation a "+str(existe_Session_count)+" session(s) valide(s). Suppression impossible")
return False, " La formation a "+str(existe_Session_count)+" session(s) valide(s). Suppression impossible"
delete_doc = MYSY_GV.dbname['myclass'].delete_many({'_id':ObjectId(str(Myclass_Data['_id'])),
'partner_owner_recid':str(my_partner['recid'])})
if( delete_doc.deleted_count > 0 ):
return True, " La formation a été correctement supprimée"
else:
# Une formation a été supprimer, maintenant il faut supprimer les champs associés dans la collection "elaindex"
qry_elaindex_to_delete = {"partner_owner_recid":str(my_partner['recid']), "id_formation":str(Myclass_Data['external_code'])}
MYSY_GV.dbname['elaindex'].delete_many(qry_elaindex_to_delete)
return True, " Aucune formation supprimée"
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 supprimer la formation "

View File

@ -206,7 +206,7 @@ Pour chaque mot clé,
1 - Ajouter le mot dans la collection "word_not_stem" pour eviter les effets de traduction 1 - Ajouter le mot dans la collection "word_not_stem" pour eviter les effets de traduction
2 - Ajouter les mot dans la collection "elaindex" avec une occurrence par defaut de 1000, source_field = 'keyword', moyanne = "1" 2 - Ajouter les mot dans la collection "elaindex" avec une occurrence par defaut de 1000, source_field = 'keyword', moyanne = "1"
""" """
def ela_index_class_key_word(external_code="", source_field = ""): def ela_index_class_key_word(external_code="", source_field = "", partner_owner_recid=""):
try: try:
if( str(external_code).strip() == "" or str(source_field).strip() == "" ): if( str(external_code).strip() == "" or str(source_field).strip() == "" ):
@ -233,7 +233,8 @@ def ela_index_class_key_word(external_code="", source_field = ""):
On supprimer les anciens mots indexé On supprimer les anciens mots indexé
""" """
MYSY_GV.dbname['elaindex'].delete_many({ 'source_field': 'keyword', MYSY_GV.dbname['elaindex'].delete_many({ 'source_field': 'keyword',
'id_formation': str(local_class['external_code'])}) 'id_formation': str(local_class['external_code']),
'partner_owner_recid':str(partner_owner_recid)})
MYSY_GV.dbname['word_not_stem'].delete_many({'id_formation': str(local_class['external_code'])}) MYSY_GV.dbname['word_not_stem'].delete_many({'id_formation': str(local_class['external_code'])})
@ -257,7 +258,8 @@ def ela_index_class_key_word(external_code="", source_field = ""):
# Ajouter les mot dans la collection "elaindex" avec une occurrence par defaut de 1000, source_field = 'keyword', moyanne = "1" # Ajouter les mot dans la collection "elaindex" avec une occurrence par defaut de 1000, source_field = 'keyword', moyanne = "1"
MYSY_GV.dbname['elaindex'].insert_one({'mots': str(val).strip().lower(), 'occurence': 1000, MYSY_GV.dbname['elaindex'].insert_one({'mots': str(val).strip().lower(), 'occurence': 1000,
'source_field':'keyword', 'moyenne':"1", 'source_field':'keyword', 'moyenne':"1",
'id_formation':str(local_class['external_code'])}) 'id_formation':str(local_class['external_code']),
'partner_owner_recid':str(partner_owner_recid)})

36
main.py
View File

@ -2132,7 +2132,7 @@ def RenseignementClass():
""" """
Cette API permet de supprimer une formation si elle n'a aucune session Cette API permet de supprimer une formation si elle n'a aucune session
de formation valide de formation valide. la fonction utilise l'_id
""" """
@app.route('/myclass/api/delete_Class/', methods=['POST','GET']) @app.route('/myclass/api/delete_Class/', methods=['POST','GET'])
@crossdomain(origin='*') @crossdomain(origin='*')
@ -2143,6 +2143,21 @@ def delete_Class():
localStatus, message= cm.delete_Class(payload) localStatus, message= cm.delete_Class(payload)
return jsonify(status=localStatus, message=message ) return jsonify(status=localStatus, message=message )
"""
Cette API permet de supprimer une formation si elle n'a aucune session
de formation valide. la fonction utilise l'internal_url
"""
@app.route('/myclass/api/delete_Class_by_internal_url/', methods=['POST','GET'])
@crossdomain(origin='*')
def delete_Class_by_internal_url():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### delete_Class_by_internal_url : payload = ",str(payload))
localStatus, message= cm.delete_Class_by_internal_url(payload)
return jsonify(status=localStatus, message=message )
""" """
API d'envoi de la liste d'emargement API d'envoi de la liste d'emargement
@ -3529,6 +3544,25 @@ def Get_Given_Partner_Client():
return jsonify(status=localStatus, message=message) return jsonify(status=localStatus, message=message)
"""
API de suppression d'un client
Avant il faut verifier :
1 - pas de stagiaire associé
2 - Pas de devis associé
3 - Pas de commande associé
"""
@app.route('/myclass/api/Delete_Given_Partner_Client/', methods=['POST','GET'])
@crossdomain(origin='*')
def Delete_Given_Partner_Client():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Delete_Given_Partner_Client : payload = ",payload)
localStatus, message = partner_client.Delete_Given_Partner_Client(payload)
return jsonify(status=localStatus, message=message)
""" """
API qui permet de modifier un contact donnée (nested list) d'un client de partenaire API qui permet de modifier un contact donnée (nested list) d'un client de partenaire
""" """

View File

@ -1061,4 +1061,103 @@ def Add_Partner_Client_mass(file=None, Folder=None, diction=None):
except Exception as e: except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info() exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno)) mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible d'importer les client en masse " return False, " Impossible d'importer les client en masse "
"""
Cette fonction supprime un client.
Avant il faut verifier :
1 - pas de stagiaire associé
2 - Pas de devis associé
3 - Pas de commande associé
"""
def Delete_Given_Partner_Client(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', '_id']
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','_id' ]
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']
local_status, my_partner = mycommon.Check_Connexion_And_Return_Partner_Data(diction)
if (local_status is not True):
return local_status, my_partner
# Verification de la validé du client
is_existe_client_count = MYSY_GV.dbname['partner_client'].count_documents({'_id':ObjectId(str(diction['_id'])), 'partner_recid':str(my_partner['recid'])})
if( is_existe_client_count <= 0 ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - Le client n'est pas valide ")
return False, " - Le client n'est pas valide ",
if (is_existe_client_count > 1 ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - Plusieurs clients ont le même identifiant. Suppression annulée")
return False, " - Plusieurs clients ont le même identifiant. Suppression annulée",
# Verifier qu'il n'y pas de stagiaire associé
is_Stagiaire_Count = MYSY_GV.dbname['inscription'].count_documents({'client_rattachement_id':str(diction['_id']),
'partner_owner_recid':str(my_partner['recid']),
'valide':'1'})
if( is_Stagiaire_Count > 0 ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - Le client a "+str(is_Stagiaire_Count)+" stagiaire(s) valide(s). Suppression annulée ")
return False, " - Le client a "+str(is_Stagiaire_Count)+" stagiaire(s) valide(s). Suppression annulée ",
# Verifier qu'il n'y pas de devis ou commande associé
is_devis_cmd_Count = MYSY_GV.dbname['partner_order_header'].count_documents(
{'order_header_client_id': str(diction['_id']),
'partner_owner_recid': str(my_partner['recid']),
'valide': '1'})
if (is_devis_cmd_Count > 0):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - Le client a " + str(
is_devis_cmd_Count) + " commande(s) ou devis valide(s). Suppression annulée ")
return False, " - Le client a " + str(
is_devis_cmd_Count) + " commande(s) ou devis valide(s). Suppression annulée"
# Supression à faire
MYSY_GV.dbname['partner_client'].delete_one({'_id':ObjectId(str(diction['_id'])), 'partner_recid':str(my_partner['recid'])})
return True, "La suppression du client a été correctement faite."
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 supprimer le client "

View File

@ -431,12 +431,25 @@ def Add_Partner_Order(diction):
""" """
### 1 - Creation de l'entete ### 1 - Creation de l'entete
"""
/!\ Update du 24/09/2023 :
Si on ne trouve pas une sequence propre au partenaire (partner_owner_recid), alors on va chercher
la sequence par defaut dont partner_owner_recid = 'default'
"""
# Rcuperation de la sequence de l'objet "lms_user_id" dans la collection : "mysy_sequence" # Rcuperation de la sequence de l'objet "partner_order_header" dans la collection : "mysy_sequence"
retval_sequence_order = MYSY_GV.dbname['mysy_sequence'].find_one({'related_mysy_object': 'partner_order_header', retval_sequence_order = MYSY_GV.dbname['mysy_sequence'].find_one({'related_mysy_object': 'partner_order_header',
'valide': '1', 'partner_owner_recid':str(my_partner['recid'])}) 'valide': '1', 'partner_owner_recid':str(my_partner['recid'])})
if (retval_sequence_order is None):
# Il n'y pas de sequence pour le partenaire, on va aller chercher la sequence par defaut
retval_sequence_order = MYSY_GV.dbname['mysy_sequence'].find_one(
{'related_mysy_object': 'partner_order_header',
'valide': '1', 'partner_owner_recid': 'default'})
if (retval_sequence_order is None or "current_val" not in retval_sequence_order.keys()): if (retval_sequence_order is None or "current_val" not in retval_sequence_order.keys()):
# Il n'y aucune sequence meme par defaut.
mycommon.myprint(" Impossible de récupérer la sequence 'retval_sequence_order' ") mycommon.myprint(" Impossible de récupérer la sequence 'retval_sequence_order' ")
return False, "Impossible de récupérer la sequence 'retval_sequence_order'", False return False, "Impossible de récupérer la sequence 'retval_sequence_order'", False
@ -904,12 +917,26 @@ def Add_Partner_Quotation(diction):
### 1 - Creation de l'entete ### 1 - Creation de l'entete
# Rcuperation de la sequence de l'objet "lms_user_id" dans la collection : "mysy_sequence" # Rcuperation de la sequence de l'objet "partner_quotation_header" dans la collection : "mysy_sequence"
"""
/!\ Update du 24/09/2023 :
Si on ne trouve pas une sequence propre au partenaire (partner_owner_recid), alors on va chercher
la sequence par defaut dont partner_owner_recid = 'default'
"""
retval_sequence_order = MYSY_GV.dbname['mysy_sequence'].find_one({'related_mysy_object': 'partner_quotation_header', retval_sequence_order = MYSY_GV.dbname['mysy_sequence'].find_one({'related_mysy_object': 'partner_quotation_header',
'valide': '1', 'partner_owner_recid': str( 'valide': '1', 'partner_owner_recid': str(
my_partner['recid'])}) my_partner['recid'])})
if( retval_sequence_order is None ):
# Il n'y pas de sequence pour le partenaire, on va aller chercher la sequence par defaut
retval_sequence_order = MYSY_GV.dbname['mysy_sequence'].find_one(
{'related_mysy_object': 'partner_quotation_header',
'valide': '1', 'partner_owner_recid': 'default'})
if (retval_sequence_order is None or "current_val" not in retval_sequence_order.keys()): if (retval_sequence_order is None or "current_val" not in retval_sequence_order.keys()):
# Il n'y a aucune sequence, meme par defaut.
mycommon.myprint(" Impossible de récupérer la sequence 'retval_sequence_order' ") mycommon.myprint(" Impossible de récupérer la sequence 'retval_sequence_order' ")
return False, "Impossible de récupérer la sequence 'retval_sequence_order'", False return False, "Impossible de récupérer la sequence 'retval_sequence_order'", False