13/05/2025 - 17h

Signed-off-by: cherif <cherif.balde@yahoo.fr>
master
cherif 2025-05-13 17:36:29 +02:00
parent df36473a87
commit 1eb44d0383
17 changed files with 11946 additions and 45 deletions

View File

@ -1,11 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="08/05/2025 - 14h"> <list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="08/05/2025 - 19">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Dashbord_queries/common_tdb_qries.py" beforeDir="false" afterPath="$PROJECT_DIR$/Dashbord_queries/common_tdb_qries.py" 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$/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$/Session_Formation.py" beforeDir="false" afterPath="$PROJECT_DIR$/Session_Formation.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/agenda.py" beforeDir="false" afterPath="$PROJECT_DIR$/agenda.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/apprenant_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/apprenant_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/attestation_formation.py" beforeDir="false" afterPath="$PROJECT_DIR$/attestation_formation.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/base_class_calcul_note.py" beforeDir="false" afterPath="$PROJECT_DIR$/base_class_calcul_note.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/base_class_calcul_note.py" beforeDir="false" afterPath="$PROJECT_DIR$/base_class_calcul_note.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/class_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/class_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/groupe_inscrit_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/groupe_inscrit_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/jury_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/jury_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.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$/unite_enseignement_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/unite_enseignement_mgt.py" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -82,13 +95,6 @@
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1680804787304</updated> <updated>1680804787304</updated>
</task> </task>
<task id="LOCAL-00408" summary="13/10/2024 - sdf14h">
<created>1728994141092</created>
<option name="number" value="00408" />
<option name="presentableId" value="LOCAL-00408" />
<option name="project" value="LOCAL" />
<updated>1728994141094</updated>
</task>
<task id="LOCAL-00409" summary="13/10/2024 - sdfqsdqs14h"> <task id="LOCAL-00409" summary="13/10/2024 - sdfqsdqs14h">
<created>1729008318164</created> <created>1729008318164</created>
<option name="number" value="00409" /> <option name="number" value="00409" />
@ -425,7 +431,14 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1746706061005</updated> <updated>1746706061005</updated>
</task> </task>
<option name="localTasksCounter" value="457" /> <task id="LOCAL-00457" summary="08/05/2025 - 19">
<created>1746723725588</created>
<option name="number" value="00457" />
<option name="presentableId" value="LOCAL-00457" />
<option name="project" value="LOCAL" />
<updated>1746723725593</updated>
</task>
<option name="localTasksCounter" value="458" />
<servers /> <servers />
</component> </component>
<component name="Vcs.Log.Tabs.Properties"> <component name="Vcs.Log.Tabs.Properties">
@ -467,7 +480,6 @@
</option> </option>
</component> </component>
<component name="VcsManagerConfiguration"> <component name="VcsManagerConfiguration">
<MESSAGE value="17/01/2025 - 15:30" />
<MESSAGE value="18/01/2025 - 17h" /> <MESSAGE value="18/01/2025 - 17h" />
<MESSAGE value="20/01/2025 - 18h" /> <MESSAGE value="20/01/2025 - 18h" />
<MESSAGE value="30/01/2025 - 16h" /> <MESSAGE value="30/01/2025 - 16h" />
@ -492,6 +504,7 @@
<MESSAGE value="06/05/2025 - 20h" /> <MESSAGE value="06/05/2025 - 20h" />
<MESSAGE value="07/05/2025 - 20h" /> <MESSAGE value="07/05/2025 - 20h" />
<MESSAGE value="08/05/2025 - 14h" /> <MESSAGE value="08/05/2025 - 14h" />
<option name="LAST_COMMIT_MESSAGE" value="08/05/2025 - 14h" /> <MESSAGE value="08/05/2025 - 19" />
<option name="LAST_COMMIT_MESSAGE" value="08/05/2025 - 19" />
</component> </component>
</project> </project>

View File

@ -232,7 +232,7 @@ def Delete_To_User_Dashbord(diction):
'partner_owner_recid': str(my_partner['recid']) 'partner_owner_recid': str(my_partner['recid'])
} }
print(" ### qry = ", qry)
is_existe_dashbord = MYSY_GV.dbname['user_dashbord'].count_documents( is_existe_dashbord = MYSY_GV.dbname['user_dashbord'].count_documents(
qry) qry)
@ -306,7 +306,7 @@ def Get_Connected_User_List_Dashbord(diction):
qry = {'valide':"1", 'locked':'0','partner_owner_recid':str(my_partner['recid']),'connected_id':str(my_partner['_id'])} qry = {'valide':"1", 'locked':'0','partner_owner_recid':str(my_partner['recid']),'connected_id':str(my_partner['_id'])}
print(" ### qry = ", qry)
for retval in MYSY_GV.dbname['user_dashbord'].find( qry): for retval in MYSY_GV.dbname['user_dashbord'].find( qry):

View File

@ -322,12 +322,14 @@ if (MYSY_ENV == "DEV"):
O365_SMTP_COUNT_port = 587 O365_SMTP_COUNT_port = 587
""" """
"""
# Tester le relay smtp perso (maison - DIRTY MAIL) # Tester le relay smtp perso (maison - DIRTY MAIL)
O365_SMTP_COUNT_password = 'cherif' O365_SMTP_COUNT_password = 'cherif'
O365_SMTP_COUNT_smtpsrv = "srvdmz.iexercice.com" O365_SMTP_COUNT_smtpsrv = "srvdmz.iexercice.com"
O365_SMTP_COUNT_user = "clientmail-vm2" O365_SMTP_COUNT_user = "clientmail-vm2"
O365_SMTP_COUNT_From_User = "clientmail-vm2@iexercice.com" O365_SMTP_COUNT_From_User = "clientmail-vm2@iexercice.com"
O365_SMTP_COUNT_port = 587 O365_SMTP_COUNT_port = 587
"""
""" """
# Tester le relay smtp perso (maison - mysy-training.fr) # Tester le relay smtp perso (maison - mysy-training.fr)
@ -338,6 +340,12 @@ if (MYSY_ENV == "DEV"):
O365_SMTP_COUNT_port = 587 O365_SMTP_COUNT_port = 587
""" """
O365_SMTP_COUNT_password = 'Xad47198'
O365_SMTP_COUNT_smtpsrv = "smtp.office365.com"
O365_SMTP_COUNT_user = "support@mysy-training.com"
O365_SMTP_COUNT_From_User = "support@mysy-training.com"
O365_SMTP_COUNT_port = 587
""" """

View File

@ -3821,7 +3821,7 @@ def Controle_AddStagiairetoClass_mass_for_many_session(saved_file=None, Folder=N
- partner_owner_recid - partner_owner_recid
""" """
qry = {'external_code':str(class_external_code), 'valide':'1', 'locked':'0', 'partner_owner_recid':str(partner_recid)} qry = {'external_code':str(class_external_code), 'valide':'1', 'locked':'0', 'partner_owner_recid':str(partner_recid)}
print(" ### qry = ", qry)
myclass_data_count = MYSY_GV.dbname['myclass'].count_documents(qry) myclass_data_count = MYSY_GV.dbname['myclass'].count_documents(qry)
#print(" ### myclass_data_count = ", myclass_data_count) #print(" ### myclass_data_count = ", myclass_data_count)
@ -4098,7 +4098,7 @@ def PrintAttendeeDetail_perSession(diction):
qry = {'session_id': str(diction['session_id']),'email': str(diction['attendee_email']), qry = {'session_id': str(diction['session_id']),'email': str(diction['attendee_email']),
'class_internal_url':str(diction['internal_url'])} 'class_internal_url':str(diction['internal_url'])}
print(" ### qry = ", qry)
local_Insc_retval = MYSY_GV.dbname['inscription'].find_one({'session_id': str(diction['session_id']), local_Insc_retval = MYSY_GV.dbname['inscription'].find_one({'session_id': str(diction['session_id']),
'email': str(diction['attendee_email']), 'email': str(diction['attendee_email']),
@ -4546,7 +4546,7 @@ def SendTrainingEvaluationEmail(diction):
'partner_owner_recid': str(partner_recid), 'partner_owner_recid': str(partner_recid),
} }
print(" ### qry = ", qry)
local_Insc_retval = MYSY_GV.dbname['inscription'].find_one({'session_id': str(diction['session_id']), local_Insc_retval = MYSY_GV.dbname['inscription'].find_one({'session_id': str(diction['session_id']),
'email': str(diction['attendee_email']), 'email': str(diction['attendee_email']),
'class_internal_url': str(diction['class_internal_url']), 'class_internal_url': str(diction['class_internal_url']),
@ -5342,7 +5342,7 @@ def GetListEvaluation_Session(diction):
val_tmp = 1 val_tmp = 1
qry = {'session_id': str(diction['session_id']), 'partner_owner_recid':str(partner_recid)} qry = {'session_id': str(diction['session_id']), 'partner_owner_recid':str(partner_recid)}
print(" #### qry = ", qry)
# Recuperation des infos de la formation # Recuperation des infos de la formation
for local_Insc_retval in MYSY_GV.dbname['inscription'].find({'session_id': str(diction['session_id']), 'partner_owner_recid':str(partner_recid)}): for local_Insc_retval in MYSY_GV.dbname['inscription'].find({'session_id': str(diction['session_id']), 'partner_owner_recid':str(partner_recid)}):
@ -8897,7 +8897,7 @@ def Get_List_Convocations_Stagiaire_With_Filter(diction):
'partner_owner_recid': str(my_partner['recid'])}, filt_courrier_template_type_document_ref_interne, 'partner_owner_recid': str(my_partner['recid'])}, filt_courrier_template_type_document_ref_interne,
filt_type_doc, filt_nom, filt_ref_interne ]} filt_type_doc, filt_nom, filt_ref_interne ]}
print(" #### qry = ", qry)
for retval in MYSY_GV.dbname['courrier_template'].find({'$and': [{'ref_interne': 'CONVOCATION_STAGIAIRE', for retval in MYSY_GV.dbname['courrier_template'].find({'$and': [{'ref_interne': 'CONVOCATION_STAGIAIRE',
'valide': '1', 'valide': '1',
@ -8994,7 +8994,7 @@ def Get_List_Emargement_With_Filter(diction):
'partner_owner_recid': str(my_partner['recid'])}, 'partner_owner_recid': str(my_partner['recid'])},
filt_type_doc ]} filt_type_doc ]}
print(" #### qry = ", qry)
for retval in MYSY_GV.dbname['courrier_template'].find({'$and': [{'ref_interne': 'EMARGEMENT', for retval in MYSY_GV.dbname['courrier_template'].find({'$and': [{'ref_interne': 'EMARGEMENT',
'valide': '1', 'valide': '1',
@ -11983,7 +11983,7 @@ def Export_Inscription_To_Excel_From_from_List_Id(diction):
qery_match = {'_id': {'$in': tab_id}, 'partner_owner_recid': str(my_partner['recid']), 'valide': '1', qery_match = {'_id': {'$in': tab_id}, 'partner_owner_recid': str(my_partner['recid']), 'valide': '1',
'locked': '0'} 'locked': '0'}
print(" #### qry = ", qery_match)
list_class_datas = MYSY_GV.dbname['myclass'].find({'_id': {'$in': tab_id}, list_class_datas = MYSY_GV.dbname['myclass'].find({'_id': {'$in': tab_id},
'partner_owner_recid': str(my_partner['recid']), 'partner_owner_recid': str(my_partner['recid']),
}, {'_id': 0, }, {'_id': 0,
@ -12764,14 +12764,17 @@ def Get_Accepted_Insription_From_Session_id_Reduice_Fields(diction):
{'_id':1, 'email':1, {'_id':1, 'email':1,
'session_id':1, 'session_id':1,
'apprenant_id':1, 'apprenant_id':1,
'nom': 1,
'prenom': 1,
}).sort([("_id", pymongo.DESCENDING), ]): }).sort([("_id", pymongo.DESCENDING), ]):
val_tmp = val_tmp + 1 val_tmp = val_tmp + 1
user = retval user = retval
user['id'] = str(val_tmp) user['id'] = str(val_tmp)
apprenant_nom = "" apprenant_nom = str(retval['nom'])
apprenant_prenom = "" apprenant_prenom = str(retval['prenom'])
apprenant_email = "" apprenant_email = str(retval['email'])
# Si il a un apprenant_id # Si il a un apprenant_id
# print(" ### retVal = ", retVal ) # print(" ### retVal = ", retVal )
@ -12803,6 +12806,135 @@ def Get_Accepted_Insription_From_Session_id_Reduice_Fields(diction):
return False, "Impossible de récupérer la liste des stagiaires de la formation" return False, "Impossible de récupérer la liste des stagiaires de la formation"
"""
Cette fonction prend l'_id d'une session et retourne les inscriptions qui sont validé et celle en cours de validation
(statut IN [0, 1, 2]
avec un nombre de champs limité
"""
def Get_Insription_From_Session_id_Reduice_Fields_With_Filter(diction):
try:
field_list = ['token', 'session_id', 'tab_statut_ids']
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, "de récupérer la liste des stagiaires . Toutes les informations fournies ne sont pas valables"
"""
Verification de la liste des champs obligatoires
"""
field_list_obligatoire = ['token', 'session_id']
for val in field_list_obligatoire:
if val not in diction:
mycommon.myprint(
str(inspect.stack()[0][3]) + " - : La valeur '" + val + "' n'est pas presente dans liste ")
return False, "Impossible de récupérer la liste des stagiaires, 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']
# Verifier la validité du token
retval = mycommon.check_partner_token_validity("", mytoken)
if retval is False:
return "Err_Connexion", " La session de connexion n'est pas valide"
partner_recid = mycommon.get_parnter_recid_from_token(mytoken)
if (partner_recid is False):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de récupérer la liste des stagiaires, ")
return False, "Impossible de récupérer la liste des stagiaires, Les informations d'identification sont incorrectes "
class_internal_url = ""
if ("class_internal_url" in diction.keys()):
if diction['class_internal_url']:
class_internal_url = diction['class_internal_url']
session_id = ""
if ("session_id" in diction.keys()):
if diction['session_id']:
session_id = diction['session_id']
tab_statut_ids = ""
tab_statut_ids_filter = {}
if ("tab_statut_ids" in diction.keys()):
if diction['tab_statut_ids']:
tab_statut_ids = diction['tab_statut_ids']
tab_statut_ids_splited = str(tab_statut_ids).split(",")
## Recuperation de toutes les stagiaire rattaché à cette session
myquery = {}
myquery['session_id'] = session_id
myquery['status'] = "1"
myquery['valide'] = "1"
if (len(tab_statut_ids_splited) > 0):
myquery['status'] = {'$in': tab_statut_ids_splited}
RetObject = []
val_tmp = 0
#print(" #### myquery 01111 = "+str(myquery))
for retval in MYSY_GV.dbname['inscription'].find(myquery,
{'_id':1, 'email':1,
'session_id':1,
'apprenant_id':1,
'nom':1,
'prenom':1,
}).sort([("_id", pymongo.DESCENDING), ]):
val_tmp = val_tmp + 1
user = retval
user['id'] = str(val_tmp)
apprenant_nom = str(retval['nom'])
apprenant_prenom = str(retval['prenom'])
apprenant_email = str(retval['email'])
# Si il a un apprenant_id
# print(" ### retVal = ", retVal )
if ("apprenant_id" in retval.keys()):
if (retval['apprenant_id'] and str(retval['apprenant_id']) != 'undefined'):
apprenant_retval = MYSY_GV.dbname['apprenant'].find_one(
{'_id': ObjectId(retval['apprenant_id']),
'valide': '1', 'locked': '0'})
if (apprenant_retval is not None):
apprenant_nom = apprenant_retval['nom']
apprenant_prenom = apprenant_retval['prenom']
apprenant_email = apprenant_retval['email']
user['apprenant_nom'] = apprenant_nom
user['apprenant_prenom'] = apprenant_prenom
user['apprenant_email'] = apprenant_email
user['groupe'] = ""
RetObject.append(mycommon.JSONEncoder().encode(user))
return True, RetObject
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, "Impossible de récupérer la liste des stagiaires de la formation"
""" """
Cette fonction retourne la liste des UE aux quelles un apprenant est inscrit Cette fonction retourne la liste des UE aux quelles un apprenant est inscrit
""" """
@ -13148,7 +13280,7 @@ def Get_List_Inscrit_OF_UE_And_Type_Evaluation_with_filter(diction):
'type_evaluation_id': {'$in': tab_type_eval_id}, 'type_evaluation_id': {'$in': tab_type_eval_id},
} }
print(" qry = ", qry)
for retval in MYSY_GV.dbname['inscription_liste_ue_type_evalution'].find( qry ).sort([("_id", pymongo.DESCENDING), ]): for retval in MYSY_GV.dbname['inscription_liste_ue_type_evalution'].find( qry ).sort([("_id", pymongo.DESCENDING), ]):
user = {} user = {}

File diff suppressed because one or more lines are too long

View File

@ -13966,7 +13966,6 @@ def Client_Update_Liste_Attendee_No_Token(diction):
for val in JSON_attendee_response: for val in JSON_attendee_response:
print(" analyse de val = ", val)
# Verifier que les données envoyées sont valide avant de mettre à jour tous les participants # Verifier que les données envoyées sont valide avant de mettre à jour tous les participants
# Cette verification n'est faite que si val['_id'] != "new" # Cette verification n'est faite que si val['_id'] != "new"
@ -14009,6 +14008,7 @@ def Client_Update_Liste_Attendee_No_Token(diction):
new_presinscrit['status'] = "0" new_presinscrit['status'] = "0"
new_presinscrit['date_du'] = str(is_session_valide_data['date_debut']) new_presinscrit['date_du'] = str(is_session_valide_data['date_debut'])
new_presinscrit['date_au'] = str(is_session_valide_data['date_fin']) new_presinscrit['date_au'] = str(is_session_valide_data['date_fin'])
new_presinscrit['class_internal_url'] = str(is_session_valide_data['class_internal_url']) new_presinscrit['class_internal_url'] = str(is_session_valide_data['class_internal_url'])
@ -14049,6 +14049,8 @@ def Client_Update_Liste_Attendee_No_Token(diction):
new_presinscrit['type_apprenant'] = "0" new_presinscrit['type_apprenant'] = "0"
new_presinscrit['valide'] = "1" new_presinscrit['valide'] = "1"
new_presinscrit['locked'] = "0"
new_presinscrit['prenom'] = str(val['prenom']) new_presinscrit['prenom'] = str(val['prenom'])
new_presinscrit['date_creation'] = str(datetime.now()) new_presinscrit['date_creation'] = str(datetime.now())

View File

@ -55,7 +55,7 @@ def Add_Update_Agenda_Event(diction):
""" """
field_list = ['token', '_id', 'related_collection', 'event_title', 'event_start', 'event_end', 'related_collection_recid', 'comment', field_list = ['token', '_id', 'related_collection', 'event_title', 'event_start', 'event_end', 'related_collection_recid', 'comment',
'event_type', 'justified', 'linked_collection', 'linked_collection_recid', 'event_type', 'justified', 'linked_collection', 'linked_collection_recid',
'related_role'] 'related_role', 'ue_id']
incom_keys = diction.keys() incom_keys = diction.keys()
for val in incom_keys: for val in incom_keys:
@ -158,6 +158,12 @@ def Add_Update_Agenda_Event(diction):
event_type = str(diction['event_type']) event_type = str(diction['event_type'])
mydata['event_type'] = event_type mydata['event_type'] = event_type
ue_id = ""
if ("ue_id" in diction.keys()):
ue_id = str(diction['ue_id'])
mydata['ue_id'] = ue_id
justified = "" justified = ""
if ("justified" in diction.keys()): if ("justified" in diction.keys()):
justified = str(diction['justified']) justified = str(diction['justified'])
@ -464,6 +470,7 @@ def get_Agenda_Event_List(diction):
'partner_owner_recid':str(my_partner['recid']), 'valide':'1', 'locked':'0'} 'partner_owner_recid':str(my_partner['recid']), 'valide':'1', 'locked':'0'}
print(" agenda qry get = ", qry)
for New_retVal in MYSY_GV.dbname['agenda'].find({'related_collection':str(diction['related_collection']), 'related_collection_recid':str(diction['related_collection_recid']), for New_retVal in MYSY_GV.dbname['agenda'].find({'related_collection':str(diction['related_collection']), 'related_collection_recid':str(diction['related_collection_recid']),
'partner_owner_recid':str(my_partner['recid']), 'valide':'1', 'locked':'0'}): 'partner_owner_recid':str(my_partner['recid']), 'valide':'1', 'locked':'0'}):
@ -471,6 +478,26 @@ def get_Agenda_Event_List(diction):
user = New_retVal user = New_retVal
user['id'] = str(val_tmp) user['id'] = str(val_tmp)
val_tmp = val_tmp + 1 val_tmp = val_tmp + 1
# Recuperation des données de l'ue, si il y a un eu rattachée
ue_id = ""
ue_code = ""
if( "ue_id" in New_retVal.keys() and New_retVal['ue_id']):
eu_data = MYSY_GV.dbname['unite_enseignement'].find_one({'_id':ObjectId(str(New_retVal['ue_id'])),
'valide':'1',
'locked':'0',
'partner_owner_recid':str(my_partner['recid'])})
if( eu_data and 'code' in eu_data.keys() ) :
ue_code = eu_data['code']
ue_id = str(eu_data['_id'])
user['ue_id'] = ue_id
user['ue_code'] = ue_code
RetObject.append(mycommon.JSONEncoder().encode(user)) RetObject.append(mycommon.JSONEncoder().encode(user))
return True, RetObject return True, RetObject

View File

@ -100,7 +100,7 @@ def Add_Apprenant(diction):
'partner_owner_recid':str(my_partner['recid']), 'partner_owner_recid':str(my_partner['recid']),
'valide':'1'} 'valide':'1'}
print(" ### qry = ", qry)
is_apprenant_email_exist = MYSY_GV.dbname['apprenant'].count_documents({'email':str(diction['email']), is_apprenant_email_exist = MYSY_GV.dbname['apprenant'].count_documents({'email':str(diction['email']),
'partner_owner_recid':str(my_partner['recid']), 'partner_owner_recid':str(my_partner['recid']),

View File

@ -495,7 +495,7 @@ def Get_List_Modele_Attestion_Formation_With_Filter(diction):
'partner_owner_recid': str(my_partner['recid'])}, filt_courrier_template_type_document_ref_interne, 'partner_owner_recid': str(my_partner['recid'])}, filt_courrier_template_type_document_ref_interne,
filt_type_doc, filt_nom, filt_ref_interne ]} filt_type_doc, filt_nom, filt_ref_interne ]}
print(" #### qry = ", qry)
for retval in MYSY_GV.dbname['courrier_template'].find({'$and': [{'ref_interne': 'ATTESTATION_FORMATION', for retval in MYSY_GV.dbname['courrier_template'].find({'$and': [{'ref_interne': 'ATTESTATION_FORMATION',
'valide': '1', 'valide': '1',

View File

@ -319,6 +319,7 @@ def run_ue_pre_calcul_moyenne_somme(diction):
local_diction['session_id'] = diction['session_id'] local_diction['session_id'] = diction['session_id']
local_diction['ue_id'] = str(my_ue_id) local_diction['ue_id'] = str(my_ue_id)
local_diction['tab_inscriptions_ids'] = str(tab_inscriptions_ids) local_diction['tab_inscriptions_ids'] = str(tab_inscriptions_ids)
local_diction['tab_inscriptions_ids'] = str(tab_inscriptions_ids)
print(" ### local_diction = ", local_diction) print(" ### local_diction = ", local_diction)
@ -821,7 +822,8 @@ def Get_List_Evaluation_Final_Note_Classement_Detail_With_Filter(diction):
""" """
Verification des input acceptés Verification des input acceptés
""" """
field_list = ['token','class_external_code', 'tab_ue_id', 'tab_session_id', 'tab_inscrit_id'] field_list = ['token','class_external_code', 'tab_ue_id', 'tab_session_id', 'tab_inscrit_id',
'jury_apprenant_agenda_id']
incom_keys = diction.keys() incom_keys = diction.keys()
for val in incom_keys: for val in incom_keys:
@ -871,6 +873,20 @@ def Get_List_Evaluation_Final_Note_Classement_Detail_With_Filter(diction):
tab_inscrit_id = str(diction['tab_inscrit_id']).split(",") tab_inscrit_id = str(diction['tab_inscrit_id']).split(",")
if (len(tab_inscrit_id) > 0): if (len(tab_inscrit_id) > 0):
filt_inscrit_id = {'inscription_id': {'$in': tab_inscrit_id}} filt_inscrit_id = {'inscription_id': {'$in': tab_inscrit_id}}
filt_apprenant_id_from_jury_seance = {}
tab_inscription_id = []
if ("jury_apprenant_agenda_id" in diction.keys() and diction['jury_apprenant_agenda_id']):
for tmp in MYSY_GV.dbname['jury_apprenant'].find({'agenda_id': str(diction['jury_apprenant_agenda_id']),
'valide': '1',
'locked': '0',
'partner_owner_recid': str(my_partner['recid'])}):
tab_inscription_id.append(str(tmp['inscription_id']))
if (len(tab_inscription_id) > 0):
filt_apprenant_id_from_jury_seance = {'inscription_id': {'$in': tab_inscription_id}}
""" """
Clés de mise à jour Clés de mise à jour
""" """
@ -879,8 +895,9 @@ def Get_List_Evaluation_Final_Note_Classement_Detail_With_Filter(diction):
data_cle['valide'] = "1" data_cle['valide'] = "1"
data_cle['locked'] = "0" data_cle['locked'] = "0"
query = {"$and": [filt_session_id, filt_ue_id, data_cle, filt_inscrit_id]} query = {"$and": [filt_session_id, filt_ue_id, data_cle, filt_inscrit_id, filt_apprenant_id_from_jury_seance]}
print(" ### tetetet query = ",query)
RetObject = [] RetObject = []
val_tmp = 0 val_tmp = 0
@ -960,7 +977,8 @@ def Get_List_Evaluation_UE_Note_Classement_With_Filter(diction):
""" """
Verification des input acceptés Verification des input acceptés
""" """
field_list = ['token','class_external_code', 'tab_ue_id', 'tab_session_id', 'tab_inscrit_id'] field_list = ['token','class_external_code', 'tab_ue_id', 'tab_session_id', 'tab_inscrit_id',
'jury_apprenant_agenda_id']
incom_keys = diction.keys() incom_keys = diction.keys()
for val in incom_keys: for val in incom_keys:
@ -1011,6 +1029,22 @@ def Get_List_Evaluation_UE_Note_Classement_With_Filter(diction):
if (len(tab_inscrit_id) > 0): if (len(tab_inscrit_id) > 0):
filt_inscrit_id = {'inscription_id': {'$in': tab_inscrit_id}} filt_inscrit_id = {'inscription_id': {'$in': tab_inscrit_id}}
filt_apprenant_id_from_jury_seance = {}
tab_inscription_id = []
if ("jury_apprenant_agenda_id" in diction.keys() and diction['jury_apprenant_agenda_id']):
for tmp in MYSY_GV.dbname['jury_apprenant'].find({'agenda_id': str(diction['jury_apprenant_agenda_id']),
'valide': '1',
'locked': '0',
'partner_owner_recid': str(my_partner['recid'])}):
tab_inscription_id.append(str(tmp['inscription_id']))
if(len(tab_inscription_id) > 0 ):
filt_apprenant_id_from_jury_seance = {'inscription_id': {'$in': tab_inscription_id}}
""" """
Clés de mise à jour Clés de mise à jour
""" """
@ -1019,7 +1053,7 @@ def Get_List_Evaluation_UE_Note_Classement_With_Filter(diction):
data_cle['valide'] = "1" data_cle['valide'] = "1"
data_cle['locked'] = "0" data_cle['locked'] = "0"
query = {"$and": [filt_session_id, filt_ue_id, data_cle, filt_inscrit_id]} query = {"$and": [filt_session_id, filt_ue_id, data_cle, filt_inscrit_id, filt_apprenant_id_from_jury_seance]}
@ -1156,6 +1190,7 @@ def Get_List_Evaluation_Inscriptio_Note_Classement_With_Filter(diction):
data_cle['valide'] = "1" data_cle['valide'] = "1"
data_cle['session_id'] = str(diction['session_id']) data_cle['session_id'] = str(diction['session_id'])
RetObject = [] RetObject = []
val_tmp = 0 val_tmp = 0

View File

@ -1340,11 +1340,6 @@ def update_class(diction):
#print(" ### mydata = ", mydata) #print(" ### mydata = ", mydata)
# seules les formations avec locked = 0 et valide=1 sont modifiables # seules les formations avec locked = 0 et valide=1 sont modifiables
print(" QRY = ", {'internal_url': str(my_internal_url), 'partner_owner_recid':partner_recid, 'locked': '0', 'valide': '1',
'_id':ObjectId(str(diction['class_id']))})
print(" MY DATA = " , mydata)
ret_val = coll_name.find_one_and_update({'internal_url': str(my_internal_url), 'partner_owner_recid':partner_recid, 'locked': '0', 'valide': '1', ret_val = coll_name.find_one_and_update({'internal_url': str(my_internal_url), 'partner_owner_recid':partner_recid, 'locked': '0', 'valide': '1',
'_id':ObjectId(str(diction['class_id']))}, '_id':ObjectId(str(diction['class_id']))},
@ -6470,7 +6465,7 @@ def Export_Class_To_Excel_From_from_List_Id(diction):
qery_match = {'_id':{'$in':tab_id}, 'partner_owner_recid':str(my_partner['recid']), 'valide':'1', 'locked':'0'} qery_match = {'_id':{'$in':tab_id}, 'partner_owner_recid':str(my_partner['recid']), 'valide':'1', 'locked':'0'}
print(" #### qry = ", qery_match)
list_class_datas = MYSY_GV.dbname['myclass'].find({'_id':{'$in':tab_id}, list_class_datas = MYSY_GV.dbname['myclass'].find({'_id':{'$in':tab_id},
'partner_owner_recid':str(my_partner['recid']), 'partner_owner_recid':str(my_partner['recid']),
'valide':'1', 'locked':'0'},{'_id':0, 'internal_code':0, 'valide':'1', 'locked':'0'},{'_id':0, 'internal_code':0,

View File

@ -1000,9 +1000,6 @@ def Get_Given_Groupe_Membres(diction):
""" """
Cette fonction permet de supprimer des inscrits à un groupe (membre d'un groupe) Cette fonction permet de supprimer des inscrits à un groupe (membre d'un groupe)
""" """

File diff suppressed because it is too large Load Diff

150
main.py
View File

@ -5040,6 +5040,27 @@ def Get_Accepted_Insription_From_Session_id_Reduice_Fields():
return jsonify(status=status, message=retval) return jsonify(status=status, message=retval)
"""
API qui prend l'_id d'une session et retourne les inscriptions qui sont validé et celle en cours de validation
(statut IN [0, 1, 2]
avec un nombre de champs limité
"""
@app.route('/myclass/api/Get_Insription_From_Session_id_Reduice_Fields_With_Filter/', methods=['POST','GET'])
@crossdomain(origin='*')
def Get_Insription_From_Session_id_Reduice_Fields_With_Filter():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Get_Insription_From_Session_id_Reduice_Fields_With_Filter payload = ",payload)
status, retval = inscription.Get_Insription_From_Session_id_Reduice_Fields_With_Filter(payload)
return jsonify(status=status, message=retval)
""" """
API qui permet de recuperer la liste des UE associées à une incription API qui permet de recuperer la liste des UE associées à une incription
""" """
@ -9889,6 +9910,21 @@ def Get_List_Unite_Enseignement_Of_Given_Class():
"""
API pour recuperer les données d'une unité d'enseignement (UE) d'une formation donnée en partant de la session_id
"""
@app.route('/myclass/api/Get_List_Unite_Enseignement_Of_Given_Class_From_Session_Id/', methods=['POST','GET'])
@crossdomain(origin='*')
def Get_List_Unite_Enseignement_Of_Given_Class_From_Session_Id():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Get_List_Unite_Enseignement_Of_Given_Class_From_Session_Id payload = ",payload)
status, retval = unite_enseignement_mgt.Get_List_Unite_Enseignement_Of_Given_Class_From_Session_Id(payload)
return jsonify(status=status, message=retval)
""" """
API permet de recupérer les données d'une UE dans une formation données API permet de recupérer les données d'une UE dans une formation données
c'est a dire les detail : credit, is_noted, etc c'est a dire les detail : credit, is_noted, etc
@ -12321,6 +12357,21 @@ def Delete_Jury():
return jsonify(status=localStatus, message=message ) return jsonify(status=localStatus, message=message )
"""
API pour mettre supprimer une séance d'un Jury
"""
@app.route('/myclass/api/Delete_Jury_Seance/', methods=['POST','GET'])
@crossdomain(origin='*')
def Delete_Jury_Seance():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Delete_Jury_Seance : payload = ",payload)
localStatus, message= jury_mgt.Delete_Jury_Seance(payload)
return jsonify(status=localStatus, message=message )
""" """
API pour recuperer la liste des Jurys d'un partenaire API pour recuperer la liste des Jurys d'un partenaire
""" """
@ -12394,6 +12445,105 @@ def Add_Update_Jury_Team_Membres():
"""
API qui permet d'inscrire un apprenant 'inscrit_id' à un jury
"""
@app.route('/myclass/api/Add_Update_Apprenant_To_Jury/', methods=['POST','GET'])
@crossdomain(origin='*')
def Add_Update_Apprenant_To_Jury():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Add_Update_Apprenant_To_Jury : payload = ",payload)
localStatus, message, agenda_id= jury_mgt.Add_Update_Apprenant_To_Jury(payload)
return jsonify(status=localStatus, message=message, agenda_id=agenda_id )
"""
API qui permet de recuperer les apprenants inscrit à un jury
"""
@app.route('/myclass/api/Get_Given_Jury_Apprenant_With_Filter/', methods=['POST','GET'])
@crossdomain(origin='*')
def Get_Given_Jury_Apprenant_With_Filter():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Get_Given_Jury_Apprenant_With_Filter : payload = ",payload)
localStatus, message= jury_mgt.Get_Given_Jury_Apprenant_With_Filter(payload)
return jsonify(status=localStatus, message=message )
"""
API qui permet de supprimer des inscrits à un jury (membre d'un groupe)
"""
@app.route('/myclass/api/Delete_Jury_Apprenant_Membres/', methods=['POST','GET'])
@crossdomain(origin='*')
def Delete_Jury_Apprenant_Membres():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Delete_Jury_Apprenant_Membres : payload = ",payload)
localStatus, message= jury_mgt.Delete_Jury_Apprenant_Membres(payload)
return jsonify(status=localStatus, message=message )
"""
API pour ajouter et ou mettre à jour une soutenance de jury
"""
@app.route('/myclass/api/Add_Update_Jury_Soutenance/', methods=['POST','GET'])
@crossdomain(origin='*')
def Add_Update_Jury_Soutenance():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Add_Update_Jury_Soutenance : payload = ",payload)
localStatus, message= jury_mgt.Add_Update_Jury_Soutenance(payload)
return jsonify(status=localStatus, message=message )
"""
API pour recuperer la liste des soutenances d'un jury
"""
@app.route('/myclass/api/Get_List_Jury_Soutenenace/', methods=['POST','GET'])
@crossdomain(origin='*')
def Get_List_Jury_Soutenenace():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Get_List_Jury_Soutenenace : payload = ",payload)
localStatus, message= jury_mgt.Get_List_Jury_Soutenenace(payload)
return jsonify(status=localStatus, message=message )
"""
API pour recuperer les information d'une soutenances de jury donnée
"""
@app.route('/myclass/api/Get_Given_Jury_Soutenenace/', methods=['POST','GET'])
@crossdomain(origin='*')
def Get_Given_Jury_Soutenenace():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Get_Given_Jury_Soutenenace : payload = ",payload)
localStatus, message= jury_mgt.Get_Given_Jury_Soutenenace(payload)
return jsonify(status=localStatus, message=message )
"""
API pour supprimer la soutenances de jury donnée
"""
@app.route('/myclass/api/Delete_Given_Jury_Soutenenace/', methods=['POST','GET'])
@crossdomain(origin='*')
def Delete_Given_Jury_Soutenenace():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Delete_Given_Jury_Soutenenace : payload = ",payload)
localStatus, message= jury_mgt.Delete_Given_Jury_Soutenenace(payload)
return jsonify(status=localStatus, message=message )
if __name__ == '__main__': if __name__ == '__main__':
print(" debut api") print(" debut api")
context = SSL.Context(SSL.SSLv23_METHOD) context = SSL.Context(SSL.SSLv23_METHOD)

View File

@ -2037,7 +2037,7 @@ def GerneratePDF_Partner_Invoice(diction):
'related_collection_id':str(Order_header_data['_id']), 'related_collection_id':str(Order_header_data['_id']),
'partner_owner_recid':str(my_partner['recid'])} 'partner_owner_recid':str(my_partner['recid'])}
print(" qry = ", qry)
e_Invoice_Secure_Data = MYSY_GV.dbname['e_document_signe'].find_one({'_id':ObjectId(str(Order_header_data['e_document_signe_id'])), e_Invoice_Secure_Data = MYSY_GV.dbname['e_document_signe'].find_one({'_id':ObjectId(str(Order_header_data['e_document_signe_id'])),
'valide':'1', 'valide':'1',
'locked':'0', 'locked':'0',
@ -2928,7 +2928,7 @@ def Send_Partner_Invoice_By_Email(tab_files, Folder, diction):
'related_collection_id': str(Invoice_header_data['_id']), 'related_collection_id': str(Invoice_header_data['_id']),
'partner_owner_recid': str(my_partner['recid'])} 'partner_owner_recid': str(my_partner['recid'])}
print(" qry = ", qry)
e_Invoice_Secure_Data = MYSY_GV.dbname['e_document_signe'].find_one( e_Invoice_Secure_Data = MYSY_GV.dbname['e_document_signe'].find_one(
{'_id': ObjectId(str(Invoice_header_data['e_document_signe_id'])), {'_id': ObjectId(str(Invoice_header_data['e_document_signe_id'])),
'valide': '1', 'valide': '1',

View File

@ -6324,6 +6324,7 @@ def Get_Inscrit_And_Apprenant_Data(diction):
if (local_status is not True): if (local_status is not True):
return local_status, my_partner return local_status, my_partner
is_inscription_valide_count = MYSY_GV.dbname['inscription'].count_documents({'_id': ObjectId(str(diction['inscrit_id'])), is_inscription_valide_count = MYSY_GV.dbname['inscription'].count_documents({'_id': ObjectId(str(diction['inscrit_id'])),
'partner_owner_recid': str( 'partner_owner_recid': str(
my_partner['recid']), my_partner['recid']),

View File

@ -826,6 +826,150 @@ def Get_List_Unite_Enseignement_Of_Given_Class(diction):
return False, " Impossible de récupérer la liste des unites d'enseignement de la formation " return False, " Impossible de récupérer la liste des unites d'enseignement de la formation "
"""
Recuperer la liste des UE d'une formation donnée en partant de la session_id
"""
def Get_List_Unite_Enseignement_Of_Given_Class_From_Session_Id(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', 'session_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'est pas autorisé")
return False, " Les informations fournies sont incorrectes"
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'session_id']
for val in field_list_obligatoire:
if val not in diction:
mycommon.myprint(
str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans liste ")
return False, " Les informations fournies sont incorrectes"
"""
Verification de l'identité et autorisation de l'entité qui
appelle cette API
"""
token = ""
if ("token" in diction.keys()):
if diction['token']:
token = diction['token']
local_status, my_partner = mycommon.Check_Connexion_And_Return_Partner_Data(diction)
if (local_status is not True):
return local_status, my_partner
RetObject = []
val_tmp = 0
"""
Recuperer la class_id depuis la session_id
"""
session_data = MYSY_GV.dbname['session_formation'].find_one({'_id':ObjectId(str(diction['session_id'])),
'valide':'1',
"partner_owner_recid": str(my_partner['recid'])})
if( session_data is None or "class_internal_url" not in session_data.keys() ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " La session n'a pas de 'class_internal_url' ")
return True, RetObject
class_internal_url = session_data['class_internal_url']
qry = {"partner_owner_recid": str(my_partner['recid']), 'valide': '1', 'locked': '0',
'internal_url': str(class_internal_url)}
#print(" #### Get_List_Unite_Enseignement_Of_Given_Class qry = ", qry)
for New_retVal in MYSY_GV.dbname['myclass'].find(qry).sort([("_id", pymongo.DESCENDING), ]):
if( "list_unite_enseignement" in New_retVal.keys() ):
for local_val in New_retVal['list_unite_enseignement'] :
eu_class_coef = ""
if( "coefficient" in local_val.keys() and local_val['coefficient']):
eu_class_coef = local_val['coefficient']
eu_class_seuil_validation = ""
if ("seuil_validation" in local_val.keys() and local_val['seuil_validation']):
eu_class_seuil_validation = local_val['seuil_validation']
user = local_val
user['id'] = str(val_tmp)
val_tmp = val_tmp + 1
user['class_id'] = str(New_retVal['_id'])
user['internal_url'] = str(New_retVal['internal_url'])
"""
Recuperation des données associées à cette UE
"""
ue_data = MYSY_GV.dbname['unite_enseignement'].find_one({'partner_owner_recid':str(my_partner['recid']), 'valide':'1', 'locked':'0',
'_id':ObjectId(str(local_val['_id']))})
if( ue_data ):
for val in ue_data.keys() :
user[str(val)] = ue_data[str(val)]
if (str(ue_data['duration_unite']) == "heure"):
user['duration_concat'] = str(ue_data['duration']) + " h"
elif (str(ue_data['duration_unite']) == "jour"):
user['duration_concat'] = str(ue_data['duration']) + " j"
elif (str(ue_data['duration_unite']) == "semaine"):
user['duration_concat'] = str(ue_data['duration']) + " s"
elif (str(ue_data['duration_unite']) == "mois"):
user['duration_concat'] = str(ue_data['duration']) + " m"
elif (str(ue_data['duration_unite']) == "annee"):
user['duration_concat'] = str(ue_data['duration']) + " a"
else:
user['duration_concat'] = str(ue_data['duration']) + " ?"
# On ecrase les données si il y a les meme données sur la formation
if (eu_class_coef ):
user['coefficient'] = str(eu_class_coef)
if (eu_class_seuil_validation):
user['seuil_validation'] = str(eu_class_seuil_validation)
# Si il n'y a pas les infos dans les 2 cas, alors on met une valeur par defaut
if( "coefficient" not in user.keys()):
user['coefficient'] = "1"
if ("seuil_validation" not in user.keys()):
user['seuil_validation'] = "99"
RetObject.append(mycommon.JSONEncoder().encode(user))
#print(" #### RetObject = ", RetObject)
return True, RetObject
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de récupérer la liste des unites d'enseignement de la formation "
""" """
Cette fonction permet de recupérer les données d'une UE dans une formation données Cette fonction permet de recupérer les données d'une UE dans une formation données
c'est a dire les detail : credit, is_noted, etc c'est a dire les detail : credit, is_noted, etc