15/10/2023 - 22h40

master
cherif 2023-10-15 22:44:39 +02:00
parent adfb4bde79
commit 5270f012dc
8 changed files with 3844 additions and 11 deletions

View File

@ -3,13 +3,13 @@
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="08/10/2023 - 22h40"> <list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="08/10/2023 - 22h40">
<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$/Activite.py" beforeDir="false" afterPath="$PROJECT_DIR$/Activite.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Inscription_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/Inscription_mgt.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$/Template/MySy_annule_inscription_formation_tpl.html" beforeDir="false" afterPath="$PROJECT_DIR$/Template/MySy_annule_inscription_formation_tpl.html" 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$/class_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/class_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/lms_chamilo/mysy_lms.py" beforeDir="false" afterPath="$PROJECT_DIR$/lms_chamilo/mysy_lms.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.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> </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" />

View File

@ -45,7 +45,8 @@ def Add_activite(diction):
Verification des input acceptés Verification des input acceptés
""" """
field_list = ['token', "description", "detail", "deadline", "type", field_list = ['token', "description", "detail", "deadline", "type",
"status", 'related_collection', 'related_collection_owner_email', ] "status", 'related_collection', 'related_collection_owner_email',
'employee_assigned_to_id']
incom_keys = diction.keys() incom_keys = diction.keys()
for val in incom_keys: for val in incom_keys:
@ -100,6 +101,26 @@ def Add_activite(diction):
data = {} data = {}
data['partner_recid'] = my_partner['recid'] data['partner_recid'] = my_partner['recid']
employee_assigned_to_id = ""
if ("employee_assigned_to_id" in diction.keys()):
if diction['employee_assigned_to_id']:
employee_assigned_to_id = diction['employee_assigned_to_id']
## Verifier que l'employé assigné existe et est valide
is_employee_assigned_to_count = MYSY_GV.dbname['ressource_humaine'].count_documents(
{'_id': ObjectId(str(employee_assigned_to_id)), 'valide': '1', 'locked': '0',
'partner_recid': str(my_partner['recid'])})
if( is_employee_assigned_to_count != 1 ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - L'employé assigné est invalide")
return False, str(inspect.stack()[0][3]) + " - L'employé assigné est invalide "
data['employee_assigned_to_id'] = employee_assigned_to_id
description = "" description = ""
if ("description" in diction.keys()): if ("description" in diction.keys()):
if diction['description']: if diction['description']:
@ -233,7 +254,7 @@ def Update_activite(diction):
Verification des input acceptés Verification des input acceptés
""" """
field_list = ['token', "description", "detail", "deadline", "type", field_list = ['token', "description", "detail", "deadline", "type",
"status",'activite_recid' ] "status",'activite_recid' , 'employee_assigned_to_id']
incom_keys = diction.keys() incom_keys = diction.keys()
@ -347,7 +368,22 @@ def Update_activite(diction):
return False, " - La date deadline n'est pas au format jj/mm/aaaa " return False, " - La date deadline n'est pas au format jj/mm/aaaa "
employee_assigned_to_id = ""
if ("employee_assigned_to_id" in diction.keys()):
if diction['employee_assigned_to_id']:
employee_assigned_to_id = diction['employee_assigned_to_id']
## Verifier que l'employé assigné existe et est valide
is_employee_assigned_to_count = MYSY_GV.dbname['ressource_humaine'].count_documents(
{'_id': ObjectId(str(employee_assigned_to_id)), 'valide': '1', 'locked': '0',
'partner_recid': str(my_partner['recid'])})
if (is_employee_assigned_to_count != 1):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - L'employé assigné est invalide")
return False, str(inspect.stack()[0][3]) + " - L'employé assigné est invalide "
data_update['employee_assigned_to_id'] = diction['employee_assigned_to_id']
status = "" status = ""
if ("status" in diction.keys()): if ("status" in diction.keys()):
@ -584,6 +620,25 @@ def Get_Given_Activite(diction):
user = retval user = retval
user['id'] = str(val_tmp) user['id'] = str(val_tmp)
val_tmp = val_tmp + 1 val_tmp = val_tmp + 1
# Si le champ 'employee_assigned_to_id' alors on va chercher le nom et prenom de l'employe au quel est assigné la tache (employe)
if ('employee_assigned_to_id' in retval.keys()):
Employee_data = MYSY_GV.dbname['ressource_humaine'].find_one(
{'_id': ObjectId(str(retval['employee_assigned_to_id'])), 'valide': '1', 'locked': '0',
'partner_recid': str(my_partner['recid'])})
employee_assigned_to_nom_prenom = ""
if (Employee_data and 'nom' in Employee_data.keys()):
employee_assigned_to_nom_prenom = str(Employee_data['nom'])
if (Employee_data and 'prenom' in Employee_data.keys()):
employee_assigned_to_nom_prenom = str(employee_assigned_to_nom_prenom) + " " + str(
Employee_data['prenom'])
user['employee_assigned_to_nom_prenom'] = str(employee_assigned_to_nom_prenom)
RetObject.append(mycommon.JSONEncoder().encode(user)) RetObject.append(mycommon.JSONEncoder().encode(user))
#print(" ### RetObject = ", RetObject) #print(" ### RetObject = ", RetObject)

View File

@ -4640,9 +4640,11 @@ def AcceptAttendeeInscription(diction):
return False, " Impossible de valider l'inscription" return False, " Impossible de valider l'inscription"
""" """
Cette fonction supprime un stagiaire. Cette fonction supprime un stagiaire.
/!\ : seuls les preinscrit, ou les inscription annulés (donct status : 0 ou 1) /!\ : seuls les preinscrit, ou les inscription annulés (donc status : 0 ou -1)
""" """
def DeleteAttendeeInscription(diction): def DeleteAttendeeInscription(diction):
try: try:
@ -4755,7 +4757,83 @@ def DeleteAttendeeInscription(diction):
except Exception as e: except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info() exc_type, exc_obj, exc_tb = sys.exc_info()
print(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno)) print(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de supprimer l'insciption " return False, " Impossible de supprimer l'inscription "
"""
Fonction de suppression d'une liste de stagiaires en partant de l'_id, ceci si
les conditions sont reunies.
/!\ : seuls les preinscrit, ou les inscription annulés (donc status : 0 ou -1)
"""
def Delete_List_AttendeeInscription(diction):
try:
"""
Verification de la liste des champs obligatoires
"""
field_list_obligatoire = ['token', 'list_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 liste ")
return False, " Les informations fournies ne sont pas correctes"
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 le recid du partenaire")
return False, "Impossible de récupérer le recid du partenaire"
list_inscription_id = []
if ("list_inscription_id" in diction.keys()):
if diction['list_inscription_id']:
list_inscription_id = str(diction['list_inscription_id']).replace(",", ";").split(";")
data_mail = {}
for inscription_id in list_inscription_id :
# Verification que l'inscription existe et qu'elle est supprimable (donc status = 0 ou -1)
ret_val2_count = MYSY_GV.dbname['inscription'].count_documents(
{'_id': ObjectId(str(inscription_id)), },
)
if( ret_val2_count != 1):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de supprimer l'inscription. Il y a plusieurs inscription pour ce mail et cette formation")
return False, " Impossible de supprimer l'inscription (1)"
ret_val2 = MYSY_GV.dbname['inscription'].find_one(
{'_id': ObjectId(str(inscription_id)),},
)
if( "status" in ret_val2.keys()):
if( str(ret_val2['status']) != "0" and str(ret_val2['status']) != "-1"):
mycommon.myprint(str(inspect.stack()[0][
3]) + " - Impossible de supprimer l'inscription de l'utilisateur "+str(ret_val2['email'])+" à la session "+str(ret_val2['session_id'])+". L'inscription doit être annulée ou à l'etat 'préinscrit' avant d'être supprimé")
return False, " Impossible de supprimer l'inscription de l'utilisateur "+str(ret_val2['email'])+" à la session "+str(ret_val2['session_id'])+". L'inscription doit être annulée ou à l'etat 'préinscrit' avant d'être supprimé"
for inscription_id in list_inscription_id:
detlete_retval = MYSY_GV.dbname['inscription'].delete_one(
{'_id': ObjectId(str(inscription_id)),},
)
return True, "La liste des inscriptions a été correctement supprimée"
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 de supprimer la liste des inscriptions "

File diff suppressed because it is too large Load Diff

View File

@ -2586,3 +2586,96 @@ def Delete_SessionFormation(diction):
exc_type, exc_obj, exc_tb = sys.exc_info() exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno)) mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, "Impossible de supprimer la session de formation" return False, "Impossible de supprimer la session de formation"
"""
Cette fonction prends une liste '_id' de session et effectue la suppresion
si les conditions sont remplie.
list_session_id = ['id1', 'id2', 'id3,]
"""
def Delete_List_SessionFormation(diction):
try:
field_list = ['token', 'list_session_id', ]
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list:
mycommon.myprint(str(inspect.stack()[0][
3]) + " - Le champ '" + val + "' n'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', 'list_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]) + " - Les informations d'identification sont incorrectes ")
return False, "Impossible de récupérer la liste des stagiaires, Les informations d'identification sont incorrectes "
list_session_id = []
if ("list_session_id" in diction.keys()):
if diction['list_session_id']:
list_session_id = str(diction['list_session_id']).replace(",", ";").split(";")
# Verifier qu'il n'y a pas d'incription valide
for session_id in list_session_id :
inscription_count_qry = {'session_id':str(session_id), 'status':{'$in':['0', '1', '2']} , 'partner_owner_recid':str(partner_recid)}
#print(" #### inscription_count_qry aa =", inscription_count_qry)
inscription_count = MYSY_GV.dbname['inscription'].count_documents(inscription_count_qry)
if( inscription_count > 0 ):
session_formation_data = MYSY_GV.dbname['session_formation'].find_one({'_id':ObjectId(str(session_id)), 'partner_owner_recid':str(partner_recid)})
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de supprimer la session "+str(session_formation_data['code_session'])+". Vous avez "+str(inscription_count)+" inscriptions associées.Suppression en masse annulée ")
return False, "Impossible de supprimer la session "+str(session_formation_data['code_session'])+". Vous avez "+str(inscription_count)+" inscriptions associées. Suppression en masse annulée"
# Suppression des insciption eventuellement annulées
MYSY_GV.dbname['inscription'].delete_many({'session_id':{'$in':list_session_id}})
# Suppression des affectation de ressources associées
delete_affectation_qry = {'related_target_collection':'session_formation', 'related_target_collection_id':{'$in':list_session_id},
'partner_owner_recid': str(partner_recid)
}
# Pour les Ressource Humaine
MYSY_GV.dbname['ressource_humaine_affectation'].delete_many(delete_affectation_qry)
# Pour le materiel
MYSY_GV.dbname['ressource_materielle_affectation'].delete_many(delete_affectation_qry)
# Suppression des sessions
for session_id in list_session_id:
deleted_session_qry = {'_id':ObjectId(str(session_id)), 'partner_owner_recid':str(partner_recid)}
deleted_data = MYSY_GV.dbname['session_formation'].delete_many(deleted_session_qry)
mycommon.myprint(str(inspect.stack()[0][3]) + str(deleted_data.deleted_count)+" Document supprimé. La session_id " + str(
session_id) + " a été correctement supprimée ")
return True, "Les sessions ont correctement supprimées"
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 supprimer la liste des sessions de formation"

View File

@ -2249,6 +2249,34 @@ def get_partner_class(diction):
filt_external_code, filt_title, filt_internal_url]}, filt_external_code, filt_title, filt_internal_url]},
): ):
#mycommon.myprint(str(retVal)) #mycommon.myprint(str(retVal))
if ("title" not in retVal.keys()):
retVal['title'] = ""
if ("domain" not in retVal.keys()):
retVal['domain'] = ""
if ("metier" not in retVal.keys()):
retVal['metier'] = ""
if ("price" not in retVal.keys()):
retVal['price'] = "0"
if ("description" not in retVal.keys()):
retVal['description'] = ""
if ("published" not in retVal.keys()):
retVal['published'] = "0"
if ("lms_class_code" not in retVal.keys()):
retVal['lms_class_code'] = "0"
user = retVal user = retVal
user['id'] = str(val_tmp) user['id'] = str(val_tmp)
@ -2266,10 +2294,13 @@ def get_partner_class(diction):
i = i+1 i = i+1
user['zone_diffusion_str'] = str(tmp_zone_diffusion[:-1]) user['zone_diffusion_str'] = str(tmp_zone_diffusion[:-1])
RetObject.append(JSONEncoder().encode(user)) RetObject.append(JSONEncoder().encode(user))
val_tmp = val_tmp + 1 val_tmp = val_tmp + 1
#print(str(RetObject)) print(str(RetObject))
return True, RetObject return True, RetObject
@ -2407,6 +2438,37 @@ def find_partner_class_like(diction):
): ):
# mycommon.myprint(str(retVal)) # mycommon.myprint(str(retVal))
user = retVal user = retVal
if ("title" not in retVal.keys()):
retVal['title'] = ""
if ("domain" not in retVal.keys()):
retVal['domain'] = ""
if ("metier" not in retVal.keys()):
retVal['metier'] = ""
if ("price" not in retVal.keys()):
retVal['price'] = "0"
if ("description" not in retVal.keys()):
retVal['description'] = ""
if ("published" not in retVal.keys()):
retVal['published'] = "0"
if ("lms_class_code" not in retVal.keys()):
retVal['lms_class_code'] = "0"
user['id'] = str(val_tmp) user['id'] = str(val_tmp)
''' '''
@ -3176,10 +3238,43 @@ def Controle_add_class_mass(saved_file=None, Folder=None, diction=None):
mydata['external_code'] = str(df['external_code'].values[n]).strip() mydata['external_code'] = str(df['external_code'].values[n]).strip()
mydata['title'] = str(df['titre'].values[n]).strip() mydata['title'] = str(df['titre'].values[n]).strip()
mydata['domaine'] = str(df['domaine'].values[n]).strip() mydata['domaine'] = str(df['domaine'].values[n]).strip()
# Verifier que l'external code et le titre on bien des valeurs
if(len(str(mydata['external_code']).strip()) < 2):
mycommon.myprint(str(
inspect.stack()[0][3]) + " - Le code externe '" + str(
mydata['external_code']) + "' pour la formation à la ligne " + str(
n + 2) + " doit avoir plus de 2 caractères.")
return False, " - Le code externe '" + str(
mydata['external_code']) + "' pour la formation à la ligne " + str(
n + 2) + " doit avoir plus de 2 caractères."
# Verifier que le titre a plus 5 caractères
if (len(str(mydata['title']).strip()) < 5):
mycommon.myprint(str(
inspect.stack()[0][3]) + " - Le titre '" + str(
mydata['title']) + "' pour la formation à la ligne " + str(
n + 2) + " doit avoir plus de 5 caractères.")
return False, " - Le titre '" + str(
mydata['title']) + "' pour la formation à la ligne " + str(
n + 2) + " doit avoir plus de 5 caractères."
tmp_desc = str(df['description'].values[n]).strip() tmp_desc = str(df['description'].values[n]).strip()
tmp_desc = mycommon.format_MySy_Text_Tag(tmp_desc) tmp_desc = mycommon.format_MySy_Text_Tag(tmp_desc)
mydata['description'] = tmp_desc mydata['description'] = tmp_desc
# Verifier que la description a plus 5 caractères
if (len(str(mydata['description']).strip()) < 5):
mycommon.myprint(str(
inspect.stack()[0][3]) + " - La description '" + str(
mydata['description']) + "' pour la formation à la ligne " + str(
n + 2) + " doit avoir plus de 5 caractères.")
return False, " -La description '" + str(
mydata['description']) + "' pour la formation à la ligne " + str(
n + 2) + " doit avoir plus de 5 caractères."
""" """
Verifier que le domaine est bien dans la liste acceptée Verifier que le domaine est bien dans la liste acceptée
""" """
@ -3296,6 +3391,16 @@ def Controle_add_class_mass(saved_file=None, Folder=None, diction=None):
mydata['objectif'] = objectif mydata['objectif'] = objectif
# Verifier que l'objectif a plus 5 caractères
if (len(str(mydata['objectif']).strip()) < 5):
mycommon.myprint(str(
inspect.stack()[0][3]) + " - L'objectif '" + str(
mydata['objectif']) + "' pour la formation à la ligne " + str(
n + 2) + " doit avoir plus de 5 caractères.")
return False, " - L'objectif '" + str(
mydata['objectif']) + "' pour la formation à la ligne " + str(
n + 2) + " doit avoir plus de 5 caractères."
note = "" note = ""
if ("note" in df.keys()): if ("note" in df.keys()):
if (str(df['note'].values[n])): if (str(df['note'].values[n])):
@ -3911,6 +4016,101 @@ def delete_Class(diction):
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno)) mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de supprimer la formation " return False, " Impossible de supprimer la formation "
"""
Fonction de suppression des formations en masse, si les conditions sont reunies
"""
def delete_list_Class(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', 'list_class_id', ]
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list:
mycommon.myprint(str(
inspect.stack()[0][3]) + " Le champ '" + val + "' n'existe pas")
return False, " Les informations fournies sont incorrectes",
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'list_class_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']
# Verifier la validité du token
local_status, my_partner = mycommon.Check_Connexion_And_Return_Partner_Data(diction)
if (local_status is not True):
return local_status, my_partner
list_class_id = []
if ("list_class_id" in diction.keys()):
if diction['list_class_id']:
list_class_id = str(diction['list_class_id']).replace(",", ";").split(";")
for class_id in list_class_id :
# Receprer la liste des 'internal_url_"
Myclass_Data = MYSY_GV.dbname['myclass'].find_one({'_id':ObjectId(str(class_id)),
'partner_owner_recid':str(my_partner['recid'])})
if( Myclass_Data is None):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - La formation avec l'identifiant "+str(class_id)+ " est invalide ")
return False, "La formation avec l'identifiant "+str(class_id)+ "est invalide ",
# Verifier qu'il n'y a pas de session associée à cette formation
existe_Session_count = MYSY_GV.dbname['session_formation'].count_documents({'class_internal_url':str(Myclass_Data['internal_url']),
'partner_owner_recid':str(my_partner['recid']),
'valide':'1'})
if( existe_Session_count > 0 ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - La formation avec le code externe "+str(Myclass_Data['external_code'])+" a "+str(existe_Session_count)+" session(s) valide(s). Suppression impossible")
return False, "La formation avec le code externe "+str(Myclass_Data['external_code'])+" a "+str(existe_Session_count)+" session(s) valide(s). Suppression impossible"
for class_id in list_class_id :
# Receprer la liste des 'internal_url_"
Myclass_Data = MYSY_GV.dbname['myclass'].find_one({'_id':ObjectId(str(class_id)),
'partner_owner_recid':str(my_partner['recid'])})
# Une formation va etre supprimée, maintenant il faut supprimer les champs associés dans la collection "elaindex"
qry_elaindex_to_delete = {"partner_owner_recid": str(my_partner['recid']),
"id_formation": str(Myclass_Data['external_code'])}
MYSY_GV.dbname['elaindex'].delete_many(qry_elaindex_to_delete)
delete_doc = MYSY_GV.dbname['myclass'].delete_many({'_id':ObjectId(str(class_id)),
'partner_owner_recid':str(my_partner['recid'])})
return True, " La liste des formations a été supprimée"
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de supprimer la liste des formations "
""" """
Cette fonction supprime definitivement une formation, en utilisant l'internal_url Cette fonction supprime definitivement une formation, en utilisant l'internal_url

41
main.py
View File

@ -2033,6 +2033,18 @@ def Delete_SessionFormation():
return jsonify(status=localStatus, message=message ) return jsonify(status=localStatus, message=message )
"""
Suppression d'une liste de sessions de formation
"""
@app.route('/myclass/api/Delete_List_SessionFormation/', methods=['POST','GET'])
@crossdomain(origin='*')
def Delete_List_SessionFormation():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Delete_List_SessionFormation : payload = ",str(payload))
localStatus, message= SF.Delete_List_SessionFormation(payload)
return jsonify(status=localStatus, message=message )
@ -2148,6 +2160,21 @@ def delete_Class():
localStatus, message= cm.delete_Class(payload) localStatus, message= cm.delete_Class(payload)
return jsonify(status=localStatus, message=message ) return jsonify(status=localStatus, message=message )
"""
API de suppression d'une liste de formation en utilisant l'_id
"""
@app.route('/myclass/api/delete_list_Class/', methods=['POST','GET'])
@crossdomain(origin='*')
def delete_list_Class():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### delete_list_Class : payload = ",str(payload))
localStatus, message= cm.delete_list_Class(payload)
return jsonify(status=localStatus, message=message )
""" """
Cette API permet de supprimer une formation si elle n'a aucune session Cette API permet de supprimer une formation si elle n'a aucune session
de formation valide. la fonction utilise l'internal_url de formation valide. la fonction utilise l'internal_url
@ -3083,6 +3110,20 @@ def DeleteAttendeeInscription():
localStatus, message= inscription.DeleteAttendeeInscription(payload) localStatus, message= inscription.DeleteAttendeeInscription(payload)
return jsonify(status=localStatus, message=message ) return jsonify(status=localStatus, message=message )
"""
API de suppression en masse des stagiaires
"""
@app.route('/myclass/api/Delete_List_AttendeeInscription/', methods=['POST','GET'])
@crossdomain(origin='*')
def Delete_List_AttendeeInscription():
# On CancelAttendeeInscription le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Delete_List_AttendeeInscription : payload = ",payload)
localStatus, message= inscription.Delete_List_AttendeeInscription(payload)
return jsonify(status=localStatus, message=message )
""" """
API de d'annulation d'une inscription avec mise à jour du motif API de d'annulation d'une inscription avec mise à jour du motif
""" """

View File

@ -1243,7 +1243,7 @@ def Get_List_Ressource_Humaine_no_filter(diction):
data_cle['locked'] = "0" data_cle['locked'] = "0"
data_cle['valide'] = "1" data_cle['valide'] = "1"
data_cle['is_partner_admin_account'] = "0"
find_qry = {'partner_recid': str(my_partner['recid']), 'valide':'1', 'locked':'0' } find_qry = {'partner_recid': str(my_partner['recid']), 'valide':'1', 'locked':'0' }
@ -1256,7 +1256,9 @@ def Get_List_Ressource_Humaine_no_filter(diction):
user = retval user = retval
user['id'] = str(val_tmp) user['id'] = str(val_tmp)
val_tmp = val_tmp + 1 val_tmp = val_tmp + 1
RetObject.append(mycommon.JSONEncoder().encode(user)) is_admin_account_count = MYSY_GV.dbname['partnair_account'].count_documents({'ressource_humaine_id':str(retval['_id']), 'is_partner_admin_account':'1'}) # exclure les comptes admin
if( is_admin_account_count <= 0 ):
RetObject.append(mycommon.JSONEncoder().encode(user))
return True, RetObject return True, RetObject