04/01/26 - 21h30

Signed-off-by: Cherif <cbalde@mysy-training.com>
master_Elyos_FI
Cherif 2026-01-04 21:35:54 +01:00
parent 53894b80f1
commit a328428635
8 changed files with 8911 additions and 50 deletions

View File

@ -4,9 +4,14 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="02/01/26 - 13h">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="02/01/26 - 2">
<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$/crm_opportunite.py" beforeDir="false" afterPath="$PROJECT_DIR$/crm_opportunite.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.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" />
</list>
<option name="SHOW_DIALOG" value="false" />
@ -450,7 +455,7 @@
<option name="project" value="LOCAL" />
<updated>1747251650255</updated>
</task>
<option name="localTasksCounter" value="522" />
<option name="localTasksCounter" value="523" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
@ -492,7 +497,6 @@
</option>
</component>
<component name="VcsManagerConfiguration">
<MESSAGE value="10/08/2025 - 10h" />
<MESSAGE value="sss" />
<MESSAGE value="10/10/2025 - 17:30" />
<MESSAGE value="12/10/2025 - 17:14 - Elyos V1.2" />
@ -517,6 +521,7 @@
<MESSAGE value="13/12/25 - 14h" />
<MESSAGE value="15/12/25 - 13h" />
<MESSAGE value="02/01/26 - 13h" />
<option name="LAST_COMMIT_MESSAGE" value="02/01/26 - 13h" />
<MESSAGE value="02/01/26 - 21h" />
<option name="LAST_COMMIT_MESSAGE" value="02/01/26 - 21h" />
</component>
</project>

View File

@ -1076,4 +1076,14 @@ STAGE_STATUS = ['0', '1', '2']
"""
Nombre maximum de message Public ENT
"""
MAX_ENT_PUBLIC_MESSAGE = 5
MAX_ENT_PUBLIC_MESSAGE = 5
"""
Tutorat d'un inscrit : Les roles autorisés
0 : Parent
1 : Tuteur légal
2 : Tuteur scolaire
3 : Autre
"""
TUTORAT_ROLE = ['0', '1', '2', '3', '']

View File

@ -8084,7 +8084,7 @@ def Get_Statgaire_List_Partner_with_filter(diction):
alors on va commencer par aller cherche toutes les session avec un regex de la valeur saisie filter sur le partner_recid
"""
filt_session_id = {}
filt_session_code = {}
list_session_id = []
if ("code_session" in diction.keys()):
filt_code_session = {'code_session': {'$regex': str(diction['code_session']), "$options": "i"}}
@ -8108,7 +8108,7 @@ def Get_Statgaire_List_Partner_with_filter(diction):
list_session_id.append(str(val['_id']))
#print(" ### liste des Id des sessions eligible list_session_id = ", list_session_id)
filt_session_id = {'session_id': {'$in': 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"] == "")):
@ -8144,11 +8144,11 @@ def Get_Statgaire_List_Partner_with_filter(diction):
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_client_nom = {}
@ -8169,7 +8169,7 @@ def Get_Statgaire_List_Partner_with_filter(diction):
#----
query = [{'$match':{ '$and' : [ filt_archive, filt_class_internal_url, filt_session_id, filt_email, filt_nom, filt_client_nom, filt_client_rattachement_id,
query = [{'$match':{ '$and' : [ filt_archive, filt_class_internal_url, filt_session_code, filt_email, filt_nom, filt_client_nom, filt_client_rattachement_id,
filt_session_id, {'partner_owner_recid':str(partner_recid), 'valide':'1'}] } },
{'$sort': {'_id': -1}},
{'$lookup':
@ -8293,7 +8293,7 @@ def Get_Statgaire_List_Partner_with_filter(diction):
else:
val['telephone'] = ""
if ("date_naissance" in retVal.keys()):
if ("date_naissance" in retVal.keys() and retVal['date_naissance']):
val['date_naissance'] = retVal['date_naissance']
else:
val['date_naissance'] = ""
@ -15309,3 +15309,119 @@ def unarchive_stagiaire(diction):
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible desarchiver les inscrits"
"""
Cette fonction pemet recuperer les tuteurs d'un inscrit
"""
def Get_Inscrit_List_Tuteurs(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', 'inscription_id']
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'existe pas")
return False, " Les informations fournies sont incorrectes",
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'inscription_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 la liste des arguments ")
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
RetObject = []
val_tmp = 0
for retval in MYSY_GV.dbname['ressource_humaine'].find({'partner_recid': my_partner['recid'],
'tab_inscription_id.inscription_id':str(diction['inscription_id'])} ):
node_rh_tuteur = {}
node_rh_tuteur['_id'] = str(retval['_id'])
node_rh_tuteur['id'] = str(val_tmp)
val_tmp = val_tmp + 1
if( "nom" in retval.keys()):
node_rh_tuteur['nom'] = str(retval['nom'])
else:
node_rh_tuteur['nom'] = ""
if ("prenom" in retval.keys()):
node_rh_tuteur['prenom'] = str(retval['prenom'])
else:
node_rh_tuteur['prenom'] = ""
if ("email" in retval.keys()):
node_rh_tuteur['email'] = str(retval['email'])
else:
node_rh_tuteur['email'] = ""
if ("civilite" in retval.keys()):
node_rh_tuteur['civilite'] = str(retval['civilite'])
else:
node_rh_tuteur['civilite'] = ""
if ("civilite" in retval.keys()):
node_rh_tuteur['civilite'] = str(retval['civilite'])
else:
node_rh_tuteur['civilite'] = ""
for insc_tutore_data in retval["tab_inscription_id"]:
if(str(insc_tutore_data['inscription_id']) == str(diction['inscription_id']) ):
if ("role" in insc_tutore_data.keys()):
node_rh_tuteur['role'] = str(insc_tutore_data['role'])
tuteur_label = ""
if( str(insc_tutore_data['role']) == "0"):
tuteur_label = "Parent"
elif( str(insc_tutore_data['role']) == "1"):
tuteur_label = "Tuteur légal"
elif (str(insc_tutore_data['role']) == "2"):
tuteur_label = "Tuteur scolaire"
elif (str(insc_tutore_data['role']) == "3"):
tuteur_label = "Autre"
node_rh_tuteur['tuteur_role_label'] = tuteur_label
else:
node_rh_tuteur['role'] = ""
node_rh_tuteur['tuteur_role_label'] = ""
RetObject.append(mycommon.JSONEncoder().encode(node_rh_tuteur))
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 récupérer la liste des tuteurs "

File diff suppressed because one or more lines are too long

View File

@ -180,8 +180,8 @@ def Add_CRM_Opportunite(diction):
#------------------
"""
Recuperer le modèle de document
"""
Recuperer le modèle de document
"""
local_diction = {}
local_diction['ref_interne'] = "CRM_OPPORTUNITE_CHANGE_NOTIF"
local_diction['type_doc'] = "email"

79
main.py
View File

@ -12055,6 +12055,21 @@ def unarchive_stagiaire():
return jsonify(status=status, message=retval)
"""
API pour recuperer la liste des tuteurs d'un inscrit
"""
@app.route('/myclass/api/Get_Inscrit_List_Tuteurs/', methods=['POST','GET'])
@crossdomain(origin='*')
def Get_Inscrit_List_Tuteurs():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Get_Inscrit_List_Tuteurs payload = ",payload)
status, retval = inscription.Get_Inscrit_List_Tuteurs(payload)
return jsonify(status=status, message=retval)
"""
API qui recuperer les reponses d'un survey donné dans une fichier pdf
"""
@ -12556,15 +12571,16 @@ def Apply_Planning_Model_To_Session():
"""
API de generation la version PDF d'un contrat d'un employé
"""
@app.route('/myclass/api/Print_Employee_Given_Contrat/<token>/<rh_id>/<contract_id>/', methods=['POST','GET'])
@app.route('/myclass/api/Print_Employee_Given_Contrat/<token>/<rh_id>/<contract_id>/<courrier_template_id>', methods=['POST','GET'])
@crossdomain(origin='*')
def Print_Employee_Given_Contrat(token, rh_id, contract_id):
def Print_Employee_Given_Contrat(token, rh_id, contract_id, courrier_template_id):
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
payload = {}
payload['token'] = str(token)
payload['rh_id'] = str(rh_id)
payload['contract_id'] = str(contract_id)
payload['courrier_template_id'] = str(courrier_template_id)
print(" ### Print_Employee_Given_Contrat : payload = ",str(payload))
@ -12598,6 +12614,63 @@ def Send_Employee_Contract_By_Email():
"""
API permet de mettre à jour le ligne d'un inscrit tutoré
"""
@app.route('/myclass/api/Update_RH_List_Insc_Tutore/', methods=['POST','GET'])
@crossdomain(origin='*')
def Update_RH_List_Insc_Tutore():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Update_RH_List_Insc_Tutore payload = ",payload)
status, retval = ressources_humaines.Update_RH_List_Insc_Tutore(payload)
return jsonify(status=status, message=retval)
"""
API permet d'ajouter un inscrit tutoré à un RH
"""
@app.route('/myclass/api/Add_RH_List_Insc_Tutore/', methods=['POST','GET'])
@crossdomain(origin='*')
def Add_RH_List_Insc_Tutore():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Add_RH_List_Insc_Tutore payload = ",payload)
status, retval = ressources_humaines.Add_RH_List_Insc_Tutore(payload)
return jsonify(status=status, message=retval)
"""
API permet de recuperer la liste des inscrits tutoré par une RH
"""
@app.route('/myclass/api/Get_RH_List_Insc_Tutore/', methods=['POST','GET'])
@crossdomain(origin='*')
def Get_RH_List_Insc_Tutore():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Get_RH_List_Insc_Tutore payload = ",payload)
status, retval = ressources_humaines.Get_RH_List_Insc_Tutore(payload)
return jsonify(status=status, message=retval)
"""
API permet de supprimer une liste d'inscrits tutoré à un RH
"""
@app.route('/myclass/api/Delete_RH_List_Insc_Tutore/', methods=['POST','GET'])
@crossdomain(origin='*')
def Delete_RH_List_Insc_Tutore():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Delete_RH_List_Insc_Tutore payload = ",payload)
status, retval = ressources_humaines.Delete_RH_List_Insc_Tutore(payload)
return jsonify(status=status, message=retval)
"""
API permet de recuperer les data du partenaire proprietaire d'un sous domaine
"""
@ -12606,7 +12679,7 @@ API permet de recuperer les data du partenaire proprietaire d'un sous domaine
def Get_Partner_Data_From_Subdomain():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Get_Partner_Data_From_Subdomain payload iiiiiiii = ",payload)
print(" ### Get_Partner_Data_From_Subdomain payload = ",payload)
status, retval = mycommon.Get_Partner_Data_From_Subdomain(payload)
return jsonify(status=status, message=retval)

View File

@ -4601,8 +4601,9 @@ def Get_Dictionnary_data_For_Template(diction):
'distantiel', 'presentiel', 'session_ondemande', 'nb_participant',
'prix_session', 'titre', 'location_type', 'is_bpf', 'formateur_id', 'adresse',
'code_postal', 'ville', 'pays', 'date_debut_inscription', 'date_fin_inscription',
'formateur_nom_prenom', 'formateur_email', 'session_formation_titre', 'session_formation_objectif',
'session_formation_description', 'nb_participant', 'entre_scolaire']
'formateur_nom_prenom', 'formateur_email', 'formation_titre', 'formation_objectif',
'formation_description', 'nb_participant', 'entre_scolaire', 'mode_animation', 'mode_animation_label',
'formation_description', 'formation_duration', 'formation_duration_unit']
list_session_data = []
tab_session_id = diction['list_session_id']
@ -4612,17 +4613,31 @@ def Get_Dictionnary_data_For_Template(diction):
'partner_owner_recid': str(my_partner['recid'])
}):
mode_animation_label = ""
if( "mode_animation" in session_data.keys() and session_data['mode_animation'] == "2"):
mode_animation_label = "Hybride"
elif ("mode_animation" in session_data.keys() and session_data['mode_animation'] == "1"):
mode_animation_label = "Distanciel"
elif ("mode_animation" in session_data.keys() and session_data['mode_animation'] == "0"):
mode_animation_label = "Presentiel"
session_data['mode_animation_label'] = mode_animation_label
# Recuperation des données de la formation associée
session_formation_titre = ""
session_formation_objectif = ""
session_formation_description = ""
session_formation_duration = ""
session_formation_duration_unit = ""
if ("class_internal_url" in session_data.keys() and session_data['class_internal_url']):
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'])
}, {'objectif':1, 'title':1, 'description':1})
}, {'objectif':1, 'title':1, 'description':1, 'duration':1, 'duration_unit':1})
if (class_data and "title" in class_data.keys() ) :
@ -4634,9 +4649,18 @@ def Get_Dictionnary_data_For_Template(diction):
if (class_data and "description" in class_data.keys() ) :
session_formation_description = str(class_data['description'])
session_data['session_formation_titre'] = session_formation_titre
session_data['session_formation_objectif'] = session_formation_objectif
session_data['session_formation_description'] = session_formation_description
if (class_data and "duration" in class_data.keys() ) :
session_formation_duration = str(class_data['duration'])
if (class_data and "duration_unit" in class_data.keys() ) :
session_formation_duration_unit = str(class_data['duration_unit'])
session_data['formation_titre'] = session_formation_titre
session_data['formation_objectif'] = session_formation_objectif
session_data['formation_description'] = session_formation_description
session_data['formation_duration'] = session_formation_duration
session_data['formation_duration_unit'] = session_formation_duration_unit
# Recuperation des données du formation

View File

@ -4992,10 +4992,10 @@ def Get_List_Employee_Contrat(diction):
'valide': '1','locked': '0', 'partner_owner_recid': str(my_partner['recid'])}):
user = retval
if( "class_id" not in user.keys()):
if( "class_id" not in user.keys() or user['class_id'] == ""):
user['class_id'] = ""
user['class_title'] = ""
else:
elif (user['class_id'] ):
class_title = ""
class_data = MYSY_GV.dbname['myclass'].find_one({'_id':ObjectId(str(user['class_id'])),
'valide':'1',
@ -5007,10 +5007,10 @@ def Get_List_Employee_Contrat(diction):
user['class_title'] = class_title
if ("session_id" not in user.keys()):
if ("session_id" not in user.keys() or user['session_id'] == ""):
user['session_id'] = ""
user['session_code'] = ""
else:
elif ( user['session_id']):
session_code = ""
session_data = MYSY_GV.dbname['session_formation'].find_one(
@ -5724,7 +5724,7 @@ def Print_Employee_Given_Contrat(diction):
"""
Verification des input acceptés
"""
field_list = ['token', 'rh_id', 'contract_id']
field_list = ['token', 'rh_id', 'contract_id', 'courrier_template_id',]
incom_keys = diction.keys()
for val in incom_keys:
@ -5736,7 +5736,7 @@ def Print_Employee_Given_Contrat(diction):
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'rh_id', 'contract_id']
field_list_obligatoire = ['token', 'rh_id', 'contract_id', 'courrier_template_id']
for val in field_list_obligatoire:
if val not in diction:
@ -5757,6 +5757,8 @@ def Print_Employee_Given_Contrat(diction):
if (local_status is not True):
return local_status, my_partner
# Verifier que la ressource_humaine est valide
is_rh_id_valide = MYSY_GV.dbname['ressource_humaine'].count_documents(
{'_id': ObjectId(str(diction['rh_id'])),
@ -5778,6 +5780,15 @@ def Print_Employee_Given_Contrat(diction):
'_id':ObjectId(str(diction['contract_id']))}):
user = retval
user['id'] = str(val_tmp)
session_data = {}
if( "session_id" in retval.keys() and retval['session_id']):
session_data = MYSY_GV.dbname['session_formation'].find_one({'_id':ObjectId(retval['session_id']),
'partner_owner_recid':str(my_partner['recid']),},
{'code_session':1, 'date_debut':1, 'date_fin':1, 'mode_animation':1,
'titre':1})
user['session_data'] = session_data
val_tmp = val_tmp + 1
RetObject.append(user)
@ -5798,12 +5809,20 @@ def Print_Employee_Given_Contrat(diction):
my_partner['recid'])})
# Creation du dictionnaire d'information à utiliser pour la creation du doc
tab_class = []
if ("class_id" in RetObject[0].keys() and RetObject[0]['class_id']):
tab_class.append(ObjectId(str(RetObject[0]['class_id'])))
tab_session = []
if ("session_id" in RetObject[0].keys() and RetObject[0]['session_id']):
tab_session.append(ObjectId(str(RetObject[0]['session_id'])))
convention_dictionnary_data = {}
new_diction = {}
new_diction['token'] = diction['token']
new_diction['list_stagiaire_id'] = []
new_diction['list_session_id'] = []
new_diction['list_class_id'] = []
new_diction['list_session_id'] = tab_session
new_diction['list_class_id'] = tab_class
new_diction['list_client_id'] = []
new_diction['list_apprenant_id'] = []
@ -5820,27 +5839,32 @@ def Print_Employee_Given_Contrat(diction):
"params": convention_dictionnary_data,
}
"""
Recuperer le modèle de document
"""
local_diction = {}
local_diction['ref_interne'] = "EMPLOYEE_CONTRACT"
local_diction['type_doc'] = "pdf"
local_diction['partner_owner_recid'] = str(my_partner['recid'])
print(" ### body = ", body)
# recuperer le modele de document
courrier_data_retval = MYSY_GV.dbname['courrier_template'].find_one(
{'partner_owner_recid': str(my_partner['recid']),
'valide': '1', 'locked': '0',
'_id': ObjectId(str(diction['courrier_template_id']))})
if (courrier_data_retval is None):
mycommon.myprint(
str(inspect.stack()[0][
3]) + " Le modèle de document est invalide ")
return False, " Le modèle de document est invalide"
courrier_data_status, courrier_data_retval = mycommon.Get_Courrier_Template_Include_Default_Data(local_diction)
if (courrier_data_status is False):
return courrier_data_status, courrier_data_retval
if ("contenu_doc" not in courrier_data_retval.keys() or str(courrier_data_retval['contenu_doc']) == ""):
mycommon.myprint(
str(inspect.stack()[0][
3]) + " Le modèle de courrier 'EMPLOYEE_CONTRACT' n'est pas correctement configuré ")
return False, " Le modèle de courrier 'EMPLOYEE_CONTRACT' n'est pas correctement configuré "
3]) + " Le modèle de courrier n'est pas correctement configuré ")
return False, " Le modèle de courrier n'est pas correctement configuré "
"""
Creation du fichier PDF
"""
Creation du fichier PDF
"""
contenu_doc_Template = jinja2.Template(str(courrier_data_retval['contenu_doc']))
sourceHtml = contenu_doc_Template.render(params=body["params"])
@ -5876,7 +5900,7 @@ def Print_Employee_Given_Contrat(diction):
# return True on success and False on errors
print(pisaStatus.err, type(pisaStatus.err))
return True, " le fichier generé "
return True, " Le fichier a été correctement géneré "
@ -5958,6 +5982,7 @@ def Send_Employee_Contract_By_Email(tab_files, Folder, diction):
'partner_owner_recid': str(my_partner['recid'])})
# recuperer le modele de document
Contrat_Model_Document_data = MYSY_GV.dbname['courrier_template'].find_one(
{'partner_owner_recid': str(my_partner['recid']),
@ -6051,13 +6076,14 @@ def Send_Employee_Contract_By_Email(tab_files, Folder, diction):
convention_dictionnary_data = local_retval
convention_dictionnary_data['employee'] = employee_data
convention_dictionnary_data['contrat'] = rh_contract_data
convention_dictionnary_data['rh_employee_data'] = employee_data
convention_dictionnary_data['rh_contract_data'] = rh_contract_data
body = {
"params": convention_dictionnary_data,
}
# Verifier s'il s'agit d'un document à envoyer avec une version de pièce jointe.
if ("joint_pdf" in Contrat_Model_Document_data.keys() and str(
Contrat_Model_Document_data['joint_pdf']) == "1"):
@ -6100,8 +6126,6 @@ def Send_Employee_Contract_By_Email(tab_files, Folder, diction):
tab_list_file_for_queu_mail_and_internal_mail.append(outputFilename)
print(" ajourrrr PDFFF outputFilename = ", outputFilename)
contenu_pdf_doc_Template = jinja2.Template(str(Contrat_Model_Document_data['contenu_doc']))
corps_mail_doc_Template = jinja2.Template(str(Contrat_Model_Document_data['corps_mail']))
@ -6122,7 +6146,7 @@ def Send_Employee_Contract_By_Email(tab_files, Folder, diction):
" <nav style = 'font-size: 10px; font-style: italic;' > Sécurisé par MySy Training Technology </nav>" \
" <br/> </div> </div>" + \
str(contenu_pdf_html) + " <div style='width: 100%'> <div style = 'width: 100%; text-align: center;' >" \
" Signature Client <br/> <img style = 'height:100px; width:100px' " \
" Signature <br/> <img style = 'height:100px; width:100px' " \
" src = '{{ params.mysy_manual_signature_img }}' > <br/> " \
" </div> </div>"
@ -6440,3 +6464,602 @@ def Send_Employee_Contract_By_Email(tab_files, Folder, diction):
print(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, "Impossible d'envoyer le contrat par email"
"""
Cette fonction permet de recuperer la liste des inscrits tutorés par cette ressource
"""
def Get_RH_List_Insc_Tutore(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', 'rh_id']
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'existe pas")
return False, " Les informations fournies sont incorrectes",
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'rh_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 la liste des arguments ")
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
"""
check validité RH
"""
is_rh_valide = MYSY_GV.dbname['ressource_humaine'].count_documents({"_id":ObjectId(str(diction['rh_id'])),
'partner_recid':my_partner['recid']})
if( is_rh_valide != 1):
mycommon.myprint(str(
inspect.stack()[0][3]) + " L'identifiant RH est invalide ")
return False, " L'identifiant RH est invalide ",
RetObject = []
val_tmp = 0
for retval in MYSY_GV.dbname['ressource_humaine'].find({"_id": ObjectId(str(diction['rh_id'])),
'partner_recid': my_partner['recid']}):
if( "tab_inscription_id" in retval.keys() and retval["tab_inscription_id"]):
for insc_tutore_data in retval["tab_inscription_id"]:
node_inscrit_totore = {}
if ("include_com" in insc_tutore_data.keys() and insc_tutore_data["include_com"] in ['0', '1']):
node_inscrit_totore['include_com'] = insc_tutore_data["include_com"]
else:
node_inscrit_totore['include_com'] = "0"
if ("role" in insc_tutore_data.keys()):
node_inscrit_totore['role'] = insc_tutore_data["role"]
tuteur_label = ""
if (str(insc_tutore_data['role']) == "0"):
tuteur_label = "Parent"
elif (str(insc_tutore_data['role']) == "1"):
tuteur_label = "Tuteur légal"
elif (str(insc_tutore_data['role']) == "2"):
tuteur_label = "Tuteur scolaire"
elif (str(insc_tutore_data['role']) == "3"):
tuteur_label = "Autre"
node_inscrit_totore['tuteur_role_label'] = tuteur_label
else:
node_inscrit_totore['role'] = ""
node_inscrit_totore['tuteur_role_label'] = ""
node_inscrit_totore['inscription_id'] = insc_tutore_data["inscription_id"]
inscription_data = {}
if( "inscription_id" in insc_tutore_data.keys() and ObjectId.is_valid(insc_tutore_data['inscription_id']) ) :
inscription_data = MYSY_GV.dbname['inscription'].find_one({'_id':ObjectId(str(insc_tutore_data['inscription_id'])),
'partner_owner_recid':my_partner['recid']})
if( "email" in inscription_data.keys()):
node_inscrit_totore['email'] = inscription_data["email"]
else:
node_inscrit_totore['email'] = ""
if ("nom" in inscription_data.keys()):
node_inscrit_totore['nom'] = inscription_data["nom"]
else:
node_inscrit_totore['nom'] = ""
if ("prenom" in inscription_data.keys()):
node_inscrit_totore['prenom'] = inscription_data["prenom"]
else:
node_inscrit_totore['prenom'] = ""
if ("civilite" in inscription_data.keys()):
node_inscrit_totore['civilite'] = inscription_data["civilite"]
else:
node_inscrit_totore['civilite'] = ""
if ("telephone" in inscription_data.keys()):
node_inscrit_totore['telephone'] = inscription_data["telephone"]
else:
node_inscrit_totore['telephone'] = ""
if ("apprenant_id" in inscription_data.keys()):
node_inscrit_totore['apprenant_id'] = inscription_data["apprenant_id"]
else:
node_inscrit_totore['apprenant_id'] = ""
if ("session_id" in inscription_data.keys()):
node_inscrit_totore['session_id'] = inscription_data["session_id"]
else:
node_inscrit_totore['session_id'] = ""
if ("date_naissance" not in inscription_data.keys() or str(inscription_data['date_naissance']) == ""):
node_inscrit_totore['date_naissance'] = "01/01/1900"
else:
node_inscrit_totore['date_naissance'] = inscription_data["date_naissance"]
if( "session_id" in inscription_data.keys() and ObjectId.is_valid(inscription_data['session_id']) ):
session_data = MYSY_GV.dbname['session_formation'].find_one({'_id':ObjectId(str(inscription_data['session_id'])),
'partner_owner_recid':my_partner['recid']})
if ("code_session" in session_data.keys()):
node_inscrit_totore['code_session'] = session_data["code_session"]
else:
node_inscrit_totore['code_session'] = ""
if ("titre" in session_data.keys()):
node_inscrit_totore['session_titre'] = session_data["titre"]
else:
node_inscrit_totore['session_titre'] = ""
if ("date_debut" in session_data.keys()):
node_inscrit_totore['date_debut'] = session_data["date_debut"]
else:
node_inscrit_totore['date_debut'] = ""
if ("date_fin" in session_data.keys()):
node_inscrit_totore['date_fin'] = session_data["date_fin"]
else:
node_inscrit_totore['date_fin'] = ""
if ("mode_animation" in session_data.keys()):
node_inscrit_totore['mode_animation'] = session_data["mode_animation"]
else:
node_inscrit_totore['mode_animation'] = ""
if ("class_id" in session_data.keys()):
node_inscrit_totore['class_id'] = session_data["class_id"]
else:
node_inscrit_totore['class_id'] = ""
if( "class_id" in session_data.keys() and session_data['class_id']):
class_data = MYSY_GV.dbname['myclass'].find_one(
{'_id': ObjectId(str(session_data['class_id'])),
'partner_owner_recid': my_partner['recid']})
if ("title" in class_data.keys()):
node_inscrit_totore['class_title'] = class_data["title"]
else:
node_inscrit_totore['class_title'] = ""
node_inscrit_totore['id'] = str(val_tmp)
val_tmp = val_tmp + 1
RetObject.append(mycommon.JSONEncoder().encode(node_inscrit_totore))
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 récupérer la liste des inscrits tutorés "
"""
Cette fonction permet de modifier les données de tutorat.
/!\ : on ne peut modiier que le role et include_com
"""
def Update_RH_List_Insc_Tutore(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', 'rh_id', 'role', 'inscription_id', 'include_com']
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'existe pas")
return False, " Les informations fournies sont incorrectes",
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'rh_id', 'role', 'inscription_id', 'include_com']
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",
"""
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
if( diction['role'] not in MYSY_GV.TUTORAT_ROLE):
mycommon.myprint(
str(inspect.stack()[0][
3]) + " Le role de totorat est invalide ")
return False, " Le role de totorat est invalide",
"""
Verifier la validité de l'inscription
"""
is_valide_inscription = MYSY_GV.dbname['inscription'].count_documents(
{'_id': ObjectId(diction['inscription_id']),
'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0'})
if (is_valide_inscription != 1):
mycommon.myprint(str(
inspect.stack()[0][3]) + " L'identifiant de l'inscrit est invalide ")
return False, " L'identifiant de inscrit est invalide ",
inscription_data = MYSY_GV.dbname['inscription'].find_one(
{'_id': ObjectId(diction['inscription_id']),
'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0'})
"""
check validité RH
"""
is_rh_valide = MYSY_GV.dbname['ressource_humaine'].count_documents({"_id":ObjectId(str(diction['rh_id'])),
'partner_recid':my_partner['recid'],
'tab_inscription_id.inscription_id':str(diction['inscription_id'])})
if( is_rh_valide != 1):
mycommon.myprint(str(
inspect.stack()[0][3]) + " L'identifiant RH est invalide ")
return False, " L'identifiant RH est invalide ",
is_rh_valide = MYSY_GV.dbname['ressource_humaine'].count_documents({"_id": ObjectId(str(diction['rh_id'])),
'partner_recid': my_partner['recid'],
'tab_inscription_id.inscription_id': str(
diction['inscription_id'])})
update = MYSY_GV.dbname['ressource_humaine'].update_one({'partner_recid': str(my_partner['recid']),
'valide': '1', 'locked': '0',
'_id': ObjectId(str(diction['rh_id'])),
'tab_inscription_id.inscription_id': str(
diction['inscription_id'])
},
{
'$set': {
'tab_inscription_id.$[xxx].role': diction['role'],
'tab_inscription_id.$[xxx].include_com': diction['include_com'],
'tab_inscription_id.$[xxx].update_by':str(my_partner['_id']),
'tab_inscription_id.$[xxx].date_update': str(datetime.now()),
}
},
upsert=False,
array_filters=[
{"xxx.inscription_id": str(diction['inscription_id'])}
]
)
if (update.modified_count <= 0):
mycommon.myprint(
str(inspect.stack()[0][
3]) + " Impossible de mettre à jour le role (2) ")
return False, " Impossible de faire la mise à jour (2) "
# Logguer l'event
now = str(datetime.now().strftime("%d/%m/%Y %H:%M:%S"))
# print(" ####### laaaa diction = ", diction)
history_event_dict = {}
history_event_dict['token'] = token
history_event_dict['related_collection'] = "ressource_humaine"
history_event_dict['related_collection_recid'] = str(diction['rh_id'])
history_event_dict['action_date'] = str(now)
history_event_dict['action_description'] = "Modification du role de tutorat pour l'inscrit " + str(inscription_data['nom'])+" - "+str(inscription_data['prenom'])+" - "+str(inscription_data['email'])
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, " La mise à jour 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 faire la mise à jour "
"""
Cette fonction permet d'ajouter des apprenants tutorés.
"""
def Add_RH_List_Insc_Tutore(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', 'rh_id', 'role', 'inscription_id', 'include_com']
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'existe pas")
return False, " Les informations fournies sont incorrectes",
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'rh_id', 'role', 'inscription_id', 'include_com']
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",
"""
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
if( diction['role'] not in MYSY_GV.TUTORAT_ROLE):
mycommon.myprint(
str(inspect.stack()[0][
3]) + " Le role de totorat est invalide ")
return False, " Le role de totorat est invalide",
"""
Verifier la validité de l'inscription
"""
is_valide_inscription = MYSY_GV.dbname['inscription'].count_documents({'_id':ObjectId(diction['inscription_id']),
'partner_owner_recid':str(my_partner['recid']),
'valide':'1',
'locked':'0'})
if (is_valide_inscription != 1):
mycommon.myprint(str(
inspect.stack()[0][3]) + " L'identifiant de l'inscrit est invalide ")
return False, " L'identifiant de inscrit est invalide ",
inscription_data = MYSY_GV.dbname['inscription'].find_one(
{'_id': ObjectId(diction['inscription_id']),
'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0'})
"""
check validité RH
"""
is_rh_valide = MYSY_GV.dbname['ressource_humaine'].count_documents({"_id":ObjectId(str(diction['rh_id'])),
'partner_recid':my_partner['recid'],
})
if( is_rh_valide != 1):
mycommon.myprint(str(
inspect.stack()[0][3]) + " L'identifiant RH est invalide ")
return False, " L'identifiant RH est invalide ",
is_rh_valide = MYSY_GV.dbname['ressource_humaine'].count_documents({"_id": ObjectId(str(diction['rh_id'])),
'partner_recid': my_partner['recid'],
'tab_inscription_id.inscription_id': str(
diction['inscription_id'])})
"""
Pour eviter les doubons, on supprimer un eventuel inscrit deja présent
"""
MYSY_GV.dbname['ressource_humaine'].update_one({'partner_recid': str(my_partner['recid']),
'valide': '1', 'locked': '0',
'_id': ObjectId(str(diction['rh_id'])),
},
{"$pull": {"tab_inscription_id": {"inscription_id": diction['inscription_id']}}},
)
new_inscrit_totore = {}
new_inscrit_totore['inscription_id'] = diction['inscription_id']
new_inscrit_totore['role'] = diction['role']
new_inscrit_totore['include_com'] = diction['include_com']
new_inscrit_totore['creation_by'] = str(my_partner['_id'])
new_inscrit_totore['date_creation'] = str(datetime.now())
update = MYSY_GV.dbname['ressource_humaine'].update_one({'partner_recid': str(my_partner['recid']),
'valide': '1', 'locked': '0',
'_id': ObjectId(str(diction['rh_id'])),
},
{
'$push': {
"tab_inscription_id": {'$each': [new_inscrit_totore]},
}
},
)
# Logguer l'event
now = str(datetime.now().strftime("%d/%m/%Y %H:%M:%S"))
# print(" ####### laaaa diction = ", diction)
history_event_dict = {}
history_event_dict['token'] = token
history_event_dict['related_collection'] = "ressource_humaine"
history_event_dict['related_collection_recid'] = str(diction['rh_id'])
history_event_dict['action_date'] = str(now)
history_event_dict['action_description'] = "Ajout du role de tutorat pour l'inscrit " + str(
inscription_data['nom']) + " - " + str(inscription_data['prenom']) + " - " + str(inscription_data['email'])
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'inscrit a été correctement ajouté "
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 l'inscrit tutoré "
"""
Cette fontion permet de supprimer un inscrit tutoré d'un RH
"""
def Delete_RH_List_Insc_Tutore(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', 'rh_id', 'tab_inscription_id']
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'existe pas")
return False, " Les informations fournies sont incorrectes",
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'rh_id', 'tab_inscription_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 la liste des arguments ")
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
tab_inscription_id_work= ""
if ("tab_inscription_id" in diction.keys()):
if diction['tab_inscription_id']:
tab_inscription_id_work = diction['tab_inscription_id']
tab_inscription_id = []
for tmp in str(tab_inscription_id_work).split(","):
if( tmp):
tab_inscription_id.append(tmp)
"""
check validité RH
"""
is_rh_valide = MYSY_GV.dbname['ressource_humaine'].count_documents({"_id":ObjectId(str(diction['rh_id'])),
'partner_recid':my_partner['recid'],
})
if( is_rh_valide != 1):
mycommon.myprint(str(
inspect.stack()[0][3]) + " L'identifiant RH est invalide ")
return False, " L'identifiant RH est invalide ",
"""
Pour eviter les doubons, on supprimer un eventuel inscrit deja présent
"""
MYSY_GV.dbname['ressource_humaine'].update_one({'partner_recid': str(my_partner['recid']),
'valide': '1', 'locked': '0',
'_id': ObjectId(str(diction['rh_id'])),
},
{"$pull": {"tab_inscription_id": {"inscription_id":{'$in' : tab_inscription_id} }}},
)
# Logguer l'event
now = str(datetime.now().strftime("%d/%m/%Y %H:%M:%S"))
# print(" ####### laaaa diction = ", diction)
history_event_dict = {}
history_event_dict['token'] = token
history_event_dict['related_collection'] = "ressource_humaine"
history_event_dict['related_collection_recid'] = str(diction['rh_id'])
history_event_dict['action_date'] = str(now)
history_event_dict['action_description'] = "Suppression du role de tutorat pour la liste d'inscrits " + str(tab_inscription_id)
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, " La suppression 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 suppression les tutorés "