diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 1702a4e..4858630 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,15 +4,30 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
@@ -453,7 +468,7 @@
1747251650255
-
+
@@ -495,7 +510,6 @@
-
@@ -520,6 +534,7 @@
-
+
+
\ No newline at end of file
diff --git a/Activite.py b/Activite.py
index 70ee4f1..af93c2b 100644
--- a/Activite.py
+++ b/Activite.py
@@ -219,7 +219,7 @@ def Add_activite(diction):
data['valide'] = '1'
data['locked'] = '0'
data['date_update'] = str(datetime.now())
- data['created_by'] = str(my_partner['_id'])
+ data['creation_by'] = str(my_partner['_id'])
print(" ### my_partner = ", my_partner)
@@ -666,7 +666,7 @@ def Get_List_Entity_Activite(diction):
data_cle['related_collection_recid'] = str(local_tmp_val['recid'])
data_cle['locked'] = "0"
- data_cle['created_by'] = str(my_partner['_id'])
+ data_cle['creation_by'] = str(my_partner['_id'])
diff --git a/Doc_tech/spec.txt b/Doc_tech/spec.txt
index dd1d0b0..3c7a019 100644
--- a/Doc_tech/spec.txt
+++ b/Doc_tech/spec.txt
@@ -15,9 +15,9 @@ Les attributs d'un cours :
- prix (gratuit, y euro)
- url
- Durée_formation
-- created_datetime
+- creation_datetime
- modified_datetime
-- created_by
+- creation_by
- modifed_by
diff --git a/E_Sign_Document.py b/E_Sign_Document.py
index 684c328..7fd8b6d 100644
--- a/E_Sign_Document.py
+++ b/E_Sign_Document.py
@@ -181,7 +181,7 @@ def Create_E_Document(diction):
new_diction['source_document'] = str(diction['source_document'])
new_diction['date_update'] = str(datetime.now())
new_diction['update_by'] = str(my_partner['_id'])
- new_diction['created_by'] = str(my_partner['_id'])
+ new_diction['creation_by'] = str(my_partner['_id'])
if( "type" in diction.keys() ):
new_diction['type'] = str(diction['type'])
@@ -299,7 +299,7 @@ def Create_E_Invoice(diction):
new_diction['source_document'] = str(diction['source_document'])
new_diction['date_update'] = str(datetime.now())
new_diction['update_by'] = str(my_partner['_id'])
- new_diction['created_by'] = str(my_partner['_id'])
+ new_diction['creation_by'] = str(my_partner['_id'])
if( "type" in diction.keys() ):
new_diction['type'] = str(diction['type'])
@@ -874,7 +874,7 @@ def Create_E_Signature_For_E_Document(file_img=None, Folder=None, diction=None):
e_document_date_2 = MYSY_GV.dbname['e_document_signe'].find_one(qry_key)
- user_created_e_document = MYSY_GV.dbname['partnair_account'].find_one({'_id':ObjectId(e_document_date_2['created_by']),
+ user_created_e_document = MYSY_GV.dbname['partnair_account'].find_one({'_id':ObjectId(e_document_date_2['creation_by']),
'active':'1',
'locked':'0',
})
@@ -1557,7 +1557,7 @@ def Create_E_Signature_For_E_Invoice(file_img=None, Folder=None, diction=None):
e_document_date_2 = MYSY_GV.dbname['e_document_signe'].find_one(qry_key)
user_created_e_document = MYSY_GV.dbname['partnair_account'].find_one(
- {'_id': ObjectId(e_document_date_2['created_by']),
+ {'_id': ObjectId(e_document_date_2['creation_by']),
'active': '1',
'locked': '0',
})
diff --git a/Inscription_mgt.py b/Inscription_mgt.py
index 9b05ee9..2ca140b 100644
--- a/Inscription_mgt.py
+++ b/Inscription_mgt.py
@@ -461,7 +461,7 @@ def AddStagiairetoClass(diction):
mydata['date_update'] = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
mydata['date_creation'] = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
mydata['update_by'] = str(connected_user_id)
- mydata['created_by'] = str(connected_user_id)
+ mydata['creation_by'] = str(connected_user_id)
mydata['valide'] = "1"
mydata['locked'] = "0"
@@ -4231,7 +4231,7 @@ def PrintAttendeeDetail_perSession(diction):
my_retrun_dict['date_eval'] = str(local_Insc_retval['eval_date'])[0:10]
v = local_Insc_retval['_id'].generation_time
- my_retrun_dict['created_date'] = str(v.strftime("%d/%m/%Y"))
+ my_retrun_dict['creation_date'] = str(v.strftime("%d/%m/%Y"))
my_retrun_dict['date_impression'] = str(datetime.today().strftime("%d/%m/%Y"))
@@ -8602,7 +8602,7 @@ def GetAttendeeDetail_perSession_from_line_id(diction):
my_retrun_dict['facture_client_rattachement_id'] = ""
v = local_Insc_retval['_id'].generation_time
- my_retrun_dict['created_date'] = str(v.strftime("%d/%m/%Y"))
+ my_retrun_dict['creation_date'] = str(v.strftime("%d/%m/%Y"))
# Recuperation des informations de la formation
local_formation = MYSY_GV.dbname['myclass'].find_one({'internal_url':str(local_Insc_retval['class_internal_url'])})
diff --git a/Job_Cron_Common.py b/Job_Cron_Common.py
index 5670d4b..3b11d34 100644
--- a/Job_Cron_Common.py
+++ b/Job_Cron_Common.py
@@ -1363,7 +1363,7 @@ def Cron_Create_One_Survey_To_Inscrit(diction):
new_survey_data['type'] = "1"
new_survey_data['date_update'] = str(datetime.now())
new_survey_data['update_by'] = str(my_partner['_id'])
- new_survey_data['created_by'] = str(my_partner['_id'])
+ new_survey_data['creation_by'] = str(my_partner['_id'])
print(" ~~~~ A inserer = new_survey_data = ", new_survey_data)
inserted_id = MYSY_GV.dbname['survey'].insert_one(new_survey_data).inserted_id
diff --git a/Session_Formation.py b/Session_Formation.py
index 4d12a02..87eb47f 100644
--- a/Session_Formation.py
+++ b/Session_Formation.py
@@ -111,13 +111,6 @@ def Add_Update_SessionFormation(diction):
"""
Verifier la validité de la formation
"""
- print(" session check QRY = ", {'internal_url':str(diction['class_internal_url']),
- 'partner_owner_recid':str(my_partner['recid']),
- 'valide':'1',
- 'locked':'0',
- '_id': {
- '$in': user_scope_class_id_ObjectId}
- })
is_class_valide = MYSY_GV.dbname['myclass'].count_documents({'internal_url':str(diction['class_internal_url']),
'partner_owner_recid':str(my_partner['recid']),
@@ -230,7 +223,6 @@ def Add_Update_SessionFormation(diction):
mydata['session_ondemande'] = "0"
-
if ("nb_participant" in diction.keys()):
nb_particants = str(mycommon.tryInt(str(diction['nb_participant'])))
if( nb_particants == "0" ):
@@ -498,6 +490,9 @@ def Add_Update_SessionFormation(diction):
.
"""
+
+ session_formtion_inserted_id = "" # J'aurais besoin de recuperer cette information après la creation de la session
+
Warning_Message = ""
if(len(str(session_id)) > 0 ):
# Il s'agit d'une mise à jour
@@ -512,10 +507,6 @@ def Add_Update_SessionFormation(diction):
existing_class_id = local_retval1['class_id']
current_step = local_retval1['session_etape']
-
-
-
-
local_retval = MYSY_GV.dbname['inscription'].count_documents({'session_id':str(existing_session_code),
'class_id':str(existing_class_id)})
@@ -578,7 +569,7 @@ def Add_Update_SessionFormation(diction):
if (len(str(session_id)) <= 0):
# La promotion n'existe pas, on fait une simple creation
- mydata['date_created'] = str(datetime.now())
+ mydata['creation_date'] = str(datetime.now())
"""
21/02/2025
@@ -598,8 +589,8 @@ def Add_Update_SessionFormation(diction):
for base_document_automatic_setup_for_partner in MYSY_GV.dbname['base_document_automatic_setup'].find(qry_automatic_setup):
new_local_data = base_document_automatic_setup_for_partner
new_local_data['statut'] = "0"
- new_local_data['created_date'] = str(datetime.now())
- new_local_data['created_by'] = str(my_partner['_id'])
+ new_local_data['creation_date'] = str(datetime.now())
+ new_local_data['creation_by'] = str(my_partner['_id'])
mydata['automatic_traitement'].append(new_local_data)
@@ -608,6 +599,7 @@ def Add_Update_SessionFormation(diction):
ret_val = coll_name.insert_one(mydata)
local_inserted_id = ret_val.inserted_id
+ session_formtion_inserted_id = ret_val.inserted_id
if (ret_val is None or not hasattr(ret_val, 'inserted_id') ):
mycommon.myprint(
@@ -615,6 +607,25 @@ def Add_Update_SessionFormation(diction):
diction['code_session']) + "' ")
return False, "Impossible d'ajouter La promotion '" + str(diction['code_session']) + "' "
+
+ """
+ 01/06/2025 - recuperer la configuration financière de la formation et la mettre sur la session
+ """
+ for financial_data in MYSY_GV.dbname['financial_caracteristic'].find({'partner_owner_recid':str(my_partner['recid']),
+ 'valide':'1',
+ 'locked':'0',
+ 'related_collection':'myclass',
+ 'related_collection_id':str(is_class_data['_id'])}):
+ del financial_data['_id']
+ financial_data['related_collection'] = "session_formation"
+ financial_data['related_collection_id'] = str(session_formtion_inserted_id)
+ financial_data['creation_date'] = str(datetime.now())
+ financial_data['creation_by'] = str(my_partner['_id'])
+
+ MYSY_GV.dbname['financial_caracteristic'].insert_one(financial_data)
+
+
+
"""
# Ajout de l'evenement dans l'historique
"""
@@ -4833,6 +4844,12 @@ def Delete_List_SessionFormation(diction):
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)
+ # Supprimer les financial_caracteristic
+ delete_financial_data = MYSY_GV.dbname['financial_caracteristic'].delete_many({'related_collection':'session_formation',
+ 'related_collection_id':str(session_id),
+ 'partner_owner_recid':str(my_partner['recid'])})
+
+
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 ")
cpt = cpt + 1
diff --git a/attached_file_mgt.py b/attached_file_mgt.py
index d98eebf..ee4bcef 100644
--- a/attached_file_mgt.py
+++ b/attached_file_mgt.py
@@ -194,8 +194,8 @@ def Store_User_Downloaded_File(file=None, Folder=None, diction=None):
mydata['valide'] = "1"
mydata['status'] = "0"
mydata['locked'] = "0"
- mydata['created_date'] = str(datetime.now())
- mydata['created_by'] = str(my_partner['_id'])
+ mydata['creation_date'] = str(datetime.now())
+ mydata['creation_by'] = str(my_partner['_id'])
ret_val = MYSY_GV.dbname['download_files'].find_one_and_update({'file_business_object': str(file_business_object),
'object_owner_collection':str(object_owner_collection),
@@ -339,8 +339,8 @@ def Internal_Usage_Store_User_Downloaded_File(Folder=None, diction=None):
mydata['valide'] = "1"
mydata['status'] = "0"
mydata['locked'] = "0"
- mydata['created_date'] = str(datetime.now())
- mydata['created_by'] = str(my_partner['_id'])
+ mydata['creation_date'] = str(datetime.now())
+ mydata['creation_by'] = str(my_partner['_id'])
ret_val = MYSY_GV.dbname['download_files'].find_one_and_update({'file_business_object': str(file_business_object),
'object_owner_collection':str(object_owner_collection),
@@ -683,10 +683,10 @@ def Get_List_object_owner_collection_Stored_Files(diction):
ret_file['file_business_object'] = retval['file_business_object']
- if ("created_date" in retval.keys()):
- ret_file['created_date'] = retval['created_date']
+ if ("creation_date" in retval.keys()):
+ ret_file['creation_date'] = retval['creation_date']
else:
- ret_file['created_date'] = "9999-99-99"
+ ret_file['creation_date'] = "9999-99-99"
if ("file_business_object" in retval.keys()):
@@ -1141,7 +1141,7 @@ def Get_List_object_owner_collection_Stored_Files_With_Filter(diction):
new_query = ([ {"$addFields": {
"mysy_download_files_date_creation": {
'$dateFromString': {
- 'dateString': {"$substr": ["$created_date", 0, 10]},
+ 'dateString': {"$substr": ["$creation_date", 0, 10]},
"format": "%Y-%m-%d"
}
}
@@ -1168,10 +1168,10 @@ def Get_List_object_owner_collection_Stored_Files_With_Filter(diction):
ret_file['file_business_object'] = retval['file_business_object']
- if ("created_date" in retval.keys()):
- ret_file['created_date'] = retval['created_date']
+ if ("creation_date" in retval.keys()):
+ ret_file['creation_date'] = retval['creation_date']
else:
- ret_file['created_date'] = "9999-99-99"
+ ret_file['creation_date'] = "9999-99-99"
if ("file_business_object" in retval.keys()):
ret_file['file_business_object'] = retval['file_business_object']
diff --git a/base_class_calcul_note.py b/base_class_calcul_note.py
index cee46a2..6bef7d1 100644
--- a/base_class_calcul_note.py
+++ b/base_class_calcul_note.py
@@ -755,7 +755,7 @@ def Cacul_UE_Note_Finale_For_calcul_mode_1(diction):
local_node['note_finale'] = str(note_finale_ue)
local_node['create_date'] = str(datetime.now())
- local_node['created_by'] = str(my_partner['_id'])
+ local_node['creation_by'] = str(my_partner['_id'])
local_node['valide'] = "1"
local_node['locked'] = "0"
local_node['partner_owner_recid'] = str(my_partner['recid'])
diff --git a/base_document_automatic_setup.py b/base_document_automatic_setup.py
index f1f36c6..330a948 100644
--- a/base_document_automatic_setup.py
+++ b/base_document_automatic_setup.py
@@ -155,7 +155,7 @@ def Add_Update_base_document_automatic_setup(diction):
diction['locked'] = "0"
diction['partner_owner_recid'] = str(my_partner['recid'])
diction['date_update'] = str(datetime.now())
- diction['date_created'] = str(datetime.now())
+ diction['creation_date'] = str(datetime.now())
diction['update_by'] = str(my_partner['_id'])
result = MYSY_GV.dbname['base_document_automatic_setup'].insert_one(diction)
diff --git a/class_mgt.py b/class_mgt.py
index f015961..1d1219a 100644
--- a/class_mgt.py
+++ b/class_mgt.py
@@ -60,7 +60,7 @@ def add_class(diction):
'support', 'img_banner_detail_class', 'source', 'lms_class_code', 'formateur_id',
'class_level', 'methode_pedagogique', 'condition_handicape', 'suivi_eval', 'class_id',
'version', 'categorie', 'recyclage_delai', 'recyclage_periodicite', 'recyclage_alert',
- 'contenu_attestation', 'note_finale_calculation_rule_id']
+ 'contenu_attestation', 'note_finale_calculation_rule_id', 'referentiel_padagogique_id']
incom_keys = diction.keys()
for val in incom_keys:
@@ -281,6 +281,24 @@ def add_class(diction):
mydata['note_finale_calculation_rule_id'] = str(note_finale_calculation_rule_id)
+ referentiel_padagogique_id = ""
+ if( "referentiel_padagogique_id" in diction.keys() and diction['referentiel_padagogique_id']):
+ is_valide_referentiel_padagogique_id_count = MYSY_GV.dbname['referentiel_padagogique'].count_documents({'_id':ObjectId(str(diction['referentiel_padagogique_id'])),
+ 'valide':'1',
+ 'locked':'0'})
+
+ if(is_valide_referentiel_padagogique_id_count != 1):
+ mycommon.myprint(str(
+ inspect.stack()[0][
+ 3]) + " L'identifiant du référentiel pédagogique est invalide ")
+ return False, " L'identifiant du référentiel pédagogique est invalide ", False
+
+ referentiel_padagogique_id = str(diction['referentiel_padagogique_id'])
+
+ mydata['referentiel_padagogique_id'] = str(referentiel_padagogique_id)
+
+
+
class_level = "0"
if ("class_level" in diction.keys()):
if diction['class_level']:
@@ -314,6 +332,10 @@ def add_class(diction):
certif = diction['certif']
mydata['certif'] = certif
+
+ # Gestion archive
+ mydata['archive'] = "0"
+
objectif = ""
if ("objectif" in diction.keys()):
if diction['objectif']:
@@ -808,7 +830,7 @@ def update_class(diction):
'duration_unit', 'source', 'lms_class_code', 'formateur_id', 'class_level','methode_pedagogique',
'condition_handicape', 'suivi_eval', 'class_id', 'version', 'categorie', 'recyclage_delai',
'recyclage_periodicite', 'recyclage_alert', 'contenu_attestation',
- 'note_finale_calculation_rule_id']
+ 'note_finale_calculation_rule_id', 'referentiel_padagogique_id']
incom_keys = diction.keys()
for val in incom_keys:
@@ -949,6 +971,27 @@ def update_class(diction):
else:
mydata['note_finale_calculation_rule_id'] = ""
+
+ if ("referentiel_padagogique_id" in diction.keys() ):
+ if( diction['referentiel_padagogique_id'] ):
+ is_valide_calculation_rule_id_count = MYSY_GV.dbname['referentiel_padagogique'].count_documents(
+ {'_id': ObjectId(str(diction['referentiel_padagogique_id'])),
+ 'valide': '1',
+ 'locked': '0'})
+
+ if (is_valide_calculation_rule_id_count != 1):
+ mycommon.myprint(str(
+ inspect.stack()[0][
+ 3]) + " L'identifiant du référentiel pédagogique est invalide ")
+ return False, " L'identifiant du référentiel pédagogique est invalide ", False
+
+ mydata['referentiel_padagogique_id']= str(diction['referentiel_padagogique_id'])
+
+ else:
+ mydata['referentiel_padagogique_id'] = ""
+
+
+
source = ""
if ("source" in diction.keys()):
mydata['source'] = diction['source']
@@ -1395,10 +1438,8 @@ def update_class(diction):
-
'''
Desactivation d'une formation
-
Disable a training, set mydata['valide'] = '0'
'''
def disable_class(diction):
@@ -1515,6 +1556,202 @@ def disable_class(diction):
return False, " Impossible de desactivier la formation "
+"""
+02/06/2025 : Archivage d'une formation
+"""
+def archive_class(diction):
+ try:
+
+ '''
+ # Verification que les champs reçus dans l'API sont bien dans la liste des champs autorisés
+ # Cela evite le cas ou une entité tierce ajouter les valeurs inconnu dans l'API
+ # Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste
+ # field_list.
+ '''
+ field_list = ['tab_class_id', 'token']
+ 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, Creation formation annulée")
+ return False, " Impossible de mettre à jour la formation"
+
+ '''
+ Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente,
+ On controle que les champs obligatoires sont presents dans la liste
+ '''
+ field_list_obligatoire = ['tab_class_id', 'token']
+
+ for val in field_list_obligatoire:
+ if val not in diction:
+ mycommon.myprint(str(inspect.stack()[0][3])+" - La valeur '" + val + "' n'est pas presente dans la liste des arguments ")
+ return False, " Impossible de mettre à jour la formation"
+
+ # recuperation des paramettre
+ mydata = {}
+ my_internal_url = ""
+
+ if ("token" in diction.keys()):
+ if diction['token']:
+ mydata['token'] = diction['token']
+
+ # Verification de la validité du token
+ tab_class_ids = []
+ tab_class_ids_ObjectId = []
+ if ("tab_class_id" in diction.keys()):
+ tab_class_ids = str(diction['tab_class_id']).split(",")
+
+ for tmp in tab_class_ids:
+ if (tmp):
+ tab_class_ids_ObjectId.append(ObjectId(tmp))
+
+ # Verification de 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
+
+ mydata['date_update'] = str(datetime.now())
+ mydata['update_by'] = str(my_partner['_id'])
+ mydata['archive'] = '1'
+
+
+ coll_name = MYSY_GV.dbname['myclass']
+
+ # seules les formations avec locked = 0 et valide=1 sont modifiables
+ ret_val = coll_name.update_many(
+ {'_id': {'$in': tab_class_ids_ObjectId}, 'valide': '1', 'locked': '0',
+ 'partner_owner_recid': str(my_partner['recid'])},
+ {"$set": mydata},
+
+ )
+
+ for class_id in tab_class_ids:
+ # pour la collection 'myclass'
+ now = str(datetime.now().strftime("%d/%m/%Y %H:%M:%S"))
+ # print(" ####### laaaa diction = ", diction)
+
+ history_event_dict = {}
+ history_event_dict['token'] = str(diction['token'])
+ history_event_dict['related_collection'] = "myclass"
+ history_event_dict['related_collection_recid'] = str(class_id)
+ history_event_dict['action_date'] = str(now)
+
+ history_event_dict['action_description'] = "Archivage "
+ 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, " Formation(s) archivée(s) "
+
+
+ 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'archiver les formations "
+
+"""
+02/06/2025 : Dearchivage d'une formation
+"""
+
+def unarchive_class(diction):
+ try:
+
+ '''
+ # Verification que les champs reçus dans l'API sont bien dans la liste des champs autorisés
+ # Cela evite le cas ou une entité tierce ajouter les valeurs inconnu dans l'API
+ # Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste
+ # field_list.
+ '''
+ field_list = ['tab_class_id', 'token']
+ 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, Creation formation annulée")
+ return False, " Impossible de mettre à jour la formation"
+
+ '''
+ Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente,
+ On controle que les champs obligatoires sont presents dans la liste
+ '''
+ field_list_obligatoire = ['tab_class_id', 'token']
+
+ for val in field_list_obligatoire:
+ if val not in diction:
+ mycommon.myprint(str(inspect.stack()[0][3])+" - La valeur '" + val + "' n'est pas presente dans la liste des arguments ")
+ return False, " Impossible de mettre à jour la formation"
+
+ # recuperation des paramettre
+ mydata = {}
+ my_internal_url = ""
+
+ if ("token" in diction.keys()):
+ if diction['token']:
+ mydata['token'] = diction['token']
+
+ tab_class_ids = []
+ tab_class_ids_ObjectId = []
+ if ("tab_class_id" in diction.keys()):
+ tab_class_ids = str(diction['tab_class_id']).split(",")
+
+ for tmp in tab_class_ids:
+ if( tmp ):
+ tab_class_ids_ObjectId.append(ObjectId(tmp))
+
+
+ # Verification de 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
+
+ mydata['date_update'] = str(datetime.now())
+ mydata['update_by'] = str(my_partner['_id'])
+
+ mydata['archive'] = '0'
+
+
+ coll_name = MYSY_GV.dbname['myclass']
+
+ # seules les formations avec locked = 0 et valide=1 sont modifiables
+ ret_val = coll_name.update_many(
+ {'_id':{'$in':tab_class_ids_ObjectId}, 'valide':'1', 'locked':'0',
+ 'partner_owner_recid':str(my_partner['recid'])},
+ {"$set": mydata}
+ )
+
+ for class_id in tab_class_ids :
+
+ # pour la collection 'myclass'
+ now = str(datetime.now().strftime("%d/%m/%Y %H:%M:%S"))
+ # print(" ####### laaaa diction = ", diction)
+
+ history_event_dict = {}
+ history_event_dict['token'] = str(diction['token'])
+ history_event_dict['related_collection'] = "myclass"
+ history_event_dict['related_collection_recid'] = str(class_id)
+ history_event_dict['action_date'] = str(now)
+
+ history_event_dict['action_description'] = "Desarchivage "
+ 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, " Formation(s) desarchivée(s) "
+
+
+ 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 désarchiver les formations "
+
+
+
'''
reactivation d'une formation
@@ -3102,7 +3339,7 @@ def get_partner_class(diction):
# Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste
# field_list.
'''
- field_list = ['internal_url', 'token', 'title', 'valide', 'locked', 'external_code']
+ field_list = ['internal_url', 'token', 'title', 'valide', 'locked', 'external_code', 'archive']
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
@@ -3217,7 +3454,15 @@ def get_partner_class(diction):
filt_internal_url = {}
if ("internal_url" in diction.keys()):
filt_internal_url = {'internal_url': str(diction['internal_url'])}
- #print(" filt_internal_url GRRRRRRRRRRRRRRRRRRRRrr "+str(filt_internal_url))
+
+ filt_archive = {}
+ if( "archive" in diction.keys() and ( diction["archive"] == "0" or diction["archive"] == "") ):
+ filt_archive = {'archive':{'$ne':'1'}}
+
+ elif( "archive" in diction.keys() and diction["archive"] == "1"):
+ filt_archive = {'archive':'1'}
+
+
"""
print(" ATTTTENNTION : GESTION DU CAS OU LA PERSONNE QUI CHERCHE LE COURS EST UN UTILISATEUR : PB avec : partner_owner_recid ")
@@ -3249,10 +3494,9 @@ def get_partner_class(diction):
filt_scope_class_id['_id'] = {'$in':tab_class_id_ObjectId}
-
for retVal in coll_name.find( {"$and":[ {'valide':'1'},{'locked':'0'},
{'partner_owner_recid':user_recid} ,
- filt_external_code, filt_title, filt_internal_url, filt_scope_class_id]},
+ filt_external_code, filt_title, filt_internal_url, filt_scope_class_id, filt_archive]},
{ 'indexed':0, 'indexed_desc':0,
'indexed_obj':0, 'indexed_title':0, }
).sort([("_id", pymongo.DESCENDING), ]):
@@ -3262,7 +3506,9 @@ def get_partner_class(diction):
#print(" #### retVal = ", retVal)
if ("title" not in retVal.keys()):
retVal['title'] = ""
-
+
+ if ("referentiel_padagogique_id" not in retVal.keys()):
+ retVal['referentiel_padagogique_id'] = ""
if ("domain" not in retVal.keys()):
retVal['domain'] = ""
@@ -3299,7 +3545,10 @@ def get_partner_class(diction):
if ("published" not in retVal.keys()):
retVal['published'] = "0"
-
+
+
+ if ("archive" not in retVal.keys()):
+ retVal['archive'] = "0"
if ("lms_class_code" not in retVal.keys()):
retVal['lms_class_code'] = "0"
@@ -3409,7 +3658,7 @@ def find_partner_class_like(diction):
# Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste
# field_list.
'''
- field_list = ['internal_url', 'token', 'title', 'valide', 'locked', 'external_code']
+ field_list = ['internal_url', 'token', 'title', 'valide', 'locked', 'external_code', 'archive']
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
@@ -3466,6 +3715,8 @@ def find_partner_class_like(diction):
if diction['title']:
title_crit['title'] = diction['title']
+
+
coll_name = MYSY_GV.dbname['myclass']
# verifier que le token et l'email sont ok
@@ -3512,6 +3763,15 @@ def find_partner_class_like(diction):
if ("title" in diction.keys()):
filt_title = {'title': {'$regex': str(diction['title']), "$options": "i"}}
+
+ filt_archive = {}
+ if ("archive" in diction.keys() and str(diction['archive']) == "1" ):
+ filt_archive = {'archive':'1'}
+
+ elif ("archive" in diction.keys() and (str(diction['archive']) == "0" or str(diction['archive']) == "") ):
+ filt_archive = {'archive':{'$ne':'1'}}
+
+
filt_internal_url = {}
if ("internal_url" in diction.keys()):
filt_internal_url = {'internal_url': {'$regex': str(diction['internal_url']), "$options": "i"}}
@@ -3519,9 +3779,9 @@ def find_partner_class_like(diction):
find_partner_class_like_local_qry = {"$and": [{'valide': '1'}, {'locked': '0'},
{'partner_owner_recid': user_recid},
- filt_external_code, filt_title, filt_internal_url]}
+ filt_external_code, filt_title, filt_internal_url, filt_archive]}
- #print(" ##### find_partner_class_like_local_qry = ", find_partner_class_like_local_qry)
+ #print(" ### find_partner_class_like_local_qry = ", find_partner_class_like_local_qry)
"""
Recuperation du nombre d'heure par jour depuis la confif du partner
@@ -3536,20 +3796,25 @@ def find_partner_class_like(diction):
currency = ""
+
val_tmp = 1
for retVal in coll_name.find({"$and": [{'valide': '1'}, {'locked': '0'},
{'partner_owner_recid': user_recid},
- filt_external_code, filt_title, filt_internal_url]},
+ filt_external_code, filt_title, filt_internal_url, filt_archive]},
{'programme':0, 'objectif': 0, 'indexed': 0, 'indexed_desc': 0,
'indexed_obj': 0, 'indexed_title': 0, }
).sort([("_id", pymongo.DESCENDING), ]):
- #mycommon.myprint(str(retVal))
+
+ #mycommon.myprint("retValretValretVal = "+ str(retVal))
user = retVal
if ("title" not in retVal.keys()):
retVal['title'] = ""
-
+
+
+ if ("referentiel_padagogique_id" not in retVal.keys()):
+ retVal['referentiel_padagogique_id'] = ""
if ("domain" not in retVal.keys()):
retVal['domain'] = ""
@@ -3563,11 +3828,13 @@ def find_partner_class_like(diction):
if ("pourqui" not in retVal.keys()):
retVal['pourqui'] = ""
+ if ("archive" not in retVal.keys()):
+ retVal['archive'] = "0"
+
if ("presentiel" not in retVal.keys()):
retVal['presentiel'] = {'presentiel':'0', 'distantiel':'0'}
-
if ("metier" not in retVal.keys()):
retVal['metier'] = ""
@@ -3590,6 +3857,10 @@ def find_partner_class_like(diction):
retVal['published'] = "0"
+ if ("archive" not in retVal.keys()):
+ retVal['archive'] = "0"
+
+
if ("lms_class_code" not in retVal.keys()):
retVal['lms_class_code'] = "0"
@@ -3665,6 +3936,8 @@ d'un parenaire mais seulement les champs :
- external_code,
- internal_code
- internal_url
+
+formation non archivée
"""
@@ -3719,13 +3992,12 @@ def Get_Partner_All_Class_Few_Fields(diction):
RetObject = []
val_tmp = 0
-
-
+ filt_archive = {'archive': {'$ne': '1'}}
for retVal in MYSY_GV.dbname['myclass'].find( {"$and":[
{'partner_owner_recid': my_partner['recid'],
'valide':'1',
- 'locked':'0'},filt_scope_class_id]},
+ 'locked':'0'},filt_scope_class_id, filt_archive]},
{'_id': 1, 'external_code': 1, 'internal_code': 1, 'internal_url': 1, }
).sort([("_id", pymongo.DESCENDING), ]):
# mycommon.myprint(str(retVal))
@@ -3865,6 +4137,8 @@ def get_partner_class_external_code(diction):
filt_internal_url = {'internal_url': {'$regex': str(diction['internal_url']), "$options": "i"}}
# print(" filt_internal_url GRRRRRRRRRRRRRRRRRRRRrr "+str(filt_internal_url))
+ filt_archive = {'archive': {'$ne': '1'}}
+
print(
" ATTTTENNTION : GESTION DU CAS OU LA PERSONNE QUI CHERCHE LE COURS EST UN UTILISATEUR : PB avec : partner_owner_recid ")
print(" #### avant requete get partner_owner_recid =" + str(user_recid) +
@@ -3875,7 +4149,7 @@ def get_partner_class_external_code(diction):
val_tmp = 1
for retVal in coll_name.find_one({"$and": [{'valide': '1'}, {'locked': '0'},
{'partner_owner_recid': user_recid},
- filt_external_code, filt_title, filt_internal_url]},
+ filt_external_code, filt_title, filt_internal_url, filt_archive]},
{'external_code':1, 'internal_url':1},
).sort([("external_code",pymongo.ASCENDING),]).sort([("_id", pymongo.DESCENDING), ]):
# mycommon.myprint(str(retVal))
@@ -3933,7 +4207,7 @@ def get_class_global_search(search_string):
my_regex = "/.*"+search_string+".*/"
insertObject = []
- for x in coll_name.find({'myindex': { '$regex': re.compile(r".*"+search_string+".*") }}):
+ for x in coll_name.find({'myindex': { '$regex': re.compile(r".*"+search_string+".*") }, 'archive':{'$ne':'1'}}):
mycommon.myprint(x)
user = x
insertObject.append(JSONEncoder().encode(user))
@@ -3954,7 +4228,7 @@ def get_all_class_by_attribut(attribut, value):
coll_name = MYSY_GV.dbname['myclass']
insertObject = []
- for x in coll_name.find({attribut: value}, {"_id": 0}):
+ for x in coll_name.find({attribut: value, 'archive':{'$ne':'1'}}, {"_id": 0}):
mycommon.myprint(x)
user = x
insertObject.append(JSONEncoder().encode(user))
diff --git a/competence.py b/competence.py
index adcc9d4..d3da3a6 100644
--- a/competence.py
+++ b/competence.py
@@ -110,8 +110,8 @@ def Add_Competence(diction):
if val not in diction.keys():
mydata[str(val)] = ""
- mydata['date_created'] = str(datetime.now())
- mydata['created_by'] = str(my_partner['_id'])
+ mydata['creation_date'] = str(datetime.now())
+ mydata['creation_by'] = str(my_partner['_id'])
mydata['partner_owner_recid'] = str(my_partner['recid'])
mydata['valide'] = "1"
mydata['locked'] = "0"
diff --git a/crm_opportunite.py b/crm_opportunite.py
index 1af79b0..2d02389 100644
--- a/crm_opportunite.py
+++ b/crm_opportunite.py
@@ -165,7 +165,7 @@ def Add_CRM_Opportunite(diction):
mydata['date_update'] = str(datetime.now())
mydata['update_by'] = str(my_partner['_id'])
- mydata['created_by'] = str(my_partner['_id'])
+ mydata['creation_by'] = str(my_partner['_id'])
mydata['partner_owner_recid'] = str(my_partner['recid'])
mydata['valide'] = "1"
mydata['locked'] = "0"
diff --git a/financial_caracteristique_mgt.py b/financial_caracteristique_mgt.py
index efb65e3..94ea325 100644
--- a/financial_caracteristique_mgt.py
+++ b/financial_caracteristique_mgt.py
@@ -129,8 +129,8 @@ def Add_Financial_Caracteristique(diction):
if val not in diction.keys():
mydata[str(val)] = ""
- mydata['date_created'] = str(datetime.now())
- mydata['created_by'] = str(my_partner['_id'])
+ mydata['creation_date'] = str(datetime.now())
+ mydata['creation_by'] = str(my_partner['_id'])
mydata['partner_owner_recid'] = str(my_partner['recid'])
mydata['valide'] = "1"
mydata['locked'] = "0"
@@ -316,6 +316,8 @@ def Get_Financial_Caracteristique_no_filter(diction):
qry = {"partner_owner_recid":str(my_partner['recid']), 'valide':'1', 'locked':'0',
'related_collection':str(diction['related_collection']), 'related_collection_id':str(diction['related_collection_id'])}
+ print(" ### Get_Financial_Caracteristique_no_filter QRY = ", qry)
+
for New_retVal in MYSY_GV.dbname['financial_caracteristic'].find(qry).sort([("_id", pymongo.DESCENDING), ]):
user = New_retVal
@@ -331,11 +333,11 @@ def Get_Financial_Caracteristique_no_filter(diction):
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 caractéristique financières "
+ return False, " Impossible de récupérer la liste des caractéristiques financières "
"""
-Suppression d'une compétence
+Suppression d'une liste de Financial_Caracteristique
"""
def Delete_List_Financial_Caracteristique(diction):
try:
@@ -389,7 +391,7 @@ def Delete_List_Financial_Caracteristique(diction):
ret_del_ca_fin = MYSY_GV.dbname['financial_caracteristic'].delete_many(qry)
- return True, "La caractéristique financière a été correctement supprimée"
+ return True, "Caractéristique financière supprimée(s)"
except Exception as e:
diff --git a/formulaire_mgt.py b/formulaire_mgt.py
index 39ce85c..86fd95b 100644
--- a/formulaire_mgt.py
+++ b/formulaire_mgt.py
@@ -116,7 +116,7 @@ def Add_Formulaire(diction):
mycommon.myprint(" Un formulaire avec le même code existe déjà ")
return False, " Un formulaire avec le même code existe déjà "
- mydata['date_created'] = str(datetime.now())
+ mydata['creation_date'] = str(datetime.now())
mydata['update_by'] = str(my_partner['_id'])
mydata['partner_owner_recid'] = str(my_partner['recid'])
mydata['valide'] = "1"
diff --git a/jury_mgt.py b/jury_mgt.py
index ca288c5..84b1fff 100644
--- a/jury_mgt.py
+++ b/jury_mgt.py
@@ -184,7 +184,7 @@ def Add_Jury(diction):
new_data['locked'] = "0"
new_data['create_date'] = str(datetime.now())
- new_data['created_by'] = str(my_partner['_id'])
+ new_data['creation_by'] = str(my_partner['_id'])
new_data['partner_owner_recid'] = str(my_partner['recid'])
inserted_id = MYSY_GV.dbname['jury'].insert_one(new_data).inserted_id
@@ -1711,7 +1711,7 @@ def Add_Update_Apprenant_To_Jury(diction):
new_soutenance_data['convocation_apprenant_send'] = "0"
new_soutenance_data['convocation_apprenant_date_sending'] = ""
new_soutenance_data['create_date'] = str(datetime.now())
- new_soutenance_data['created_by'] = str(my_partner['_id'])
+ new_soutenance_data['creation_by'] = str(my_partner['_id'])
soutenance_inserted_id = MYSY_GV.dbname['jury_soutenance'].insert_one(new_soutenance_data).inserted_id
@@ -1746,7 +1746,7 @@ def Add_Update_Apprenant_To_Jury(diction):
my_even_data['create_date'] = str(datetime.now())
- my_even_data['created_by'] = str(my_partner['_id'])
+ my_even_data['creation_by'] = str(my_partner['_id'])
agenda_inserted_id = MYSY_GV.dbname['agenda'].insert_one(my_even_data).inserted_id
diff --git a/lms_chamilo/mysy_lms.py b/lms_chamilo/mysy_lms.py
index 5cf0df6..b921a04 100644
--- a/lms_chamilo/mysy_lms.py
+++ b/lms_chamilo/mysy_lms.py
@@ -2297,7 +2297,7 @@ def LMS_Create_VirtualHost(diction):
full_url = unidecode(full_url)
virtualHost_url = full_url
- my_query = " INSERT INTO access_url (url, description, active, created_by, tms, url_type) "\
+ my_query = " INSERT INTO access_url (url, description, active, creation_by, tms, url_type) "\
" VALUES('"+str(full_url)+"', 'Url pour "+str(part_nom)+"', '1', '1', '"+str(registration_date)+"', NULL);"
try:
diff --git a/main.py b/main.py
index d33e11b..f606f48 100644
--- a/main.py
+++ b/main.py
@@ -99,6 +99,7 @@ import equipe_team_mgt as equipe_team_mgt
import base_class_calcul_note as base_class_calcul_note
import jury_mgt as jury_mgt
import financial_caracteristique_mgt as financial_caracteristique_mgt
+import reference_pedagogique_mgt as reference_pedagogique_mgt
import base_document_automatic_setup as base_document_automatic_setup
@@ -562,10 +563,37 @@ Desactivé une formation - disable training
def disable_class():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
- print(" ### payload = ",payload)
+ print(" ### disable_class payload = ",payload)
status, retval = cm.disable_class(payload)
return jsonify(status=status, message=retval)
+
+"""
+API pour archiver une formation
+"""
+@app.route('/myclass/api/archive_class/', methods=['POST'])
+@crossdomain(origin='*')
+def archive_class():
+ # On recupere le corps (payload) de la requete
+ payload = mycommon.strip_dictionary (request.form.to_dict())
+ print(" ### archive_class payload = ",payload)
+ status, retval = cm.archive_class(payload)
+ return jsonify(status=status, message=retval)
+
+
+"""
+API pour desarchiver une formation
+"""
+@app.route('/myclass/api/unarchive_class/', methods=['POST'])
+@crossdomain(origin='*')
+def unarchive_class():
+ # On recupere le corps (payload) de la requete
+ payload = mycommon.strip_dictionary (request.form.to_dict())
+ print(" ### unarchive_class payload = ",payload)
+ status, retval = cm.unarchive_class(payload)
+ return jsonify(status=status, message=retval)
+
+
'''
Reactivation d'une formation - enable training
'''
@@ -574,7 +602,7 @@ Reactivation d'une formation - enable training
def enable_class():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
- print(" ### payload = ",payload)
+ print(" ### enable_class payload = ",payload)
status, retval = cm.enable_class(payload)
return jsonify(status=status, message=retval)
@@ -12821,6 +12849,62 @@ def Delete_List_Financial_Caracteristique():
+"""
+API pour ajouter un référentiel pédagogique
+"""
+@app.route('/myclass/api/Add_Ref_Pedagogique/', methods=['POST','GET'])
+@crossdomain(origin='*')
+def Add_Ref_Pedagogique():
+ # On recupere le corps (payload) de la requete
+ payload = mycommon.strip_dictionary (request.form.to_dict())
+ print(" ### Add_Ref_Pedagogique : payload = ",str(payload))
+ status, retval = reference_pedagogique_mgt.Add_Ref_Pedagogique( payload)
+ return jsonify(status=status, message=retval)
+
+
+"""
+API pour mettre à jour un référentiel pédagogique
+"""
+@app.route('/myclass/api/Update_Ref_Pedagogique/', methods=['POST','GET'])
+@crossdomain(origin='*')
+def Update_Ref_Pedagogique():
+ # On recupere le corps (payload) de la requete
+ payload = mycommon.strip_dictionary (request.form.to_dict())
+ print(" ### Update_Ref_Pedagogique : payload = ",str(payload))
+ status, retval = reference_pedagogique_mgt.Update_Ref_Pedagogique( payload)
+ return jsonify(status=status, message=retval)
+
+
+
+"""
+API pour supprimer une liste des caractéristiques financières d'un couple related_collection / related_collection_id
+"""
+
+@app.route('/myclass/api/Delete_List_Ref_Pedagogique/', methods=['POST','GET'])
+@crossdomain(origin='*')
+def Delete_List_Ref_Pedagogique():
+ # On recupere le corps (payload) de la requete
+ payload = mycommon.strip_dictionary (request.form.to_dict())
+ print(" ### Delete_List_Ref_Pedagogique : payload = ",str(payload))
+ status, retval = reference_pedagogique_mgt.Delete_List_Ref_Pedagogique( payload)
+ return jsonify(status=status, message=retval)
+
+
+"""
+API pour recuperer la liste des caractéristiques financières d'un couple related_collection / related_collection_id
+"""
+@app.route('/myclass/api/Get_Ref_Pedagogique_no_filter/', methods=['POST','GET'])
+@crossdomain(origin='*')
+def Get_Ref_Pedagogique_no_filter():
+ # On recupere le corps (payload) de la requete
+ payload = mycommon.strip_dictionary (request.form.to_dict())
+ print(" ### Get_Ref_Pedagogique_no_filter : payload = ",str(payload))
+ status, retval = reference_pedagogique_mgt.Get_Ref_Pedagogique_no_filter( payload)
+ return jsonify(status=status, message=retval)
+
+
+
+
if __name__ == '__main__':
print(" debut api")
context = SSL.Context(SSL.SSLv23_METHOD)
diff --git a/note_evaluation_mgt.py b/note_evaluation_mgt.py
index 112afdf..e00938c 100644
--- a/note_evaluation_mgt.py
+++ b/note_evaluation_mgt.py
@@ -204,7 +204,7 @@ def Add_Evaluation_Planification(diction):
new_data['locked'] = "0"
new_data['create_date'] = str(datetime.now())
- new_data['created_by'] = str(my_partner['_id'])
+ new_data['creation_by'] = str(my_partner['_id'])
new_data['partner_owner_recid'] = str(my_partner['recid'])
inserted_id = MYSY_GV.dbname['note_evaluation'].insert_one(new_data).inserted_id
@@ -555,7 +555,7 @@ def Duplicate_Evaluation_Planification(diction):
new_data['locked'] = "0"
new_data['create_date'] = str(datetime.now())
- new_data['created_by'] = str(my_partner['_id'])
+ new_data['creation_by'] = str(my_partner['_id'])
new_data['partner_owner_recid'] = str(my_partner['recid'])
diff --git a/partner_client.py b/partner_client.py
index 8599c3e..a3e21f0 100644
--- a/partner_client.py
+++ b/partner_client.py
@@ -2643,7 +2643,7 @@ def Create_Partner_Client_Intranet_Account(diction):
new_data['locked'] = "0"
new_data['active'] = "1"
new_data['date_creation'] = now
- new_data['created_by'] = str(my_partner['_id'])
+ new_data['creation_by'] = str(my_partner['_id'])
new_data['type'] = "user"
new_data['lastconnexion'] = ""
new_data['firstconnexion'] = "1"
diff --git a/prj_common.py b/prj_common.py
index a83fec4..7d668b1 100644
--- a/prj_common.py
+++ b/prj_common.py
@@ -3632,7 +3632,7 @@ def GetAttendeeDetail_perSession(diction):
v = local_Insc_retval['_id'].generation_time
- my_retrun_dict['created_date'] = str(v.strftime("%d/%m/%Y"))
+ my_retrun_dict['creation_date'] = str(v.strftime("%d/%m/%Y"))
# Recuperation des informations de la formation
local_formation = MYSY_GV.dbname['myclass'].find_one({'internal_url':str(local_Insc_retval['class_internal_url'])})
@@ -4740,6 +4740,16 @@ def Get_Dictionnary_data_For_Template(diction):
new_field_logo = {'societe_logo': "data:image/png;base64,"+local_JSON['logo_img']}
new_field_cachet = {'societe_cachet': "data:image/png;base64,"+local_JSON['cachet_img']}
+ if ("logo_img" in local_JSON.keys() and local_JSON['logo_img']):
+ new_field_logo = {'societe_logo': "data:image/png;base64," + local_JSON['logo_img']}
+ else:
+ new_field_logo = {'societe_logo': "data:image/png;base64,"}
+
+ if ("cachet_img" in local_JSON.keys() and local_JSON['cachet_img']):
+ new_field_cachet = {'societe_cachet': "data:image/png;base64," + local_JSON['cachet_img']}
+ else:
+ new_field_cachet = {'societe_cachet': "data:image/png;base64,"}
+
company_data.update(new_field_logo)
company_data.update(new_field_cachet)
@@ -5682,7 +5692,7 @@ def Configure_Partner_Init_Setup_No_Token(diction):
'locked': '0'}, ):
new_courrier_for_automation = my_courrier_data
new_courrier_for_automation['actif'] = "0"
- new_courrier_for_automation['date_created'] = str(datetime.now())
+ new_courrier_for_automation['creation_date'] = str(datetime.now())
new_courrier_for_automation['update_by'] = str(my_partner_data['_id'])
new_courrier_for_automation['partner_owner_recid'] = str(my_partner_data['recid'])
@@ -7457,12 +7467,12 @@ def Add_Update_Email_To_Newsletter(diction):
new_data = {}
new_data['email'] = str(diction['email']).strip()
new_data['date_update'] = str(datetime.now())
- new_data['date_created'] = str(datetime.now())
+ new_data['creation_date'] = str(datetime.now())
new_data['valide'] = "1"
new_data['locked'] = "0"
new_data['update_by'] = ""
- new_data['created_by'] = ""
+ new_data['creation_by'] = ""
ret_val = MYSY_GV.dbname['newsletter_email'].find_one_and_update(
{'email': str(diction['email']).strip(), },
diff --git a/reference_pedagogique_mgt.py b/reference_pedagogique_mgt.py
new file mode 100644
index 0000000..6adfdec
--- /dev/null
+++ b/reference_pedagogique_mgt.py
@@ -0,0 +1,383 @@
+"""
+Ce fichier permet de gerer le referentiel pédagogique.
+la V1 contient juste les info basiques comme : code, description, comment...
+"""
+import bson
+import pymongo
+from pymongo import MongoClient
+import json
+from bson import ObjectId
+import re
+from datetime import datetime
+import prj_common as mycommon
+import secrets
+import inspect
+import sys, os
+import csv
+import pandas as pd
+from pymongo import ReturnDocument
+import GlobalVariable as MYSY_GV
+from math import isnan
+import GlobalVariable as MYSY_GV
+import ela_index_bdd_classes as eibdd
+import email_mgt as email
+import jinja2
+from flask import send_file
+from xhtml2pdf import pisa
+from email.message import EmailMessage
+from email.mime.text import MIMEText
+from email import encoders
+import smtplib
+from email.mime.multipart import MIMEMultipart
+from email.mime.text import MIMEText
+from email.mime.base import MIMEBase
+from email import encoders
+"""
+Fonction d'ajout d'un referentiel
+"""
+def Add_Ref_Pedagogique(diction):
+ try:
+ diction = mycommon.strip_dictionary(diction)
+
+ """
+ Verification des input acceptés
+ """
+ field_list = ['token', 'code' , 'description', 'commentaire' ]
+
+ 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', 'code', ]
+ 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
+
+ """
+ Verifier que ce code de la cara fin n'est pas déjà utilisé
+ """
+ is_competence_code_used = MYSY_GV.dbname['referentiel_padagogique'].count_documents({'code':str(diction['code']),
+ 'valide':'1',
+ 'partner_owner_recid':str(my_partner['recid'])})
+
+ if( is_competence_code_used != 0 ):
+ mycommon.myprint(
+ str(inspect.stack()[0][
+ 3]) + " Le code "+str(diction['code'])+" est déjà utilisé ")
+ return False, " Le code "+str(diction['code'])+" est déjà utilisé "
+
+
+
+
+ mydata = {}
+
+ mydata = diction
+ del mydata['token']
+
+ # Initialisation des champs non envoyés à vide
+ for val in field_list:
+ if val not in diction.keys():
+ mydata[str(val)] = ""
+
+ mydata['creation_date'] = str(datetime.now())
+ mydata['creation_by'] = str(my_partner['_id'])
+ mydata['partner_owner_recid'] = str(my_partner['recid'])
+ mydata['valide'] = "1"
+ mydata['locked'] = "0"
+
+
+
+ inserted_id = MYSY_GV.dbname['referentiel_padagogique'].insert_one(mydata).inserted_id
+
+ if (not inserted_id):
+ mycommon.myprint(" Impossible de créer le référentiel pédagogique (2) ")
+ return False, " Impossible de créer le référentiel pédagogique (2) "
+
+ return True, " Le référentiel pédagogique 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 de créer le référentiel pédagogique "
+
+
+"""
+Fonction de mise à jour d'un référentiel pédagogique
+"""
+def Update_Ref_Pedagogique(diction):
+ try:
+ diction = mycommon.strip_dictionary(diction)
+
+ """
+ Verification des input acceptés
+ """
+ field_list = ['token', '_id', 'code' , 'description', 'commentaire',]
+
+ 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', '_id', 'code']
+
+ 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']
+
+ fin_ca_id = ""
+ if ("_id" in diction.keys()):
+ if diction['_id']:
+ fin_ca_id = diction['_id']
+
+
+
+ local_status, my_partner = mycommon.Check_Connexion_And_Return_Partner_Data(diction)
+ if (local_status is not True):
+ return local_status, my_partner
+
+ """
+ Verifier que le code de compétence n'est pas utilisée par une autre compétence autre que celle ci
+ """
+
+ is_fiance_ca_code_used = MYSY_GV.dbname['referentiel_padagogique'].count_documents({'code': str(diction['code']),
+ 'valide': '1',
+ '_id':{'$ne':ObjectId(str(diction['_id']))},
+ 'partner_owner_recid': str(
+ my_partner['recid'])})
+
+ if (is_fiance_ca_code_used != 0):
+ mycommon.myprint(
+ str(inspect.stack()[0][
+ 3]) + " Le code " + str(diction['code']) + " est déjà utilisé ")
+ return False, " Le code " + str(diction['code']) + " est déjà utilisé "
+
+
+ # Verifier que la caracteristique existe et est valide
+ is_valide_fin_ca = MYSY_GV.dbname['referentiel_padagogique'].count_documents({'_id':ObjectId(str(fin_ca_id)),
+ 'valide':'1',
+ 'locked':'0',
+ 'partner_owner_recid':str(my_partner['recid'])})
+
+
+ if( is_valide_fin_ca != 1):
+ mycommon.myprint(
+ str(inspect.stack()[0][3]) + " L'identifiant du référentiel pédagogique est invalide ")
+ return False, " L'identifiant du référentiel pédagogique est invalide "
+
+
+ mydata = {}
+ mydata = diction
+ del mydata['token']
+ del mydata['_id']
+
+
+ mydata['date_update'] = str(datetime.now())
+ mydata['update_by'] = str(my_partner['_id'])
+
+ result = MYSY_GV.dbname['referentiel_padagogique'].find_one_and_update(
+ {'_id':ObjectId(str(fin_ca_id)),
+ 'partner_owner_recid':str(my_partner['recid'])},
+ {"$set": mydata},
+ upsert=False,
+ return_document=ReturnDocument.AFTER
+ )
+ if ("_id" not in result.keys()):
+ mycommon.myprint(
+ " Impossible de mettre à jour le référentiel pédagogique (2) ")
+ return False, " Impossible de mettre à jour le référentiel pédagogique (2) "
+
+
+
+ return True, " Le référentiel pédagogique a été correctement mis à jour "
+
+
+ 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 mettre à jour le référentiel pédagogique "
+
+
+"""
+Recuperer la liste desréférentiel pédagogique d'un partner, sans filtres
+"""
+def Get_Ref_Pedagogique_no_filter(diction):
+ try:
+ diction = mycommon.strip_dictionary(diction)
+
+ """
+ Verification des input acceptés
+ """
+ field_list = ['token',]
+
+ 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', ]
+
+ 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
+
+ qry = {"partner_owner_recid":str(my_partner['recid']), 'valide':'1', 'locked':'0',}
+
+ for New_retVal in MYSY_GV.dbname['referentiel_padagogique'].find(qry).sort([("_id", pymongo.DESCENDING), ]):
+ user = New_retVal
+
+ user['id'] = str(val_tmp)
+ val_tmp = val_tmp + 1
+
+ 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 référentiels pédagogiques "
+
+
+"""
+Suppression d'une list de référentiel pédagogique
+regle : verifier qu'il n'est pas utilisé dans une formation
+"""
+def Delete_List_Ref_Pedagogique(diction):
+ try:
+ diction = mycommon.strip_dictionary(diction)
+
+ """
+ Verification des input acceptés
+ """
+ field_list = ['token', 'tab_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', 'tab_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
+
+
+ local_tab_ids = str(diction['tab_id']).split(",")
+ tab_ids_ObjectID = []
+ tab_ids = []
+ for tmp in local_tab_ids:
+ if( tmp ):
+ tab_ids_ObjectID.append(ObjectId(str(tmp)))
+ tab_ids.append(str(tmp))
+
+ is_used_in_class = []
+ for val in MYSY_GV.dbname['myclass'].find({'referentiel_padagogique_id':{'$in':tab_ids},
+ 'partner_owner_recid':str(my_partner['recid']),
+ 'valide':'1'}).limit(3):
+ is_used_in_class.append(str(val['external_code']))
+
+
+ if(len(is_used_in_class) > 0 ):
+ mycommon.myprint(
+ str(inspect.stack()[0][
+ 3]) + " Le referentiel est utilisé dans "+str(len(is_used_in_class))+" formation (s). Par exemple "+str(is_used_in_class))
+ return False, " Le référentiel est utilisé dans "+str(len(is_used_in_class))+" formation (s). Par exemple "+str(is_used_in_class)+". Suppression annulée "
+
+
+ qry = {'_id':{'$in':tab_ids_ObjectID}, 'partner_owner_recid':str(my_partner['recid'])}
+
+ ret_del_ca_fin = MYSY_GV.dbname['referentiel_padagogique'].delete_many(qry)
+
+ return True, "Référentiel pédagogique supprimé(s)"
+
+
+ except Exception as e:
+ exc_type, exc_obj, exc_tb = sys.exc_info()
+ mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
+ return False, " Impossible de supprimer le référentiel pédagogique"
+
diff --git a/survey_mgt.py b/survey_mgt.py
index 1453a4a..18e33dd 100644
--- a/survey_mgt.py
+++ b/survey_mgt.py
@@ -931,7 +931,7 @@ def Create_One_Survey_To_Inscrit(diction):
new_survey_data['type'] = "1"
new_survey_data['date_update'] = str(datetime.now())
new_survey_data['update_by'] = str(my_partner['_id'])
- new_survey_data['created_by'] = str(my_partner['_id'])
+ new_survey_data['creation_by'] = str(my_partner['_id'])
inserted_id = MYSY_GV.dbname['survey'].insert_one(new_survey_data).inserted_id
@@ -1069,7 +1069,7 @@ def Create_One_Survey_To_Except_Inscrit(diction):
new_survey_data['type'] = "1"
new_survey_data['date_update'] = str(datetime.now())
new_survey_data['update_by'] = str(my_partner['_id'])
- new_survey_data['created_by'] = str(my_partner['_id'])
+ new_survey_data['creation_by'] = str(my_partner['_id'])
print(" ### new_survey_data = ", new_survey_data)
inserted_id = MYSY_GV.dbname['survey'].insert_one(new_survey_data).inserted_id