27/06/26 - 18h

Signed-off-by: Cherif <cbalde@mysy-training.com>
master_Elyos_FI
Cherif 2026-06-27 19:45:17 +02:00
parent f9e34db291
commit f047239431
8 changed files with 25201 additions and 65 deletions

View File

@ -4,20 +4,15 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="21/06/26 - 22h">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="26/06/26 - 18h">
<change afterPath="$PROJECT_DIR$/Inscription_mgt_ORIG_2706.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/GlobalVariable.py" beforeDir="false" afterPath="$PROJECT_DIR$/GlobalVariable.py" 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$/Session_Formation.py" beforeDir="false" afterPath="$PROJECT_DIR$/Session_Formation.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/email_inscription_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/email_inscription_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/email_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/email_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/apprenant_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/apprenant_mgt.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_invoice.py" beforeDir="false" afterPath="$PROJECT_DIR$/partner_invoice.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/prj_common.py" beforeDir="false" afterPath="$PROJECT_DIR$/prj_common.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ressources_humaines.py" beforeDir="false" afterPath="$PROJECT_DIR$/ressources_humaines.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/tools_cherif/send_sms_ovh.py" beforeDir="false" afterPath="$PROJECT_DIR$/tools_cherif/send_sms_ovh.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/session_admission_fi.py" beforeDir="false" afterPath="$PROJECT_DIR$/session_admission_fi.py" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -56,21 +51,21 @@
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;Python.main.executor&quot;: &quot;Run&quot;,
&quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;git-widget-placeholder&quot;: &quot;master__Elyos__FI&quot;,
&quot;ignore.virus.scanning.warn.message&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;C:/Users/Cherif/Documents/myclass.com/Siteweb/Elyos_Ftion_Initiale/Ela_back/Back_Office_FI/tools_cherif&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;preferences.lookFeel&quot;
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"Python.main.executor": "Run",
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"git-widget-placeholder": "master__Elyos__FI",
"ignore.virus.scanning.warn.message": "true",
"last_opened_file_path": "C:/Users/Cherif/Documents/myclass.com/Siteweb/Elyos_Ftion_Initiale/Ela_back/Back_Office_FI",
"settings.editor.selected.configurable": "preferences.lookFeel"
}
}</component>
}]]></component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="C:\Users\Cherif\Documents\myclass.com\Siteweb\Elyos_Ftion_Initiale\Ela_back\Back_Office_FI\tools_cherif" />
<recent name="C:\Users\Cherif\Documents\myclass.com\Siteweb\Elyos_Ftion_Initiale\Ela_back\Back_Office_FI" />
<recent name="C:\Users\Cherif\Documents\myclass.com\Siteweb\Elyos_Ftion_Initiale\Ela_back\Back_Office_FI\tools_cherif" />
<recent name="C:\Users\billa\Documents\myclass.com\Siteweb\Production\Ela_back\Back_Office\tools_cherif" />
<recent name="C:\Users\billa\Documents\myclass.com\Siteweb\Production\Ela_back\Back_Office" />
</key>
@ -461,7 +456,7 @@
<option name="project" value="LOCAL" />
<updated>1747251650255</updated>
</task>
<option name="localTasksCounter" value="600" />
<option name="localTasksCounter" value="601" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
@ -503,7 +498,6 @@
</option>
</component>
<component name="VcsManagerConfiguration">
<MESSAGE value="08/05/2026 - 17h" />
<MESSAGE value="09/05/2025 - 20h30" />
<MESSAGE value="10/05/2026 - 12h30" />
<MESSAGE value="11/05/2026 -22h" />
@ -528,6 +522,7 @@
<MESSAGE value="08/06/2026 - 21h" />
<MESSAGE value="14/06/2026 - 12h" />
<MESSAGE value="21/06/26 - 22h" />
<option name="LAST_COMMIT_MESSAGE" value="21/06/26 - 22h" />
<MESSAGE value="26/06/26 - 18h" />
<option name="LAST_COMMIT_MESSAGE" value="26/06/26 - 18h" />
</component>
</project>

View File

@ -3467,9 +3467,13 @@ def SendPre_InscriptionEmail(diction):
if local_session[0]['employeur']:
data_mail['employeur'] = local_session[0]['employeur']
telephone = ""
if ("telephone" in local_session[0].keys()):
if local_session[0]['telephone']:
data_mail['telephone'] = local_session[0]['telephone']
telephone = local_session[0]['telephone']
data_mail['telephone'] = telephone
# 1 - Recuperation des données de la formation
local_class = MYSY_GV.dbname['myclass'].find({'internal_url': str(local_session[0]['class_internal_url']),
@ -3622,6 +3626,7 @@ def SendPre_InscriptionEmail(diction):
# Envoi de l'email de notification au formateur
local_status, local_message = email_session.Notification_partner_Pre_incription_mail(data_mail)
@ -7468,6 +7473,186 @@ def CancelAttendeeInscription(diction):
"""
Annuler les inscription_ID_ en mass
"""
def Cancel_Tab_Inscription(diction):
try:
"""
Verification de la liste des champs obligatoires
"""
field_list_obligatoire = ['token', 'tab_inscription_ids']
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 la liste des arguments ")
return False, " Les informations fournies ne sont pas correctes"
mytoken = ""
if ("token" in diction.keys()):
if diction['token']:
mytoken = diction['token']
local_status, my_partner = mycommon.Check_Connexion_And_Return_Partner_Data({'token':str(diction['token'])})
if (local_status is not True):
return local_status, my_partner
partner_recid = str(my_partner['recid'])
tab_inscription_ids_work = str(diction['tab_inscription_ids']).split(",")
tab_inscription_ids = []
tab_inscription_ids_ObjectId = []
for tmp in tab_inscription_ids_work:
if( tmp ):
tab_inscription_ids.append(str(tmp))
tab_inscription_ids_ObjectId.append(ObjectId(str(tmp)))
nb_annulation = 0
for tab_inscrption_id in tab_inscription_ids :
# 2 - Recuperation des données de l'inscription
local_inscription = MYSY_GV.dbname['inscription'].find({'_id': ObjectId(str(tab_inscrption_id)),
'partner_owner_recid': str(my_partner['recid']),
})
print(" ### III local_inscription = ", local_inscription)
if( local_inscription and "_id" in local_inscription[0].keys()):
nb_annulation = nb_annulation + 1
data_mail = {}
# 1 - Recuperation des données de la formation
print(" QRY class = ", {'_id': ObjectId(str(local_inscription[0]['class_id'])),
'partner_owner_recid': str(my_partner['recid']),})
local_class = MYSY_GV.dbname['myclass'].find_one({'_id': ObjectId(str(local_inscription[0]['class_id'])),
'partner_owner_recid': str(my_partner['recid']),}, {'title':1})
data_mail['title'] = local_class['title']
class_title = local_class['title']
lms_class_code = ""
if ("lms_class_code" in local_inscription[0].keys()):
if local_inscription[0]['lms_class_code']:
lms_class_code = local_inscription[0]['lms_class_code']
lms_user_id = ""
if ("lms_user_id" in local_inscription[0].keys()):
if local_inscription[0]['lms_user_id']:
lms_user_id = local_inscription[0]['lms_user_id']
nom = ""
if ("nom" in local_inscription[0].keys()):
if local_inscription[0]['nom']:
nom = local_inscription[0]['nom']
prenom = ""
if ("prenom" in local_inscription[0].keys()):
if local_inscription[0]['prenom']:
prenom = local_inscription[0]['prenom']
email = ""
if ("email" in local_inscription[0].keys()):
if local_inscription[0]['email']:
email = local_inscription[0]['email']
date_du = ""
if ("date_du" in local_inscription[0].keys()):
if local_inscription[0]['date_du']:
date_du = str(local_inscription[0]['date_du'])[0:10]
date_au = ""
if ("date_au" in local_inscription[0].keys()):
if local_inscription[0]['date_au']:
date_au = str(local_inscription[0]['date_au'])[0:10]
# Recuperation des données de la session
local_session = MYSY_GV.dbname['session_formation'].find_one(
{'_id': ObjectId(str(local_inscription[0]['session_id'])), 'partner_owner_recid': str(my_partner['recid']), })
if (local_session is None):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de récupérer les données de la session ")
return False, " Impossible de récupérer les données de la session "
# Annulation de l'inscription
now = str(datetime.now().strftime("%d/%m/%Y %H:%M:%S"))
ret_val2 = MYSY_GV.dbname['inscription'].find_one_and_update(
{'_id': ObjectId(str(tab_inscrption_id)),
'partner_owner_recid': str(my_partner['recid'])},
{"$set": {'status':'-1', 'inscription_refuse_date':now, 'date_update':now}},
return_document=ReturnDocument.AFTER,
upsert=False,
)
if( ret_val2 is None ):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible d'annuler l'inscription ")
return False, " Impossible d'annuler l'inscription "
"""
Verification s'il y a une inscription LMS, au quel cas, on l'annule aussi
"""
return_message = ""
if( lms_user_id.strip() != ""):
# Il a une inscription à une formation dans le LMS, il faut l'annuler
new_diction = {}
new_diction['token'] = str(diction['token'])
new_diction['user_lms_id'] = str(lms_user_id)
new_diction['course_code'] = str(lms_class_code)
local_status, local_message = mys_lms.Remove_User_From_LMS_Class(new_diction)
if (local_status is False):
mycommon.myprint(str(inspect.stack()[0][3]) + " - WARNING : Impossible de supprimer l'inscription dans le LMS pour "+str( diction['email']) )
return_message = "Impossible de supprimer l'inscription dans le LMS pour : "+str( diction['email'])
"""
13/12/2025 :
On n'envoit la notification d'annulation que la paramettre 'annulation_inscription_notification_email' est à 1
"""
local_insc_status, local_insc_retval = mycommon.Is_Partnair_Annulation_Inscription_Notification( {'token': diction['token']})
if (local_insc_status and local_insc_retval == "1"):
print(" ###OK on doit envoyer l'email d'annulation à l'apprenant = ")
email_data = {}
email_data['token'] = str(diction['token'])
email_data['nom'] = nom
email_data['prenom'] = prenom
email_data['email'] = email
email_data['date_du'] = date_du
email_data['date_au'] = date_au
email_data['title'] = class_title
email_data['partner_owner_recid'] = str(partner_recid)
local_status, local_message = email_session.incription_training_cancelled_mail(email_data)
if( local_status is False ):
mycommon.myprint(str(
inspect.stack()[0][3]) + " - WARNING : Impossible d'envoyer le mail de notification pour " + str(
diction['email']))
return_message = return_message + str(" Impossible d'envoyer le mail de notification pour : " + str(diction['email']))
if( return_message.strip() != ""):
return True, return_message
return True, "Annulation de "+str(nb_annulation)+" inscription(s)"
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
print(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, " Impossible d'annuler les inscriptions"
"""
Cette fonction refuse une inscription, met jour le motif de refus
et envoie un email au participants
@ -9977,7 +10162,7 @@ def Get_Statgaire_List_Partner_with_filter_OLD(diction):
], 'as': 'apprenant_collection'}}
]
#print("#### Get_Statgaire_List_Partner_with_filter laa 01 : query = ", query)
#print("#### Get_Statgaire_List_Partner_with_filter laa 02 : query = ", query)
RetObject = []
cpt = 0
for retVal in MYSY_GV.dbname['inscription'].aggregate(query):
@ -10556,15 +10741,15 @@ def Get_Statgaire_List_Partner_with_filter(diction):
{'$sort': {'_id': -1}},
{'$lookup':
{
'from': 'myclass',
'let': {'class_id': "$class_id", 'partner_owner_recid': '$partner_owner_recid'},
'from': 'session_formation',
'let': {'session_id': "$session_id", 'partner_owner_recid': '$partner_owner_recid'},
'pipeline': [
{'$match':
{'$expr':
{'$and':
[
{'$eq': ["$_id", {'$convert': {
'input': "$$class_id",
'input': "$$session_id",
'to': "objectId",
'onError': {'error': 'true'},
'onNull': {'isnull': 'true'}
@ -10577,30 +10762,15 @@ def Get_Statgaire_List_Partner_with_filter(diction):
}
}
},
{'$project': {"_id": 1, "order_header_ref_interne": 1, "external_code": 1,
"title": 1, "partner_owner_recid": 1, "valide": 1}
{'$project': {"_id": 1,'code_session':1, 'date_debut':1, 'date_fin':1, 'code_postal':1, 'prix_session':1, 'presentiel':1, 'distantiel':1,
'session_ondemande':1, "partner_owner_recid": 1, "valide": 1}
},
],
'as': 'myclass_collection'
}
},
{'$lookup':
{
'from': 'apprenant',
"let": {'apprenant_id': "$apprenant_id", 'partner_owner_recid': '$partner_owner_recid'},
'pipeline': [{'$match':
{'$expr': {'$and': [
{'$eq': ["$valide", "1"]},
{'$eq': ["$_id", {'$convert': {
'input': "$$apprenant_id",
'to': "objectId",
'onError': {'error': 'true'},
'onNull': {'isnull': 'true'}
}}]},
]}}},
], 'as': 'apprenant_collection'}}
]
print("#### Get_Statgaire_List_Partner_with_filter laa 01 : query = ", query)
@ -10947,6 +11117,520 @@ def Get_Statgaire_List_Partner_with_filter(diction):
return False, "Impossible de récupérer la liste des stagiaires"
def Get_Statgaire_List_Partner_with_filter_uptimized(diction):
try:
field_list = ['token', 'class_internal_url', 'code_session', 'status', 'email', 'nom',
'class_title', 'code_session', 'client_nom', 'client_rattachement_id',
'session_id', 'archive', 'invoiced']
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
mycommon.myprint(str(inspect.stack()[0][
3]) + " - Le champ '" + val + "' n'est pas autorisé, Creation partenaire annulée")
return False, "Toutes les informations fournies ne sont pas valables"
"""
Verification de la liste des champs obligatoires
"""
field_list_obligatoire = ['token']
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 la liste des arguments ")
return False, "Toutes les informations necessaires n'ont pas été fournies"
# Recuperation du recid du partner
mydata = {}
mytoken = ""
if ("token" in diction.keys()):
if diction['token']:
mytoken = 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
partner_recid = my_partner['recid']
"""
30/07/2024 - Pour la gestion du recyclage, recuperer les paramettres du partner dans la collection "base_partner_setup"
- recyclage_warning
- recyclage_warning_lead_time
"""
recyclage_warning = "0"
recyclage_warning_lead_time = "0"
partner_base_setup_recyclage_warning = MYSY_GV.dbname['base_partner_setup'].find_one(
{"config_name": 'recyclage_warning',
'valide': '1', 'locked': '0',
'partner_owner_recid': my_partner['recid']})
if (partner_base_setup_recyclage_warning and "config_value" in partner_base_setup_recyclage_warning.keys()):
recyclage_warning = partner_base_setup_recyclage_warning['config_value']
if (recyclage_warning == "1"):
partner_base_setup_recyclage_warning_lead_time = MYSY_GV.dbname['base_partner_setup'].find_one(
{"config_name": 'recyclage_warning_lead_time',
'valide': '1', 'locked': '0',
'partner_owner_recid': my_partner['recid']})
if (
partner_base_setup_recyclage_warning_lead_time and "config_value" in partner_base_setup_recyclage_warning_lead_time.keys()):
recyclage_warning_lead_time = str(
mycommon.tryInt(str(partner_base_setup_recyclage_warning_lead_time['config_value'])))
"""
Etape 1 : si on a le champ 'code session' saisie par l'utilisateur,
alors on va commencer par aller cherche toutes les session avec un regex de la valeur saisie filter sur le partner_recid
"""
filt_session_code = {}
list_session_id = []
if ("code_session" in diction.keys()):
filt_code_session = {'code_session': {'$regex': str(diction['code_session']), "$options": "i"}}
"""
qry_list_session_id = { { '$and' :[ {'code_session': {'$regex': str(diction['code_session']), "$options": "i"}},
{'partner_owner_recid': str(partner_recid)} ]}, {'_id':1}}
"""
qry_list_session_id = {"$and": [{'code_session': {'$regex': str(diction['code_session']), "$options": "i"}},
{'partner_owner_recid': str(partner_recid)}]}
# print(" ### qry_list_session_id aa = ", qry_list_session_id)
list_session_id_count = MYSY_GV.dbname['session_formation'].count_documents(qry_list_session_id)
if (list_session_id_count <= 0):
# Aucune session
return True, []
for val in MYSY_GV.dbname['session_formation'].find(qry_list_session_id):
list_session_id.append(str(val['_id']))
# print(" ### liste des Id des sessions eligible list_session_id = ", list_session_id)
filt_session_code = {'session_id': {'$in': list_session_id, }}
filt_archive = {}
if ("archive" in diction.keys() and (diction["archive"] == "0" or diction["archive"] == "")):
filt_archive = {'archive': {'$ne': '1'}}
elif ("archive" in diction.keys() and diction["archive"] == "1"):
filt_archive = {'archive': '1'}
elif ("archive" not in diction.keys()):
filt_archive = {'archive': {'$ne': '1'}}
filt_class_title = {}
if ("class_title" in diction.keys()):
filt_class_title = {
'title': {'$regex': mycommon.regex_replace_cartere(str(diction['class_title'])), "$options": "i"}}
filt_class_internal_url = {}
if ("class_internal_url" in diction.keys()):
filt_class_internal_url = {
'class_internal_url': {'$regex': mycommon.regex_replace_cartere(str(diction['class_internal_url'])),
"$options": "i"}}
filt_email = {}
if ("email" in diction.keys()):
filt_email = {'email': {'$regex': mycommon.regex_replace_cartere(str(diction['email'])), "$options": "i"}}
filt_nom = {}
if ("nom" in diction.keys()):
filt_nom = {'nom': {'$regex': mycommon.regex_replace_cartere(str(diction['nom'])), "$options": "i"}}
"""
Filtre général
"""
if ("nom" in diction.keys()):
qry_gle = {"$or": [
{'prenom': {'$regex': mycommon.regex_replace_cartere(str(diction['nom'])), "$options": "i"}},
{'nom': {'$regex': mycommon.regex_replace_cartere(str(diction['nom'])), "$options": "i"}},
{'email': {'$regex': mycommon.regex_replace_cartere(str(diction['nom'])), "$options": "i"}},
{'telephone': {'$regex': mycommon.regex_replace_cartere(str(diction['nom'])), "$options": "i"}},
]}
else:
qry_gle = {}
filt_class_partner_recid = {'partner_owner_recid': str(partner_recid)}
filt_client_rattachement_id = {}
if ("client_rattachement_id" in diction.keys()):
filt_client_rattachement_id = {'client_rattachement_id': str(diction['client_rattachement_id'])}
filt_session_id = {}
if ("session_id" in diction.keys()):
filt_session_id = {'session_id': str(diction['session_id'])}
filt_invoiced = {}
if ("invoiced" in diction.keys() and str(diction['invoiced']).strip() == "1"):
filt_invoiced = {'invoiced': str(diction['invoiced'])}
if ("invoiced" in diction.keys() and str(diction['invoiced']).strip() != "1" ):
filt_invoiced = {'invoiced': {'$ne':'1'} }
# -----
filt_client_nom = {}
sub_filt_client_nom = {}
Lists_partner_client_id = []
if ("client_nom" in diction.keys()):
sub_filt_client_nom = {"$or": [
{'raison_sociale': {'$regex': mycommon.regex_replace_cartere(str(diction['client_nom'])), "$options": "i"}, },
{'nom': {'$regex': mycommon.regex_replace_cartere(str(diction['client_nom'])), "$options": "i"}, 'partner_owner_recid': str(partner_recid), 'valide': '1', 'locked': '0'},
{'email': {'$regex': mycommon.regex_replace_cartere(str(diction['client_nom'])), "$options": "i"}, 'partner_owner_recid': str(partner_recid), 'valide': '1', 'locked': '0'},
{'telephone': {'$regex': mycommon.regex_replace_cartere(str(diction['client_nom'])), "$options": "i"}, 'partner_owner_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_archive, filt_class_internal_url, filt_session_code, qry_gle, filt_client_nom,
filt_client_rattachement_id,
filt_session_id, filt_invoiced, {'partner_owner_recid': str(partner_recid), 'valide': '1',
'class_id': {'$exists': True, '$ne': ""},
'session_id': {'$exists': True, '$ne': ""}
}]}},
{'$sort': {'_id': -1}},
{'$lookup':
{
'from': 'session_formation',
'let': {'session_id': "$session_id", 'partner_owner_recid': '$partner_owner_recid'},
'pipeline': [
{'$match':
{'$expr':
{'$and':
[
{'$eq': ["$_id", {'$convert': {
'input': "$$session_id",
'to': "objectId",
'onError': {'error': 'true'},
'onNull': {'isnull': 'true'}
}}]},
{'$eq': ["$valide", "1"]},
{'$eq': ["$partner_owner_recid", '$$partner_owner_recid']},
]
}
}
},
{'$project': {"_id": 1,'code_session':1, 'date_debut':1, 'date_fin':1, 'code_postal':1, 'prix_session':1, 'presentiel':1, 'distantiel':1,
'session_ondemande':1, "partner_owner_recid": 1, "valide": 1}
},
],
'as': 'session_formation_collection'
}
},
]
#print("#### Get_Statgaire_List_Partner_with_filter_uptimized laa 01 : query = ", query)
RetObject = []
cpt = 0
for retVal in MYSY_GV.dbname['inscription'].aggregate(query):
val = {}
# Verifier si le client est valide
client_valide = "1"
if ("client_rattachement_id" in retVal.keys() and retVal['client_rattachement_id']):
client_rattachement_id_count = MYSY_GV.dbname['partner_client'].count_documents(
{'_id': ObjectId(retVal['client_rattachement_id']),
'valide': '1',
'locked': '0',
'partner_owner_recid': str(my_partner['recid'])})
if (client_rattachement_id_count <= 0):
client_valide = "0"
# Verifier si le client de facturation est valide
client_facturation_valide = "1"
if ("facture_client_rattachement_id" in retVal.keys() and retVal['facture_client_rattachement_id']):
facture_client_rattachement_id_id_count = MYSY_GV.dbname['partner_client'].count_documents(
{'_id': ObjectId(retVal['facture_client_rattachement_id']),
'valide': '1',
'locked': '0',
'partner_owner_recid': str(my_partner['recid'])})
if (facture_client_rattachement_id_id_count <= 0):
client_facturation_valide = "0"
if (client_valide == "1" and client_facturation_valide == "1"):
val['id'] = str(cpt)
cpt = cpt + 1
val['_id'] = retVal['_id']
val['session_id'] = retVal['session_id']
val['class_internal_url'] = retVal['class_internal_url']
val['nom'] = retVal['nom']
val['partner_owner_recid'] = retVal['partner_owner_recid']
val['prenom'] = retVal['prenom']
val['email'] = retVal['email']
type_apprenant_code = ""
type_apprenant_id = ""
if ("type_apprenant_id" in retVal.keys() and retVal['type_apprenant_id']):
type_apprenant_data = MYSY_GV.dbname['type_apprenant'].find_one(
{'_id': ObjectId(str(retVal['type_apprenant_id'])),
'valide': '1',
'locked': '0',
'partner_owner_recid': str(retVal['partner_owner_recid'])})
if (type_apprenant_data and "code" in type_apprenant_data.keys()):
type_apprenant_code = str(type_apprenant_data['code'])
type_apprenant_id = str(type_apprenant_data['_id'])
val['type_apprenant_code'] = type_apprenant_code
val['type_apprenant_id'] = type_apprenant_id
###
if ("civilite" in retVal.keys()):
val['civilite'] = str(retVal['civilite']).lower()
else:
val['civilite'] = ""
if (str(val['civilite']) not in MYSY_GV.CIVILITE):
val['civilite'] = "neutre"
if (str(val['civilite']).strip() == ""):
val['civilite'] = "neutre"
if ("archive" not in retVal.keys()):
val['archive'] = "0"
if ("opco" in retVal.keys()):
val['opco'] = retVal['opco']
else:
val['opco'] = ""
if ("telephone" in retVal.keys()):
val['telephone'] = retVal['telephone']
else:
val['telephone'] = ""
if ("date_naissance" in retVal.keys() and retVal['date_naissance']):
val['date_naissance'] = retVal['date_naissance']
else:
val['date_naissance'] = ""
if ("ville" in retVal.keys()):
val['ville'] = retVal['ville']
else:
val['ville'] = ""
val['status'] = retVal['status']
val['class_id'] = str(retVal['class_id'])
client_rattachement_id = ""
client_rattachement_nom = ""
# Si il a un client rattacher, recuperation des information du client
# print(" ### retVal = ", retVal )
if ("client_rattachement_id" in retVal.keys()):
if (retVal['client_rattachement_id'] and str(retVal['client_rattachement_id']) != 'undefined'):
client_retval = MYSY_GV.dbname['partner_client'].find_one(
{'_id': ObjectId(retVal['client_rattachement_id']),
'valide': '1', 'locked': '0'})
if (client_retval is not None):
client_rattachement_id = client_retval['_id']
client_rattachement_nom = client_retval['nom']
val['client_rattachement_id'] = client_rattachement_id
val['client_rattachement_nom'] = client_rattachement_nom
if ("facture_client_rattachement_id" in retVal.keys()):
val['facture_client_rattachement_id'] = retVal['facture_client_rattachement_id']
else:
val['facture_client_rattachement_id'] = ""
# ----
invoiced = ""
if ("invoiced" in retVal.keys()):
invoiced = retVal['invoiced']
val['invoiced'] = invoiced
invoiced_ref = ""
if ("invoiced_ref" in retVal.keys()):
invoiced_ref = retVal['invoiced_ref']
val['invoiced_ref'] = invoiced_ref
invoiced_date = ""
if ("invoiced_date" in retVal.keys()):
invoiced_date = str(retVal['invoiced_date'])[0:10]
val['invoiced_date'] = invoiced_date
financeur_rattachement_id = ""
financeur_rattachement_nom = ""
# Si il a un client rattacher, recuperation des information du client
# print(" ### retVal = ", retVal )
if ("financeur_rattachement_id" in retVal.keys()):
if (retVal['financeur_rattachement_id'] and str(
retVal['financeur_rattachement_id']) != 'undefined'):
client_retval = MYSY_GV.dbname['partner_client'].find_one(
{'_id': ObjectId(retVal['financeur_rattachement_id']),
'valide': '1', 'locked': '0'})
if (client_retval is not None):
financeur_rattachement_id = client_retval['_id']
financeur_rattachement_nom = client_retval['nom']
val['financeur_rattachement_id'] = financeur_rattachement_id
val['financeur_rattachement_nom'] = financeur_rattachement_nom
session_retval = {}
if( "session_formation_collection" in retVal.keys() and len(retVal['session_formation_collection']) > 0 ):
session_retval = retVal['session_formation_collection'][0]
if ("titre" in session_retval.keys()):
val['title'] = session_retval['domaine']
else:
val['title'] = ""
if ("code_session" in session_retval.keys()):
val['code_session'] = str(session_retval['code_session'])
else:
val['code_session'] = ""
if ("date_debut" in session_retval.keys()):
val['date_du'] = str(session_retval['date_debut'])[0:10]
else:
val['date_du'] = ""
if ("date_fin" in session_retval.keys()):
val['date_au'] = str(session_retval['date_fin'])[0:10]
else:
val['date_au'] = ""
if ("code_postal" in session_retval.keys()):
val['code_postal'] = session_retval['code_postal']
else:
val['code_postal'] = ""
if ("prix_session" in session_retval.keys()):
val['price'] = session_retval['prix_session']
else:
val['price'] = ""
if ("presentiel" in session_retval.keys()):
val['presentiel'] = session_retval['presentiel']
else:
val['presentiel'] = "0"
if ("distantiel" in session_retval.keys()):
val['distantiel'] = session_retval['distantiel']
else:
val['distantiel'] = "0"
if ("session_ondemande" in session_retval.keys()):
val['session_ondemande'] = session_retval['session_ondemande']
else:
val['session_ondemande'] = "0"
"""
Gestion du recyclage d'un apprenant si la formation a laquelle il a participer
necessite un recyclage.
On ne fait ce controle que sur l'inscription 'recyclage_managed' != "1" ou est
"""
val['class_recyclage_delai'] = ""
val['class_recyclage_periodicite'] = ""
val['class_recyclage_alert'] = ""
val['nb_jour_avant_recyclage'] = ""
val['warning_recyclage'] = "0"
local_class_recyclage = "0"
local_class_recyclage_float = 0
if ('myclass_collection' in retVal.keys() and len(retVal['myclass_collection']) > 0
and "recyclage_alert" in retVal['myclass_collection'][0].keys()
and retVal['myclass_collection'][0]['recyclage_alert'] ):
local_class_recyclage = retVal['myclass_collection'][0]['recyclage_alert']
local_class_recyclage_float = mycommon.tryFloat(str(retVal['myclass_collection'][0]['recyclage_alert']))
if( local_class_recyclage_float > 0 ):
if (retVal['status'] == "1" and (
"recyclage_managed" not in retVal.keys() or retVal['recyclage_managed'] != "1")):
if ("recyclage_delai" in retVal['myclass_collection'][0].keys()):
val['class_recyclage_delai'] = retVal['myclass_collection'][0]['recyclage_delai']
if ("recyclage_periodicite" in retVal['myclass_collection'][0].keys()):
val['class_recyclage_periodicite'] = retVal['myclass_collection'][0][
'recyclage_periodicite']
if ("recyclage_alert" in retVal['myclass_collection'][0].keys()):
val['class_recyclage_alert'] = retVal['myclass_collection'][0]['recyclage_alert']
if (str(val['class_recyclage_delai']) != "" and str(
val['class_recyclage_periodicite']) != "" and str(val['class_recyclage_alert']) != ""):
session_date_debut = str(session_retval['date_debut'])[0:10]
session_date_debut_datetime = datetime.strptime(str(session_date_debut).strip(), '%d/%m/%Y')
if (str(val['class_recyclage_periodicite']) == "mois"):
class_recyclage_delai_int = mycommon.tryInt(str(val['class_recyclage_delai']))
session_date_debut_datetime = session_date_debut_datetime + relativedelta(
months=+class_recyclage_delai_int)
elif (str(val['class_recyclage_periodicite']) == "annee"):
class_recyclage_delai_int = mycommon.tryInt(str(val['class_recyclage_delai']))
session_date_debut_datetime = session_date_debut_datetime + relativedelta(
years=+class_recyclage_delai_int)
mytoday = datetime.today().strftime("%d/%m/%Y")
mytoday_datetime = datetime.strptime(str(mytoday).strip(), '%d/%m/%Y')
local_delta = session_date_debut_datetime - mytoday_datetime
val['nb_jour_avant_recyclage'] = str(local_delta.days)
if (local_delta.days < mycommon.tryInt(str(val['class_recyclage_alert']))):
val['warning_recyclage'] = "1"
RetObject.append(mycommon.JSONEncoder().encode(val))
#print(" ### RetObject = ", str(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) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, "Impossible de récupérer la liste des stagiaires"
"""
Cette fonction récupérer la liste des stagiaire d'un partenaire.
On y ajoute la formation concernée - version light pour alleger la recherche

20823
Inscription_mgt_ORIG_2706.py Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1297,6 +1297,369 @@ def Apprenant_Inscrire_Session(diction):
return False, " Impossible d'inscrire l'apprenant à la session de formation "
"""
Internal avec return inscription_id"""
def Internal_Apprenant_Inscrire_Session_Ret_id(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', '_id', 'session_id', 'type_apprenant' , 'modefinancement', 'client_rattachement_id', 'tab_ue_ids', 'statut_inscription']
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
mycommon.myprint(str(
inspect.stack()[0][3]) + " Le champ '" + val + "' n'est pas autorisé")
return False, " Les informations fournies sont incorrectes", False
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', '_id', 'session_id', 'type_apprenant' ]
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 la liste des arguments ")
return False, " Les informations fournies sont incorrectes", False
"""
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, False
# Verifier que le type d'apprenant est bien valide
if ("type_apprenant" in diction.keys() and str(diction['type_apprenant'])):
is_valide_type_apprenant = MYSY_GV.dbname['type_apprenant'].count_documents(
{'_id': ObjectId(str(diction['type_apprenant'])),
'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0'})
if (is_valide_type_apprenant != 1):
mycommon.myprint(
str(inspect.stack()[0][3]) + " Le type d'apprenant est invalide ")
return False, " Le type d'apprenant est invalide ", False
type_apprenant = str(diction['type_apprenant'])
# Verifier que l'apprenant existe
is_apprenant_exist = MYSY_GV.dbname['apprenant'].count_documents({'_id':ObjectId(str(diction['_id'])),
'partner_owner_recid':str(my_partner['recid']),
'valide':'1',
'locked':'0'})
if( is_apprenant_exist <= 0 ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " L'identifiant de l'apprenant n'est pas valide ")
return False, " L'identifiant de l'apprenant n'est pas valide ", False
# Verifier la validité du client , s'il ya un client
client_rattachement_id = ""
if( "client_rattachement_id" in diction.keys() and diction['client_rattachement_id'] ) :
is_client_rattachement_id_exist = MYSY_GV.dbname['partner_client'].count_documents({'_id': ObjectId(diction['client_rattachement_id']),
'partner_owner_recid': str(
my_partner['recid']),
'valide': '1',
'locked': '0'})
if (is_client_rattachement_id_exist <= 0):
mycommon.myprint(
str(inspect.stack()[0][3]) + " L'identifiant du client n'est pas valide ")
return False, " L'identifiant du client n'est pas valide ", False
client_rattachement_id = str(diction['client_rattachement_id'])
# Recuperer les données de l'apprenant
apprenant_data = MYSY_GV.dbname['apprenant'].find_one({'_id': ObjectId(str(diction['_id'])),
'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0'})
# Verifier que la session de formation existe et est valide
is_session_existe = MYSY_GV.dbname['session_formation'].count_documents({'_id':ObjectId(str(diction['session_id'])),
'partner_owner_recid':str(my_partner['recid']),
'valide':'1',
})
if (is_session_existe <= 0):
mycommon.myprint(
str(inspect.stack()[0][3]) + " L'identifiant de la session de formation n'est pas valide ")
return False, " L'identifiant de la session de formation n'est pas valide ", False
# Recuperer les données de la session
session_data = MYSY_GV.dbname['session_formation'].find_one(
{'_id': ObjectId(str(diction['session_id'])),
'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
})
local_class_id = ""
tab_local_class_eu = []
list_local_class_eu = ""
class_data = MYSY_GV.dbname['myclass'].find_one({'internal_url':str(session_data['class_internal_url']),
'valide':'1',
'locked':'0',
'partner_owner_recid':str(my_partner['recid'])})
if(class_data and '_id' in class_data.keys() ):
local_class_id = str(class_data['_id'])
if( "list_unite_enseignement" in class_data.keys()):
for class_ue in class_data['list_unite_enseignement']:
if('_id' in class_ue.keys()):
tab_local_class_eu.append(str(class_ue['_id']))
print(" ### tab_local_class_eu == ", tab_local_class_eu)
list_local_class_eu = ",".join(tab_local_class_eu)
print(" ### list_local_class_eu == ", list_local_class_eu)
"""
Recgarder si la personne est déja inscrite à cette promo
"""
is_alread_inscrit_id = ""
is_alread_inscrit_count = MYSY_GV.dbname['inscription'].count_documents({'session_id':str(session_data['_id']),
'email':apprenant_data['email'],
'valide':'1'})
if( is_alread_inscrit_count > 0 ):
is_alread_inscrit_data = MYSY_GV.dbname['inscription'].find_one(
{'session_id': str(session_data['_id']),
'email': apprenant_data['email'],
'valide': '1'}, {'_id':1})
if( is_alread_inscrit_data and '_id' in is_alread_inscrit_data.keys() ):
is_alread_inscrit_id = str(is_alread_inscrit_data['_id'])
new_data = {}
new_data['token'] = diction['token']
new_data['email'] = apprenant_data['email']
new_data['nom'] = apprenant_data['nom']
new_data['civilite'] = str(apprenant_data['civilite']).lower()
if( str(apprenant_data['civilite']).strip() == ""):
new_data['civilite'] = "neutre"
new_data['prenom'] = apprenant_data['prenom']
new_data['telephone'] = apprenant_data['telephone']
new_data['modefinancement'] = str(diction['modefinancement'])
new_data['client_rattachement_id'] = client_rattachement_id
new_data['apprenant_id'] = str(apprenant_data['_id'])
new_data['session_id'] = str(session_data['_id'])
new_data['class_internal_url'] = session_data['class_internal_url']
if ("statut_inscription" in diction.keys() and diction['statut_inscription'] == "1"):
new_data['status'] = "1"
else:
new_data['status'] = "0"
new_data['type_apprenant'] = str(type_apprenant)
if("is_droit_image" in apprenant_data.keys()):
new_data['is_droit_image'] = apprenant_data['is_droit_image']
else:
new_data['is_droit_image'] = "0"
if ("is_handicap" in apprenant_data.keys()):
new_data['is_handicap'] = apprenant_data['is_handicap']
else:
new_data['is_handicap'] = "0"
if ("is_rgpd" in apprenant_data.keys()):
new_data['is_rgpd'] = apprenant_data['is_rgpd']
else:
new_data['is_rgpd'] = "0"
if ("matricule" in apprenant_data.keys()):
new_data['matricule'] = apprenant_data['matricule']
else:
new_data['matricule'] = ""
if ("matricule" in apprenant_data.keys()):
new_data['matricule'] = apprenant_data['matricule']
else:
new_data['matricule'] = ""
if ("naissance_departement" in apprenant_data.keys()):
new_data['naissance_departement'] = apprenant_data['naissance_departement']
else:
new_data['naissance_departement'] = ""
if ("naissance_lieu" in apprenant_data.keys()):
new_data['naissance_lieu'] = apprenant_data['naissance_lieu']
else:
new_data['naissance_lieu'] = ""
if ("naissance_pays" in apprenant_data.keys()):
new_data['naissance_pays'] = apprenant_data['naissance_pays']
else:
new_data['naissance_pays'] = ""
if ("nationalite" in apprenant_data.keys()):
new_data['nationalite'] = apprenant_data['nationalite']
else:
new_data['nationalite'] = ""
if ("nom_fille" in apprenant_data.keys()):
new_data['nom_fille'] = apprenant_data['nom_fille']
else:
new_data['nom_fille'] = ""
if ("num_secu" in apprenant_data.keys()):
new_data['num_secu'] = apprenant_data['num_secu']
else:
new_data['num_secu'] = ""
if ("pays" in apprenant_data.keys()):
new_data['pays'] = apprenant_data['pays']
else:
new_data['pays'] = ""
#############
if ("piece_identite_num" in apprenant_data.keys()):
new_data['piece_identite_num'] = apprenant_data['piece_identite_num']
else:
new_data['piece_identite_num'] = ""
if ("piece_identite_type" in apprenant_data.keys()):
new_data['identite_type'] = apprenant_data['piece_identite_type']
else:
new_data['identite_type'] = ""
if ("situation_famille" in apprenant_data.keys()):
new_data['situation_famille'] = apprenant_data['situation_famille']
else:
new_data['situation_famille'] = ""
if ("telephone" in apprenant_data.keys()):
new_data['telephone'] = apprenant_data['telephone']
else:
new_data['telephone'] = ""
if ("type_apprenant" in apprenant_data.keys()):
new_data['type_apprenant'] = apprenant_data['type_apprenant']
else:
new_data['type_apprenant'] = ""
if ("ville" in apprenant_data.keys()):
new_data['ville'] = apprenant_data['ville']
else:
new_data['ville'] = ""
if ("adresse" in apprenant_data.keys()):
new_data['adresse'] = apprenant_data['adresse']
else:
new_data['adresse'] = ""
if ("code_postal" in apprenant_data.keys()):
new_data['code_postal'] = apprenant_data['code_postal']
else:
new_data['code_postal'] = ""
if ("date_naissance" in apprenant_data.keys()):
new_data['date_naissance'] = apprenant_data['date_naissance']
else:
new_data['date_naissance'] = "01/01/1900"
if ("ine" in apprenant_data.keys()):
new_data['ine'] = apprenant_data['ine']
else:
new_data['ine'] = ""
"""
Important : 08/06/2025
Si on ne fourni pas diction['tab_ue_ids'], on va aller regarder si la formation concernée
a des eu, auquel cas on les prends tous
"""
if( "tab_ue_ids" in diction.keys()):
new_data['tab_ue_ids'] = str(diction['tab_ue_ids'])
else:
new_data['tab_ue_ids'] = str(list_local_class_eu)
new_data['inscription_validation_date'] = str(datetime.now().strftime("%d/%m/%Y %H:%M:%S"))
print('### Inscription_mgt.AddStagiairetoClass new_data = ', new_data)
if( is_alread_inscrit_id and len(is_alread_inscrit_id) > 3 ):
# Il s'agit d'une mise à jour d'une inscription
new_data['_id'] = str(is_alread_inscrit_id)
local_status, local_retval = Inscription_mgt.UpdateStagiairetoClass(new_data)
if (local_status is False):
return local_status, local_retval, False
else:
local_status, local_retval = Inscription_mgt.AddStagiairetoClass(new_data)
if( local_status is False ):
return local_status, local_retval, False
inscription_qry_check = {}
inscription_qry_check['email'] = apprenant_data['email']
inscription_qry_check['telephone'] = apprenant_data['telephone']
inscription_qry_check['client_rattachement_id'] = client_rattachement_id
inscription_qry_check['apprenant_id'] = str(apprenant_data['_id'])
inscription_qry_check['session_id'] = str(session_data['_id'])
inscrit_data = MYSY_GV.dbname['inscription'].find_one(inscription_qry_check, {'_id':1})
inscrit_data_id = ""
if( inscrit_data and "_id" in inscrit_data.keys()):
inscrit_data_id = str(inscrit_data['_id'])
## Add to log history
now = str(datetime.now().strftime("%d/%m/%Y %H:%M:%S"))
history_event_dict = {}
history_event_dict['token'] = diction['token']
history_event_dict['related_collection'] = "apprenant"
history_event_dict['related_collection_recid'] = str(diction['_id'])
history_event_dict['action_date'] = str(now)
history_event_dict['action_description'] = "Inscription session "+str(session_data["code_session"])
local_status, local_retval = mycommon.Collection_Historique.Add_Historique_Event(history_event_dict)
if (local_status is False):
mycommon.myprint(
" WARNING : Impossible de logguer l'historique pour l'évènement : " + str(history_event_dict))
return True, " L'apprenant a été correctement inscrit à la session de formation", str(inscrit_data_id)
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'inscrire l'apprenant à la session de formation ", False
"""
Inscrire une liste d'apprenant à une session de formation

33
main.py
View File

@ -4407,6 +4407,23 @@ def CancelAttendeeInscription():
localStatus, message= inscription.CancelAttendeeInscription(payload)
return jsonify(status=localStatus, message=message )
""""
Cette API annule des inscriptions en masse
"""
@app.route('/myclass/api/Cancel_Tab_Inscription/', methods=['POST','GET'])
@crossdomain(origin='*')
def Cancel_Tab_Inscription():
# On Cancel_Tab_Inscription le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Cancel_Tab_Inscription : payload = ",payload)
localStatus, message= inscription.Cancel_Tab_Inscription(payload)
return jsonify(status=localStatus, message=message )
""""
Cette API supprime defitivement un inscription qui doit etre au statut 'annulé' ou 'prescrit'
"""
@ -5626,6 +5643,22 @@ def Get_Statgaire_List_Partner_with_filter():
"""
API qui recupere la liste complete des stagaire d'un partener UPTIMIZED
"""
@app.route('/myclass/api/Get_Statgaire_List_Partner_with_filter_uptimized/', methods=['POST','GET'])
@crossdomain(origin='*')
def Get_Statgaire_List_Partner_with_filter_uptimized():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Get_Statgaire_List_Partner_with_filter_uptimized payload = ",payload)
status, retval = inscription.Get_Statgaire_List_Partner_with_filter_uptimized(payload)
return jsonify(status=status, message=retval)
"""
API qui recupere la liste complete des stagaire d'un partener - version light pour alleger la recherche
"""

View File

@ -2508,7 +2508,7 @@ def Add_Partner_Client_mass(file=None, Folder=None, diction=None):
# Controle des conditions de paiement : condition_paiement_code
invoice_condition_paiement_id = ""
if ("condition_paiement_code" in df.keys()):
if ("condition_paiement_code" in df.keys() and str(df['condition_paiement_code'].values[n]).strip()):
condition_paiement_code = str(df['condition_paiement_code'].values[n]).strip()
is_valide_cond_paiement_data = MYSY_GV.dbname['base_partner_paiement_condition'].find_one(
@ -2524,7 +2524,7 @@ def Add_Partner_Client_mass(file=None, Folder=None, diction=None):
# groupe de client : partner_groupe_client_code
partner_groupe_client_id = ""
if ("partner_groupe_client_code" in df.keys()):
if ("partner_groupe_client_code" in df.keys() and str(df['partner_groupe_client_code'].values[n]).strip() ):
condition_paiement_code = str(df['partner_groupe_client_code'].values[n]).strip()
is_valide_partner_groupe_client_data = MYSY_GV.dbname[
@ -2543,7 +2543,7 @@ def Add_Partner_Client_mass(file=None, Folder=None, diction=None):
# Verifier que l'adresse email du responsable de compte est valide
responsable_compte_email = ""
responsable_compte_id = ""
if ("responsable_compte_email" in df.keys()):
if ("responsable_compte_email" in df.keys() and str(df['responsable_compte_email'].values[n]).strip()):
if (str(df['responsable_compte_email'].values[n]) and str(df['responsable_compte_email'].values[n]) != ""):
responsable_compte_email = str(df['responsable_compte_email'].values[n]).strip()
@ -2583,7 +2583,7 @@ def Add_Partner_Client_mass(file=None, Folder=None, diction=None):
# type de client : client_type_code
client_type_id = ""
if ("client_type_code" in df.keys()):
if ("client_type_code" in df.keys() and str(df['client_type_code'].values[n]).strip()):
client_type_code = str(df['client_type_code'].values[n]).strip()
is_valide_type_client_data = MYSY_GV.dbname[
@ -2893,7 +2893,7 @@ def Controle_Add_Partner_Client_mass(saved_file=None, Folder=None, diction=None)
# Controle des conditions de paiement : condition_paiement_code
if ("condition_paiement_code" in df.keys()):
if ("condition_paiement_code" in df.keys() and str(df['condition_paiement_code'].values[n]).strip()):
condition_paiement_code = str(df['condition_paiement_code'].values[n]).strip()
is_valide_cond_paiement_count = MYSY_GV.dbname['base_partner_paiement_condition'].count_documents({'code': re.compile(condition_paiement_code,
@ -2936,7 +2936,7 @@ def Controle_Add_Partner_Client_mass(saved_file=None, Folder=None, diction=None)
n + 2) + " est invalide. Les valeurs acceptées '0', '1', ou '[vide]'"
# Controle du champ 'is_client':
if ("is_client" in df.keys()):
if ("is_client" in df.keys() ):
is_client = str(df['is_client'].values[n]).strip()
is_client = str(mycommon.tryInt(is_client))
if (is_client not in ['0', '1', '']):
@ -2995,7 +2995,7 @@ def Controle_Add_Partner_Client_mass(saved_file=None, Folder=None, diction=None)
# Controle des conditions de paiement : partner_groupe_client_code
if ("partner_groupe_client_code" in df.keys()):
if ("partner_groupe_client_code" in df.keys() and str(df['partner_groupe_client_code'].values[n]).strip()):
condition_paiement_code = str(df['partner_groupe_client_code'].values[n]).strip()
is_valide_partner_groupe_client_code_count = MYSY_GV.dbname[
@ -3015,7 +3015,7 @@ def Controle_Add_Partner_Client_mass(saved_file=None, Folder=None, diction=None)
n + 2) + " est invalide. "
# Controle des conditions de paiement : client_type_code
if ("client_type_code" in df.keys()):
if ("client_type_code" in df.keys() and str(df['client_type_code'].values[n]).strip()):
client_type_code = str(df['client_type_code'].values[n]).strip()

View File

@ -2962,6 +2962,8 @@ concernant uniquement cette ue (collection : inscription_liste_ue)
Algorithme :
1 - Création ou récupération du dossier de l'apprenant
2 - Inscription de l'apprenant à promotion concernée
3 - Ajouter les pièce jointes : ajouter 'tab_related_collection' au 'download_files'
add : related_collection = {'inscription', 'related_collection_id' : isncription_id}
"""
def Candidat_Inscrire_To_Session(diction):
try:
@ -2972,7 +2974,7 @@ def Candidat_Inscrire_To_Session(diction):
"""
field_list = ['token', 'list_candidat_id', 'admission_session_id', 'session_id',
'type_apprenant' , 'modefinancement',
'client_rattachement_id', 'tab_ue_ids']
'client_rattachement_id', 'tab_ue_ids', 'statut_inscription']
incom_keys = diction.keys()
for val in incom_keys:
@ -2985,7 +2987,7 @@ def Candidat_Inscrire_To_Session(diction):
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'list_candidat_id', 'admission_session_id', 'session_id',
'type_apprenant' ]
'type_apprenant' , 'statut_inscription']
for val in field_list_obligatoire:
if val not in diction:
@ -3034,14 +3036,38 @@ def Candidat_Inscrire_To_Session(diction):
# Verifier que le type d'apprenant est bien valide
type_apprenant = "0"
if( str(diction['type_apprenant']) not in MYSY_GV.INSCRIPTION_TYPE_APPRENANT ):
if( "statut_inscription" in diction.keys() and diction['statut_inscription'] not in ['', '1', '0']):
mycommon.myprint(
str(inspect.stack()[0][3]) + " Le type d'apprenant est invalide ")
return False, " Le type d'apprenant est invalide "
else:
type_apprenant = str(diction['type_apprenant'])
str(inspect.stack()[0][3]) + "Le statut d'inscription est invalide ")
return False, " Le statut d'inscription est invalide "
# Verifier que le type d'apprenant est bien valide
if ( "type_apprenant" in diction.keys() and str(diction['type_apprenant']) ):
is_valide_type_apprenant = MYSY_GV.dbname['type_apprenant'].count_documents({'_id':ObjectId( str(diction['type_apprenant'])),
'partner_owner_recid':str(my_partner['recid']),
'valide':'1',
'locked':'0'})
if( is_valide_type_apprenant != 1):
mycommon.myprint(
str(inspect.stack()[0][3]) + " Le type d'apprenant est invalide ")
return False, " Le type d'apprenant est invalide "
# Verifier que le mode de finance est bien valide
if ("modefinancement" in diction.keys() and str(diction['modefinancement'])):
is_valide_modefinancementt = MYSY_GV.dbname['financement_mode'].count_documents(
{'_id': ObjectId(str(diction['modefinancement'])),
'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0'})
if (is_valide_modefinancementt != 1):
mycommon.myprint(
str(inspect.stack()[0][3]) + " Le mode de financement est invalide ")
return False, " Le mode de financement est invalide "
# Verifier la validité du client, s'il ya un client
@ -3183,6 +3209,7 @@ def Candidat_Inscrire_To_Session(diction):
candidat_data['matricule'] = str(apprenant_matricule)
candidat_data['admission_session_inscrit_id'] = str(candidat_id)
result = MYSY_GV.dbname['apprenant'].find_one_and_update(
{'email': candidat_data['email'],
@ -3243,15 +3270,44 @@ def Candidat_Inscrire_To_Session(diction):
if( "tab_ue_ids" in diction.keys() ):
local_diction['tab_ue_ids'] = str(diction['tab_ue_ids'])
print(" ### local_diction inscription apprenant = ", local_diction)
local_status, local_retval = apprenant_mgt.Apprenant_Inscrire_Session(local_diction)
if( "statut_inscription" in diction.keys() and diction['statut_inscription'] == "1"):
local_diction['statut_inscription'] = "1"
else:
local_diction['statut_inscription'] = "0"
#print(" ### local_diction inscription apprenant = ", local_diction)
local_status, local_retval, local_inscrit_id = apprenant_mgt.Internal_Apprenant_Inscrire_Session_Ret_id(local_diction)
if( local_status is False ):
is_warning_message = True
warning_message = "\n impossible d'inscrire l'apprenant : " + str(apprenant_data['email']) + " "
warning_message = "\n Impossible d'inscrire l'apprenant : " + str(apprenant_data['email']) + " "
else:
for download_files_data in MYSY_GV.dbname['download_files'].find({'object_owner_collection':'admission_session_inscrit_document',
'object_owner_id':str(apprenant_data['admission_session_inscrit_id'])}):
new_related_collection = {
"related_collection": "inscription",
"related_collection_id": str(local_inscrit_id)
}
qry = {
"_id": ObjectId(str(download_files_data['_id'])),
"partner_owner_recid": str(my_partner["recid"]),
"valide": "1"
}
update = {
"$addToSet": {
"tab_related_collection": new_related_collection
}
}
result = MYSY_GV.dbname['download_files'].update_one(qry, update)
"""
Mettre à jour le candidat pour dire qu'il a été inscrit
"""
for candidat_id in list_candidat_ids:
candidat_data = MYSY_GV.dbname['admission_session_inscrit'].find_one(