19/06/2025 -18h

Signed-off-by: Cherif <cbalde@mysy-training.com>
master_Elyos_FI
Cherif 2025-06-19 18:10:16 +02:00
parent aaa8b39dc9
commit 23ee599c41
12 changed files with 15436 additions and 167 deletions

View File

@ -4,11 +4,19 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="11/06/2025 - 16h30">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="qsd">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/GlobalVariable.py" beforeDir="false" afterPath="$PROJECT_DIR$/GlobalVariable.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Inscription_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/Inscription_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Log/log_file.log" beforeDir="false" afterPath="$PROJECT_DIR$/Log/log_file.log" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Session_Formation.py" beforeDir="false" afterPath="$PROJECT_DIR$/Session_Formation.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/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$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/notes_apprenant_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/notes_apprenant_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/prj_common.py" beforeDir="false" afterPath="$PROJECT_DIR$/prj_common.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ressources_humaines.py" beforeDir="false" afterPath="$PROJECT_DIR$/ressources_humaines.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/wrapper.py" beforeDir="false" afterPath="$PROJECT_DIR$/wrapper.py" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -450,7 +458,7 @@
<option name="project" value="LOCAL" />
<updated>1747251650255</updated>
</task>
<option name="localTasksCounter" value="475" />
<option name="localTasksCounter" value="476" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
@ -512,11 +520,11 @@
<MESSAGE value="05/06/2025 - 20h" />
<MESSAGE value="05/06/2025 - 22h" />
<MESSAGE value="06/06/2025 - 20h" />
<MESSAGE value="qsd" />
<MESSAGE value="07/06/2025 - 21h30" />
<MESSAGE value="08/06/2025 - 16h30" />
<MESSAGE value="09/06/2025 - 21h30" />
<MESSAGE value="11/06/2025 - 16h30" />
<option name="LAST_COMMIT_MESSAGE" value="11/06/2025 - 16h30" />
<MESSAGE value="qsd" />
<option name="LAST_COMMIT_MESSAGE" value="qsd" />
</component>
</project>

View File

@ -936,4 +936,11 @@ les modes d'animation des formations
0 = > Présentiel
1 = > Distanciel
2 = > Hybride
"""
"""
"""
Les types de session de formation :
0 => 'session' pr les formations continues
1 => 'promotion' pr les formations continues
"""
TYPE_SESSION = ['0', '1']

View File

@ -7994,7 +7994,7 @@ def Get_Statgaire_List_Partner_with_filter(diction):
# Recuperation des informations de la session
local_qry = {'_id':ObjectId(retVal['session_id']), 'valide':'1'}
#print(" #### local_qry zzz = ", local_qry)
print(" #### local_qry zzz = ", local_qry)
count_session = MYSY_GV.dbname['session_formation'].count_documents(local_qry)
@ -13213,7 +13213,7 @@ def Get_Inscrit_List_EU_Type_Evaluation(diction):
])
#print(" ### Get_Inscrit_List_EU_Type_Evaluation pipe_qry = ", pipe_qry)
print(" ### Get_Inscrit_List_EU_Type_Evaluation pipe_qry = ", pipe_qry)
for val in MYSY_GV.dbname['inscription_liste_ue_type_evalution'].aggregate(pipe_qry):
user = {}

File diff suppressed because it is too large Load Diff

View File

@ -48,6 +48,10 @@ Fonction de creation et mise à jour d'une session de formation.
/!\ : le champ 'source' definit la source de la creation de la session
si le champ 'session_id' est renseigné alors c'est une mise à jour.
type_session :
- 0 : pr le session de formation
- 1 : pr les promotion
"""
def Add_Update_SessionFormation(diction):
try:
@ -64,7 +68,7 @@ def Add_Update_SessionFormation(diction):
'attestation_certif', "distantiel", "presentiel", "prix_session", 'contenu_ftion', 'lms_class_code',
'session_ondemande', 'source', 'session_id', 'session_etape', 'pays', 'formateur_id',
'titre', 'location_type', 'is_bpf', 'site_formation_id', 'price_by', 'mode_animation', 'archive',
'ent_account_automatic', 'lms_account_automatic']
'ent_account_automatic', 'lms_account_automatic', 'type_session']
incom_keys = diction.keys()
for val in incom_keys:
@ -76,7 +80,7 @@ def Add_Update_SessionFormation(diction):
"""
Verification de la liste des champs obligatoires
"""
field_list_obligatoire = ['token', 'class_internal_url','code_session']
field_list_obligatoire = ['token', 'class_internal_url','code_session', 'type_session']
for val in field_list_obligatoire:
if val not in diction:
@ -152,8 +156,20 @@ def Add_Update_SessionFormation(diction):
mydata['code_session'] = diction['code_session']
query_key['code_session'] = diction['code_session']
type_session = ""
if( str(diction['type_session']).strip() not in MYSY_GV.TYPE_SESSION):
mycommon.myprint(
str(inspect.stack()[0][
3]) + " - : La valeur '" + diction['type_session'] + "' est invalide. Les valeurs acceptées sont "+str(MYSY_GV.TYPE_SESSION))
return False, "La valeur '" + diction['type_session'] + "' est invalide. Les valeurs acceptées sont "+str(MYSY_GV.TYPE_SESSION)
mydata['type_session'] = str(diction['type_session']).strip()
"""
14/06/2025 : important :
a chaque mise à jour on force volontairement la valeur du champ 'class_id'
"""
class_internal_url = ""
class_id = ""
if ("class_internal_url" in diction.keys()):
@ -167,6 +183,8 @@ def Add_Update_SessionFormation(diction):
mydata['class_id'] = str(Class_data['_id'])
class_id = str(Class_data['_id'])
print(" ")
#query_key['class_id'] = str(is_class_data['_id'])
class_source = ""
@ -527,6 +545,7 @@ def Add_Update_SessionFormation(diction):
# Etape 1 : recuperation du code session en base
local_retval1 = MYSY_GV.dbname['session_formation'].find_one({'_id':ObjectId(str(session_id))})
if( local_retval1 is None or 'code_session' not in local_retval1.keys() or 'class_id' not in local_retval1.keys() ):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Cette session n'as pas de code session ")
return False, "Impossible de récupérer le code de La promotion (1) "
@ -1231,7 +1250,7 @@ Donc faire attention au controle de la connexion
def GetActiveSessionFormation_List(diction):
try:
field_list = ['token', 'class_internal_url', 'archive']
field_list = ['token', 'class_internal_url', 'archive', 'type_session']
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
@ -1262,6 +1281,10 @@ def GetActiveSessionFormation_List(diction):
elif ("archive" in diction.keys() and diction["archive"] == "1"):
filt_archive = {'archive': '1'}
filt_type_session = {}
if ("type_session" in diction.keys()):
filt_type_session = {'type_session': str(diction['type_session']).strip()}
# Recuperation du recid du partner
mydata = {}
@ -1282,7 +1305,7 @@ def GetActiveSessionFormation_List(diction):
RetObject = []
print(" ### GetActiveSessionFormation_List myquery = ", myquery)
for retval in coll_session.find({"$and":[myquery,filt_archive]} ):
for retval in coll_session.find({"$and":[myquery,filt_archive, filt_type_session]} ):
local_tmp = retval
@ -1330,7 +1353,7 @@ d'un partenaire, mais avec une liste reduite de champs
def Get_Partner_Session_Ftion_Reduice_Fields(diction):
try:
field_list = ['token',]
field_list = ['token', 'type_session']
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
@ -1384,11 +1407,16 @@ def Get_Partner_Session_Ftion_Reduice_Fields(diction):
elif ("archive" in diction.keys() and diction["archive"] == "1"):
filt_archive = {'archive': '1'}
filt_type_session = {}
if ("type_session" in diction.keys()):
filt_type_session = {'type_session': str(diction['type_session']).strip()}
RetObject = []
val_tmp = 0
for retval in MYSY_GV.dbname['session_formation'].find({ "$and" : [ {'partner_owner_recid':str(my_partner['recid']),
'valide':'1',},filt_scope_class_id, filt_scope_session_id, filt_archive]},
'valide':'1',},filt_scope_class_id, filt_scope_session_id, filt_archive, filt_type_session]},
{'_id':1, 'code_session':1, 'titre':1,
'class_internal_url':1, 'date_debut':1,
'date_fin':1}):
@ -1521,7 +1549,7 @@ Qu'elles soient cloturées ou pas."""
def GetAllValideSessionFormation_List(diction):
try:
field_list = ['token', 'class_internal_url', 'archive']
field_list = ['token', 'class_internal_url', 'archive', 'type_session']
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
@ -1561,6 +1589,10 @@ def GetAllValideSessionFormation_List(diction):
elif ("archive" not in diction.keys()):
filt_archive = {'archive': {'$ne': '1'}}
filt_type_session = {}
if ("type_session" in diction.keys()):
filt_type_session = {'type_session': str(diction['type_session']).strip()}
coll_session = MYSY_GV.dbname['session_formation']
myquery = {}
@ -1568,10 +1600,9 @@ def GetAllValideSessionFormation_List(diction):
myquery['partner_owner_recid'] = str(my_partner['recid'])
myquery['valide'] = "1"
print(" ##### myquery tt = "+str(myquery))
RetObject = []
for retval in coll_session.find({"$and": [myquery,filt_archive]}):
for retval in coll_session.find({"$and": [myquery,filt_archive, filt_type_session]}):
#print(" ##### retval = " + str(retval))
RetObject.append(mycommon.JSONEncoder().encode(retval))
@ -1591,7 +1622,7 @@ Cette fonction est utilisé pour definir le scope d'un user (il faut d'abord voi
def GetAllValideSessionPartner_List_Without_Scope_Action(diction):
try:
field_list = ['token', 'archive']
field_list = ['token', 'archive', 'type_session']
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
@ -1628,14 +1659,15 @@ def GetAllValideSessionPartner_List_Without_Scope_Action(diction):
elif ("archive" in diction.keys() and diction["archive"] == "1"):
filt_archive = {'archive': '1'}
filt_type_session = {}
if ("type_session" in diction.keys()):
filt_type_session = {'type_session': str(diction['type_session']).strip()}
coll_session = MYSY_GV.dbname['session_formation']
filt_class_partner_recid = {'partner_owner_recid': str(my_partner['recid'])}
query = [{'$match':{ "$and" : [{'partner_owner_recid':str(my_partner['recid'])}, filt_archive]} },
query = [{'$match':{ "$and" : [{'partner_owner_recid':str(my_partner['recid'])}, filt_archive, filt_type_session]} },
{ '$sort': {'_id': -1}},
{'$lookup':
{
@ -1651,7 +1683,7 @@ def GetAllValideSessionPartner_List_Without_Scope_Action(diction):
}
}
]
print("#### GetAllValideSessionPartner_List_Without_Scope_Action query = ", query)
#print("#### GetAllValideSessionPartner_List_Without_Scope_Action query = ", query)
RetObject = []
cpt = 0
@ -1733,7 +1765,7 @@ Cette fonction recupere toutes les sessions de formation d'un partenaire
def GetAllValideSessionPartner_List(diction):
try:
field_list = ['token', 'archive']
field_list = ['token', 'archive', 'type_session']
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
@ -1771,6 +1803,12 @@ def GetAllValideSessionPartner_List(diction):
elif ("archive" in diction.keys() and diction["archive"] == "1"):
filt_archive = {'archive': '1'}
filt_type_session = {}
if ("type_session" in diction.keys()):
filt_type_session = {'type_session': str(diction['type_session']).strip()}
print(" ### filt_type_session = ", filt_type_session)
"""
Filtre sur scope utilisateur
"""
@ -1795,7 +1833,7 @@ def GetAllValideSessionPartner_List(diction):
filt_class_partner_recid = {'partner_owner_recid': str(my_partner['recid'])}
query = [{'$match': {
"$and": [{'partner_owner_recid': str(my_partner['recid'])}, filt_scope_class_id, filt_scope_session_id, filt_archive]}},
"$and": [{'partner_owner_recid': str(my_partner['recid'])}, filt_scope_class_id, filt_scope_session_id, filt_archive, filt_type_session]}},
{'$sort': {'_id': -1}},
{'$lookup':
{
@ -2093,7 +2131,7 @@ def GetAllValideSessionPartner_List_filter_like(diction):
field_list = ['token','class_title', 'code_session', 'class_external_code',
'session_start_date', 'session_end_date',
'class_internal_url', 'archive']
'class_internal_url', 'archive', 'type_session']
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
@ -2174,6 +2212,10 @@ def GetAllValideSessionPartner_List_filter_like(diction):
elif ("archive" not in diction.keys()):
filt_archive = {'archive': {'$ne': '1'}}
filt_type_session = {}
if ("type_session" in diction.keys()):
filt_type_session = {'type_session': str(diction['type_session']).strip()}
"""
Filtre sur les formation si mis sur l'utilisateur
"""
@ -2195,7 +2237,8 @@ def GetAllValideSessionPartner_List_filter_like(diction):
coll_session = MYSY_GV.dbname['session_formation']
query = [ {'$match':{ '$and' : [ filt_code_session,{'partner_owner_recid':str(my_partner['recid'])}, filt_scope_class_id, filt_scope_session_id, filt_archive] }} ,
query = [ {'$match':{ '$and' : [ filt_code_session,{'partner_owner_recid':str(my_partner['recid'])}, filt_scope_class_id, filt_scope_session_id,
filt_archive, filt_type_session] }} ,
{'$sort': {'_id': -1}},
{'$lookup':
{
@ -2522,7 +2565,7 @@ Recuperation de la liste sans filtre
def GetAllValideSessionPartner_List_no_filter(diction):
try:
field_list = ['token','class_title', 'code_session', 'archive']
field_list = ['token','class_title', 'code_session', 'archive', 'type_session']
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
@ -2562,9 +2605,13 @@ def GetAllValideSessionPartner_List_no_filter(diction):
elif ("archive" not in diction.keys()):
filt_archive = {'archive': {'$ne': '1'}}
filt_type_session = {}
if ("type_session" in diction.keys()):
filt_type_session = {'type_session': str(diction['type_session']).strip()}
coll_session = MYSY_GV.dbname['session_formation']
query = [{'$match':{"$and": [{'partner_owner_recid': str(my_partner['recid'])}, filt_archive]} },
query = [{'$match':{"$and": [{'partner_owner_recid': str(my_partner['recid'])}, filt_archive, filt_type_session]} },
{'$lookup':
{
'from': 'myclass',
@ -2912,7 +2959,8 @@ def Add_Update_SessionFormation_mass(file=None, Folder=None, diction=None):
field_list = ['date_debut', 'date_fin', 'nb_participant', 'adresse', 'code_postal', 'ville', 'pays',
'session_status', 'date_debut_inscription', 'date_fin_inscription', 'attestation', 'formateur',
'code_session', "distanciel", "presentiel", "mode_animation", "prix_session", 'contenu_ftion', 'lms_class_code',
'session_ondemande', 'session_etape', 'formation_code_externe', 'formateur_email', 'titre', 'location_type', 'is_bpf']
'session_ondemande', 'session_etape', 'formation_code_externe', 'formateur_email', 'titre', 'location_type',
'is_bpf', 'type_session']
# Controle du nombre de lignes dans le fichier.
total_rows = len(df)
@ -2931,7 +2979,8 @@ def Add_Update_SessionFormation_mass(file=None, Folder=None, diction=None):
# Verification des champs obligatoires dans le fichier
field_list_obligatoire_file = ['date_debut', 'date_fin', 'session_status', 'code_session', 'formation_code_externe']
field_list_obligatoire_file = ['date_debut', 'date_fin', 'session_status', 'code_session',
'formation_code_externe', 'type_session']
for val in field_list_obligatoire_file:
if val not in df.columns:
@ -3071,6 +3120,21 @@ def Add_Update_SessionFormation_mass(file=None, Folder=None, diction=None):
mydata['code_session'] = local_code_session
local_type_session = ""
if ("type_session" in df.keys()):
if (str(df['type_session'].values[n])):
local_type_session = str(df['type_session'].values[n]).strip()
if (local_type_session not in MYSY_GV.TYPE_SESSION):
mycommon.myprint(
str(inspect.stack()[0][3]) + " Le champ 'type_session' de la ligne " + str(
n + 2) + " est invalide. Les valeurs acceptées sont "+str(MYSY_GV.TYPE_SESSION))
return False, " Le champ 'type_session' de la ligne " + str(
n + 2) + " est invalide. Les valeurs acceptées sont "+str(MYSY_GV.TYPE_SESSION)
mydata['type_session'] = local_type_session
local_adresse = ""
if ("adresse" in df.keys()):
if (str(df['adresse'].values[n])):
@ -3386,7 +3450,8 @@ def Controle_Add_Update_SessionFormation_mass(saved_file=None, Folder=None, dict
field_list = ['date_debut', 'date_fin', 'nb_participant', 'adresse', 'code_postal', 'ville', 'pays',
'session_status', 'date_debut_inscription', 'date_fin_inscription', 'attestation',
'code_session', "distanciel", "presentiel", "mode_animation", "prix_session", 'contenu_ftion', 'lms_class_code',
'session_ondemande', 'session_etape', 'formation_code_externe','formateur_email', 'titre', 'location_type', 'is_bpf']
'session_ondemande', 'session_etape', 'formation_code_externe','formateur_email', 'titre', 'location_type',
'is_bpf', 'type_session']
# Controle du nombre de lignes dans le fichier.
total_rows = len(df)
@ -3587,6 +3652,20 @@ def Controle_Add_Update_SessionFormation_mass(saved_file=None, Folder=None, dict
mydata['nb_participant'] = str(new_participants)
local_type_session = ""
if ("type_session" in df.keys()):
if (str(df['type_session'].values[n])):
local_type_session = str(df['type_session'].values[n]).strip()
if (local_type_session not in MYSY_GV.TYPE_SESSION):
mycommon.myprint(
str(inspect.stack()[0][3]) + " Le champ 'type_session' de la ligne " + str(
n + 2) + " est invalide. Les valeurs acceptées sont " + str(MYSY_GV.TYPE_SESSION))
return False, " Le champ 'type_session' de la ligne " + str(
n + 2) + " est invalide. Les valeurs acceptées sont " + str(MYSY_GV.TYPE_SESSION)
prix_session = "0"
if ("prix_session" in df.keys()):
if (str(df['prix_session'].values[n])):
@ -3934,7 +4013,8 @@ def Add_Update_SessionFormation_mass_for_many_class(file=None, Folder=None, dict
field_list = ['date_debut', 'date_fin', 'nb_participant', 'adresse', 'code_postal', 'ville', 'pays',
'session_status', 'date_debut_inscription', 'date_fin_inscription', 'attestation',
'code_session', "distanciel", "presentiel", "mode_animation", "prix_session", 'contenu_ftion', 'lms_class_code',
'session_ondemande', 'session_etape', 'formation_code_externe', 'formateur_email', 'titre', 'location_type', 'is_bpf']
'session_ondemande', 'session_etape', 'formation_code_externe', 'formateur_email', 'titre', 'location_type',
'is_bpf', 'type_session']
# Controle du nombre de lignes dans le fichier.
total_rows = len(df)
@ -3952,7 +4032,8 @@ def Add_Update_SessionFormation_mass_for_many_class(file=None, Folder=None, dict
return False, " Entete du fichier csv. La Colonne '" + val + "' n'est pas acceptée"
# Verification des champs obligatoires dans le fichier
field_list_obligatoire_file = ['date_debut', 'date_fin', 'session_status', 'code_session', 'formation_code_externe']
field_list_obligatoire_file = ['date_debut', 'date_fin', 'session_status', 'code_session', 'formation_code_externe',
'type_session']
for val in field_list_obligatoire_file:
if val not in df.columns:
@ -3984,8 +4065,6 @@ def Add_Update_SessionFormation_mass_for_many_class(file=None, Folder=None, dict
continue
mydata['date_debut'] = str(df['date_debut'].values[n]).strip().split(" ")[0]
local_status = mycommon.CheckisDate(mydata['date_debut'])
if (local_status is False):
@ -4067,7 +4146,19 @@ def Add_Update_SessionFormation_mass_for_many_class(file=None, Folder=None, dict
mydata['is_bpf'] = str(df['is_bpf'].values[n]).strip()
local_type_session = ""
if ("type_session" in df.keys()):
if (str(df['type_session'].values[n])):
local_type_session = str(df['type_session'].values[n]).strip()
if (local_type_session not in MYSY_GV.TYPE_SESSION):
mycommon.myprint(
str(inspect.stack()[0][3]) + " Le champ 'type_session' de la ligne " + str(
n + 2) + " est invalide. Les valeurs acceptées sont " + str(MYSY_GV.TYPE_SESSION))
return False, " Le champ 'type_session' de la ligne " + str(
n + 2) + " est invalide. Les valeurs acceptées sont " + str(MYSY_GV.TYPE_SESSION)
mydata['type_session'] = local_type_session
## Verification de la cohérence des dates. Date_du doit <= Date_au
@ -4459,7 +4550,8 @@ def Controle_Add_Update_SessionFormation_mass_for_many_class(saved_file=None, Fo
field_list = ['date_debut', 'date_fin', 'nb_participant', 'adresse', 'code_postal', 'ville', 'pays',
'session_status', 'date_debut_inscription', 'date_fin_inscription', 'attestation',
'code_session', "distanciel", "presentiel", "mode_animation", "prix_session", 'contenu_ftion', 'lms_class_code',
'session_ondemande', 'session_etape', 'formation_code_externe', 'formateur_email', 'titre', 'location_type', 'is_bpf']
'session_ondemande', 'session_etape', 'formation_code_externe', 'formateur_email', 'titre', 'location_type',
'is_bpf', 'type_session']
# Controle du nombre de lignes dans le fichier.
total_rows = len(df)
@ -4478,7 +4570,7 @@ def Controle_Add_Update_SessionFormation_mass_for_many_class(saved_file=None, Fo
# Verification des champs obligatoires dans le fichier
field_list_obligatoire_file = ['date_debut', 'date_fin', 'session_status', 'code_session',
'formation_code_externe']
'formation_code_externe', 'type_session']
for val in field_list_obligatoire_file:
if val not in df.columns:
@ -4541,6 +4633,20 @@ def Controle_Add_Update_SessionFormation_mass_for_many_class(saved_file=None, Fo
return False, " Erreur : Ligne " + str(
n + 2) + " : Le code_externe de la formation n'est pas invalide."
local_type_session = ""
if ("type_session" in df.keys()):
if (str(df['type_session'].values[n])):
local_type_session = str(df['type_session'].values[n]).strip()
if (local_type_session not in MYSY_GV.TYPE_SESSION):
mycommon.myprint(
str(inspect.stack()[0][3]) + " Le champ 'type_session' de la ligne " + str(
n + 2) + " est invalide. Les valeurs acceptées sont " + str(MYSY_GV.TYPE_SESSION))
return False, " Le champ 'type_session' de la ligne " + str(
n + 2) + " est invalide. Les valeurs acceptées sont " + str(MYSY_GV.TYPE_SESSION)
mydata['type_session'] = local_type_session
mydata['date_debut'] = str(df['date_debut'].values[n]).strip().split(" ")[0]
local_status = mycommon.CheckisDate(mydata['date_debut'])
@ -5373,7 +5479,7 @@ def Duplicate_List_Session_Formation(diction):
return False, " La date de fin n'est pas au format jj/mm/aaaa "
if (datetime.strptime(str(diction['date_debut'])[0:10], '%d/%m/%Y') >= datetime.strptime(
if (datetime.strptime(str(diction['date_debut'])[0:10], '%d/%m/%Y') > datetime.strptime(
str(diction['date_fin'])[0:10], '%d/%m/%Y')):
mycommon.myprint(
str(inspect.stack()[0][
@ -5381,7 +5487,7 @@ def Duplicate_List_Session_Formation(diction):
diction['date_debut'])[0:10] +
" doit être antérieure à la date de fin " + str(diction['date_fin'])[0:10])
return False, " Session de Formation : La date debut de formation " + str(diction['date_debut'])[0:10] + \
return False, " La date debut de formation " + str(diction['date_debut'])[0:10] + \
" doit être antérieure à la date de fin de formation " + str(diction['date_fin'])[0:10] + " "
# Duplicata
@ -5394,8 +5500,8 @@ def Duplicate_List_Session_Formation(diction):
if( session_data is None):
mycommon.myprint(
str(inspect.stack()[0][3]) + " La promotion n'est pas valide ")
return False, " La promotion n'est pas valide "
str(inspect.stack()[0][3]) + " La session / promotion n'est pas valide ")
return False, " La session / promotion n'est pas valide "
@ -5406,8 +5512,19 @@ def Duplicate_List_Session_Formation(diction):
duplicated_session['code_session'] = str(session_data['code_session'])+"_dup"
duplicated_session['date_update'] = now
duplicated_session['update_by'] = str(my_partner['_id'])
duplicated_session['creation_date'] = now
duplicated_session['creation_by'] = str(my_partner['_id'])
if( "mode_animation" in session_data.keys() ):
duplicated_session['mode_animation'] = str(session_data['mode_animation'])
else:
duplicated_session['mode_animation'] = "0"
if( "type_session" in session_data.keys() ):
duplicated_session['type_session'] = str(session_data['type_session'])
else:
duplicated_session['type_session'] = "0"
duplicated_session['date_debut'] = str(diction['date_debut'])[0:10]
duplicated_session['date_fin'] = str(diction['date_fin'])[0:10]
duplicated_session['session_etape'] = str(diction['session_etape'])

View File

@ -14,7 +14,7 @@ Par defaut, les regles de calcul implémentées :
Detail : ( Note Stage + Examen Final ) / 2
Nom : calcul_mode_2
Nom : calcul_mode_3
Detail : (Moyenne Art.(TD) + Moyenne Art.(Contrôle Continue) + Examen Final*1.5 ) / 3
/!\ Important :
@ -419,6 +419,14 @@ def Cacul_UE_Note_By_Evaluation_Type(diction):
liste_note_evaluation_ids = []
print(" QRYY = ", {'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0',
'class_id': str(diction['class_id']),
'class_eu_id': str(diction['ue_id']),
'type_eval_id': str(evaluation_type_id)} )
for val in MYSY_GV.dbname['note_evaluation'].find({'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0',
@ -430,10 +438,10 @@ def Cacul_UE_Note_By_Evaluation_Type(diction):
somme_note = 0
moyenne_note = 0
#print(" ### la liste des evaluations de type sont : ", liste_note_evaluation_ids)
print(" ### la liste des evaluations de type sont : ", liste_note_evaluation_ids)
nb_eval = len(liste_note_evaluation_ids)
#print(" ### la liste len(liste_note_evaluation_ids) : ", len(liste_note_evaluation_ids))
print(" ### la liste len(liste_note_evaluation_ids) : ", len(liste_note_evaluation_ids))
if( nb_eval > 0 ):
for my_inscription in tab_inscriptions_ids_splited:
@ -461,11 +469,11 @@ def Cacul_UE_Note_By_Evaluation_Type(diction):
somme_note = somme_note + mycommon.tryFloat(str(note_evaluation_participant['note']))
#print("************* ", evaluation_data['code'], " Du ",evaluation_data['eval_date_heure_debut'], " Au ", evaluation_data['eval_date_heure_fin'])
#print(" Session : is_session_valide_data = ", is_session_valide_data['code_session'])
#print(" Unit. Ensei : is_ue_valide_data = ", is_ue_valide_data['code'])
print("************* ", evaluation_data['code'], " Du ",evaluation_data['eval_date_heure_debut'], " Au ", evaluation_data['eval_date_heure_fin'])
print(" Session : is_session_valide_data = ", is_session_valide_data['code_session'])
print(" Unit. Ensei : is_ue_valide_data = ", is_ue_valide_data['code'])
#print(" note_evaluation_participant = ", note_evaluation_participant['note'])
print(" note_evaluation_participant = ", note_evaluation_participant['note'])
tab_apprenant_note.append(str(note_evaluation_participant['note']))
if( nb_eval == 0 ):
@ -473,12 +481,9 @@ def Cacul_UE_Note_By_Evaluation_Type(diction):
somme_note = "-"
else:
moyenne_note = round(somme_note / nb_eval, 2)
"""
print("")
print(" ## Somme_note ",str(diction['evaluation_type']), " = ", str(somme_note), " ## Moyenne TP= ", str(moyenne_note))
print("")
print("")
"""
else :
moyenne_note = "-"
@ -799,7 +804,7 @@ def Cacul_UE_Note_Finale_For_calcul_mode_1(diction):
note_precedente = str(sorted_data['note_finale'])
#MAJ du rang
print(" MAJJ classement = ", classement)
#print(" MAJJ classement = ", classement)
MYSY_GV.dbname['session_formation_final_note_classement'].find_one_and_update(
{'_id':ObjectId(str(sorted_data['_id'])),
'partner_owner_recid':str(sorted_data['partner_owner_recid']),
@ -1641,7 +1646,7 @@ def Calcul_Note_Classement_Session(diction):
print('### local_diction 01010 =', local_diction)
local_status, local_retval = run_ue_pre_calcul_moyenne_somme(local_diction)
local_status, local_retval = run_ue_pre_calcul_moyenne_somme_v2(local_diction)
if( local_status is False ):
mycommon.myprint(str(
@ -1707,7 +1712,7 @@ def Calcul_Note_Classement_Session(diction):
local_node['token'] = str(diction['token'])
local_node['class_id'] = str(is_class_data['_id'])
local_node['session_id'] = str(diction['session_id'])
local_node['ue_id'] = str(unite_enseignement_data['_id'])
local_node['tab_ue_ids'] = str(unite_enseignement_data['_id'])
list_inscrit_id = ",".join(tab_inscrit_id)
local_node['tab_inscriptions_ids'] = str(list_inscrit_id)
@ -1772,3 +1777,906 @@ def Calcul_Note_Classement_Session(diction):
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de lancer le calcul des notes "
"""
Cette fonction calcul la moyenne generale en
appliquant la formule STANDARD:
Nom : ue_calcul_mode_standard
Detail : (Moyenne TP) x (Pondération TP) + (Moyenne CC) x (Pondération CC) + .+ (Note Examen) * (Pondération Examen) / Somme des pondérations
"""
def Cacul_UE_Note_Finale_Standard(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', 'class_id', 'session_id', 'tab_ue_ids', 'tab_inscriptions_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é")
return False, " Les informations fournies sont incorrectes"
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'class_id', 'session_id', 'tab_ue_ids', 'tab_inscriptions_ids',]
for val in field_list_obligatoire:
if val not in diction:
mycommon.myprint(
str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans la liste des arguments ")
return False, " Les informations fournies 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
is_session_valide_data = MYSY_GV.dbname['session_formation'].find_one(
{'_id': ObjectId(str(diction['session_id'])),
'valide': '1',
'partner_owner_recid': str(my_partner['recid'])})
tab_ue_ids = ""
if ("tab_ue_ids" in diction.keys()):
if diction['tab_ue_ids']:
tab_ue_ids = diction['tab_ue_ids']
tab_ue_ids_splited = str(tab_ue_ids).split(",")
tab_ue_ids_ObjectId = []
for my_ue_id in tab_ue_ids_splited:
my_ue_id = str(my_ue_id).strip()
# Verifier la validité de l'unité d'enseignement
is_ue_valide_count = MYSY_GV.dbname['unite_enseignement'].count_documents(
{'_id': ObjectId(str(my_ue_id)),
'valide': '1',
'locked':'0',
'partner_owner_recid': str(my_partner['recid'])})
if (is_ue_valide_count != 1):
mycommon.myprint(
str(inspect.stack()[0][3]) + " L'identifiant de l'unité d'enseignement est invalide "+str(my_ue_id))
return False, " L'identifiant de l'unité d'enseignement "+str(my_ue_id)+" est invalide "
tab_ue_ids_ObjectId.append( ObjectId(str(my_ue_id)))
is_myclass_valide_data = MYSY_GV.dbname['myclass'].find_one(
{'_id': ObjectId(str(diction['class_id'])),
'valide': '1',
'locked': '0',
'partner_owner_recid': str(my_partner['recid'])})
# Verifier la validité de la liste des inscrits fournie
tab_inscriptions_ids = ""
if ("tab_inscriptions_ids" in diction.keys()):
if diction['tab_inscriptions_ids']:
tab_inscriptions_ids = diction['tab_inscriptions_ids']
tab_inscriptions_ids_splited = str(tab_inscriptions_ids).split(",")
# Controle de validité de toutes info avant de commencer les traitements
for my_inscription in tab_inscriptions_ids_splited:
my_inscription = str(my_inscription).strip()
type_eval_td_data = MYSY_GV.dbname['type_evaluation'].find_one({'code': {'$regex': "td", "$options": "i"},
'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0',
})
if( type_eval_td_data is None ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " Aucun type d'évaluation de type 'TD', merci de vérifier le paramétrage des types d'évaluation ")
return False, " Aucun type d'évaluation de type 'TD', merci de vérifier le paramétrage des types d'évaluation "
"""print(" ### QRYY ", {'_id': {'$in':tab_ue_ids_ObjectId},
'valide': '1',
'locked': '0',
'partner_owner_recid': str(my_partner['recid'])})"""
for is_ue_valide_data in MYSY_GV.dbname['unite_enseignement'].find(
{'_id': {'$in':tab_ue_ids_ObjectId},
'valide': '1',
'locked': '0',
'partner_owner_recid': str(my_partner['recid'])}):
#print(" UEEE : ", is_ue_valide_data['code'])
# Recuperer les données de l'UE dans la formation (ex : credit, seuil de validation, etc)
class_ue_data = {}
is_class_ue_data = "0"
if ("list_unite_enseignement" in is_myclass_valide_data.keys()):
for data in is_myclass_valide_data['list_unite_enseignement']:
if (data['_id'] == str(is_ue_valide_data['_id'])):
class_ue_data = data
is_class_ue_data = "1"
if (is_class_ue_data == "0"):
mycommon.myprint(
str(inspect.stack()[0][3]) + " La formation ne contient pas l'UE selectionnée code = " + str(
is_ue_valide_data['code']))
return False, " La formation ne contient pas l'UE selectionnée code = " + str(
is_ue_valide_data['code'])
tab_note_inscrit = []
"""
Aller recuperer les UE et les types d'evaluation concernée par ce calcul
"" "
somme_ponderation = 0
for tmp in MYSY_GV.dbname['class_unite_enseignement_type_evaluation'].find({'partner_owner_recid':str(my_partner['recid']),
'valide':'1',
'locked':'0',
'class_id':str(diction['class_id']),
'class_ue_id': str(is_ue_valide_data['_id']),
}):
print(" ### COUCOU tmp = ", tmp)
if( "type_evaluation_id" in tmp.keys() ):
type_evaluation_data = MYSY_GV.dbname['type_evaluation'].find_one({'_id': ObjectId(str(tmp['type_evaluation_id'])),
'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0',
})
if(type_evaluation_data ):
print(" ### PR EVAL TYPEE = ", type_evaluation_data)
basic_qry = {'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0',
'session_id': str(diction['session_id']),
'ue_id': str(is_ue_valide_data['_id']),
}
"""
basic_qry = {'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0',
'session_id': str(diction['session_id']),
'ue_id': str(is_ue_valide_data['_id']),
}
for my_inscription in tab_inscriptions_ids_splited:
# 1 - recuperer toutes les notes pre_calculée de l'apprenant
print(" ### TRAITEMENT DE L'APPRENN my_inscription = ", my_inscription)
tab_note_inscrit = []
local_node = {}
node_note_inscrit = {}
node_note_inscrit['eu_code'] = str(is_ue_valide_data['code'])
basic_qry['inscription_id'] = str(my_inscription)
node_note_inscrit['inscription_id'] = str(my_inscription)
inscri_data = MYSY_GV.dbname['inscription'].find_one({'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0',
'_id': ObjectId(str(my_inscription).strip())},
{'nom': 1, 'prenom': 1, 'email': 1}
)
inscri_data_nom = ""
inscri_data_prenom = ""
inscri_data_email = ""
if (inscri_data and "nom" in inscri_data.keys()):
inscri_data_nom = inscri_data['nom']
if (inscri_data and "prenom" in inscri_data.keys()):
inscri_data_prenom = inscri_data['prenom']
if (inscri_data and "email" in inscri_data.keys()):
inscri_data_email = inscri_data['email']
node_note_inscrit['nom'] = str(inscri_data_nom)
node_note_inscrit['prenom'] = str(inscri_data_prenom)
node_note_inscrit['email'] = str(inscri_data_email)
#print(" ### inscri_data = ", inscri_data)
#basic_qry['type_eval_id'] = str(type_evaluation_data['_id'])
local_node['inscription_id'] = str(my_inscription)
local_node['session_id'] = str(diction['session_id'])
local_node['type_eval'] = "note_finale"
local_node['type_eval_id'] = "----"
local_node['ue_id'] = str(is_ue_valide_data['_id'])
if ("credit" in class_ue_data.keys()):
local_node['credit'] = str(class_ue_data['credit'])
elif ("ects" in is_ue_valide_data.keys()):
local_node['credit'] = str(is_ue_valide_data['ects'])
else:
local_node['credit'] = "0"
if ("coefficient" in class_ue_data.keys()):
local_node['ue_coefficient'] = str(class_ue_data['coefficient'])
elif ("coefficient" in is_ue_valide_data.keys()):
local_node['ue_coefficient'] = str(is_ue_valide_data['coefficient'])
else:
local_node['ue_coefficient'] = "1"
if ("seuil_validation" in class_ue_data.keys()):
local_node['seuil_validation'] = str(class_ue_data['seuil_validation'])
elif ("seuil_validation" in is_ue_valide_data.keys()):
local_node['seuil_validation'] = str(is_ue_valide_data['seuil_validation'])
else:
local_node['seuil_validation'] = "99" # le 99 pour eviter les validation par defaut
local_node['class_id'] = str(diction['class_id'])
local_node['inscription_email'] = str(inscri_data_email)
local_node['inscription_nom'] = str(inscri_data_nom)
local_node['inscription_prenom'] = str(inscri_data_prenom)
local_node['session_id'] = str(diction['session_id'])
local_node['regle_calcul'] = "(Moyenne TP) x (Pondération TP) + (Moyenne CC) x (Pondération CC) + (Note Examen) * (Pondération Examen) / Somme des pondérations"
local_node['create_date'] = str(datetime.now())
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'])
note_finale_ue = 0
#note_finale_ue = round(note_finale_ue, 2)
for note_eu_inscrit in tab_note_inscrit:
#print(" ## note_eu_inscrit = ", note_eu_inscrit)
note_finale_ue = note_finale_ue + float(str(float(note_eu_inscrit['moyenne']) * float(note_eu_inscrit['evaluation_ponderation'])))
#print(" ### somme note pondéezeee = ", note_finale_ue)
"""
Aller chercher la somme des ponderation sur l'ue pour ce type d'evaluation
"""
local_status, local_retval = mycommon.Get_total_Ponderation_Class_UE_Type_Eval( str(diction['class_id']),str(is_ue_valide_data['_id']),)
#print(" ##### Get_total_Ponderation_Class_UE_Type_Eval local_retval = ", local_retval)
somme_ponderation = mycommon.tryFloat(local_retval)
if( somme_ponderation == 0 ):
mycommon.myprint(
str(inspect.stack()[0][
3]) + " Erreur Ponderation. La somme = 0 ")
return False, " Erreur Ponderation. La somme = 0 "
#print(" ### basic_qry = ", basic_qry)
local_node['detail_note'] = []
somme_note_pondere = 0
for list_note_inscrit in MYSY_GV.dbname['session_formation_final_note_classement_detail'].find(
basic_qry):
somme_note_pondere = somme_note_pondere + (float(list_note_inscrit['moyenne']) * float(list_note_inscrit['ponderation_type_eval']))
local_node['detail_note'].append(list_note_inscrit)
#print(" ### somme_note_pondere = ", somme_note_pondere)
note_finale_ue = round(somme_note_pondere / somme_ponderation, 2)
local_node['note_finale'] = str(note_finale_ue)
#print(" ### note_finale = ", note_finale_ue)
# Acter si la personne valide l'UE
#print(" #### si la personne valide l'UE CMP de float(note_finale_ue) = ", float(note_finale_ue),
# " et float(local_node['seuil_validation'] ) = ", float(local_node['seuil_validation']))
if (float(note_finale_ue) >= float(local_node['seuil_validation'])):
local_node['ue_validation'] = "1"
else:
local_node['ue_validation'] = "0"
qry_key = {}
qry_key['partner_owner_recid'] = my_partner['recid']
qry_key['valide'] = "1"
qry_key['locked'] = "0"
qry_key['inscription_id'] = local_node['inscription_id']
qry_key['session_id'] = local_node['session_id']
qry_key['type_eval'] = local_node['type_eval']
qry_key['ue_id'] = local_node['ue_id']
#print(" To insert in session_formation_final_note_classement = ", local_node)
ret_val2 = MYSY_GV.dbname['session_formation_final_note_classement'].find_one_and_update(
qry_key,
{"$set": local_node},
return_document=ReturnDocument.AFTER,
upsert=True,
)
"""
Après le calcul de la moyenne finale, il faut faire le classement
"""
basic_qry = {'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0',
'session_id': str(diction['session_id']),
'ue_id': str(is_ue_valide_data['_id']),
}
classement = 0
note_precedente = ""
for sorted_data in MYSY_GV.dbname['session_formation_final_note_classement'].find(basic_qry).sort(
[("note_finale", pymongo.DESCENDING), ]):
#print(" ### sorted_data = ", sorted_data)
# Gestion des Execo
if (str(note_precedente) != str(sorted_data['note_finale'])):
classement = classement + 1
note_precedente = str(sorted_data['note_finale'])
# MAJ du rang
#print(" MAJJ classement = ", classement)
MYSY_GV.dbname['session_formation_final_note_classement'].find_one_and_update(
{'_id': ObjectId(str(sorted_data['_id'])),
'partner_owner_recid': str(sorted_data['partner_owner_recid']),
'valide': '1',
'locked': '0'
},
{"$set": {'rang': str(classement), 'rang_calculation_date': str(datetime.now())}},
return_document=ReturnDocument.AFTER,
upsert=False,
)
"""
Après avoir calculer et definit le rang par session, nous allons à présent faire le classement final pour toute la promo/session
"""
local_node = {}
local_node['token'] = diction['token']
local_node['class_id'] = diction['class_id']
local_node['session_id'] = diction['session_id']
local_node['tab_inscriptions_ids'] = diction['tab_inscriptions_ids']
local_status, local_retval = Cacul_Session_Note_Finale_For_calcul_Stanard(local_node)
if( local_status is False):
return True, "WARNING : "+str(local_retval)
return True, "Calcul Cacul_UE_Note_Finale_Standard ok"
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 lancer Cacul_UE_Note_Finale_Standard "
def run_ue_pre_calcul_moyenne_somme_v2(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', 'class_id', 'session_id', 'tab_ue_ids', 'tab_inscriptions_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é")
return False, " Les informations fournies sont incorrectes"
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'class_id', 'session_id', 'tab_ue_ids', 'tab_inscriptions_ids' ]
for val in field_list_obligatoire:
if val not in diction:
mycommon.myprint(
str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans la liste des arguments ")
return False, " Les informations fournies 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 la validité de la session
is_session_valide_count = MYSY_GV.dbname['session_formation'].count_documents({'_id':ObjectId(str(diction['session_id'])),
'valide':'1',
'partner_owner_recid':str(my_partner['recid'])})
if( is_session_valide_count != 1 ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " L'identifiant de la session est invalide ")
return False, " L'identifiant de la session est invalide"
is_session_valide_data = MYSY_GV.dbname['session_formation'].find_one(
{'_id': ObjectId(str(diction['session_id'])),
'valide': '1',
'partner_owner_recid': str(my_partner['recid'])})
tab_ue_ids = ""
if ("tab_ue_ids" in diction.keys()):
if diction['tab_ue_ids']:
tab_ue_ids = diction['tab_ue_ids']
tab_ue_ids_splited = str(tab_ue_ids).split(",")
for my_ue_id in tab_ue_ids_splited:
my_ue_id = str(my_ue_id).strip()
# Verifier la validité de l'unité d'enseignement
is_ue_valide_count = MYSY_GV.dbname['unite_enseignement'].count_documents(
{'_id': ObjectId(str(my_ue_id)),
'valide': '1',
'locked':'0',
'partner_owner_recid': str(my_partner['recid'])})
if (is_ue_valide_count != 1):
mycommon.myprint(
str(inspect.stack()[0][3]) + " L'identifiant de l'unité d'enseignement est invalide "+str(my_ue_id))
return False, " L'identifiant de l'unité d'enseignement "+str(my_ue_id)+" est invalide "
# Verifier si la formation est valide
is_myclass_valide_count = MYSY_GV.dbname['myclass'].count_documents(
{'_id': ObjectId(str(diction['class_id'])),
'valide': '1',
'locked': '0',
'partner_owner_recid': str(my_partner['recid'])})
if (is_myclass_valide_count != 1):
mycommon.myprint(
str(inspect.stack()[0][3]) + " L'identifiant de la formation est invalide ")
return False, " L'identifiant de la formation est invalide"
is_myclass_valide_data = MYSY_GV.dbname['myclass'].find_one(
{'_id': ObjectId(str(diction['class_id'])),
'valide': '1',
'locked': '0',
'partner_owner_recid': str(my_partner['recid'])})
# Verifier la validité de la liste des inscrits fournie
tab_inscriptions_ids = ""
if ("tab_inscriptions_ids" in diction.keys()):
if diction['tab_inscriptions_ids']:
tab_inscriptions_ids = diction['tab_inscriptions_ids']
tab_inscriptions_ids_splited = str(tab_inscriptions_ids).split(",")
# Controle de validité de toutes info avant de commencer les traitements
for my_inscription in tab_inscriptions_ids_splited:
my_inscription = str(my_inscription).strip()
# Verifier que l'inscription est valide
my_inscription_is_valide = MYSY_GV.dbname['inscription'].count_documents(
{'_id': ObjectId(str(my_inscription)), 'status': '1',
'partner_owner_recid': str(my_partner['recid'])})
if (my_inscription_is_valide != 1):
mycommon.myprint(
str(inspect.stack()[0][3]) + " L'inscription_id '" + my_inscription + "' n'est pas valide ")
return False, " L'inscription_id '" + my_inscription + "' n'est pas valide "
"""
La formule : ( (Moyenne Art. (TD) + Moyenne Art(TP) * 2)/3 + Examen Final ) / 2
"""
for my_ue_id in tab_ue_ids_splited:
my_ue_id = str(my_ue_id).strip()
my_ue_id_data = MYSY_GV.dbname['unite_enseignement'].find_one(
{'_id': ObjectId(str(my_ue_id)),
'valide': '1',
'locked': '0',
'partner_owner_recid': str(my_partner['recid'])})
evaluation_distinc_type_eval = MYSY_GV.dbname['note_evaluation'].distinct("type_eval_id",
{'class_eu_id': str(my_ue_id),
'valide': '1',
'locked': '0',
'partner_owner_recid': str(my_partner['recid'])
}
)
#print(" ### la liste evaluation_distinc_type_eval = ", evaluation_distinc_type_eval)
#print(" ### TRAITEMENT UE_ID = ", my_ue_id)
tab_note_final = []
for my_inscription in tab_inscriptions_ids_splited:
inscri_data = MYSY_GV.dbname['inscription'].find_one({'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0',
'_id': ObjectId(str(my_inscription).strip())},
{'nom': 1, 'prenom': 1, 'email': 1}
)
node_note_finale_inscrit = {}
node_note_finale_inscrit['inscription_id'] = str(inscri_data['_id'])
node_note_finale_inscrit['inscription_nom'] = str(inscri_data['nom'])
node_note_finale_inscrit['inscription_email'] = str(inscri_data['email'])
node_note_finale_inscrit['class_id'] = str(diction['class_id'])
node_note_finale_inscrit['session_id'] = str(diction['session_id'])
node_note_finale_inscrit['ue_id'] = str(my_ue_id)
############
"""
Traitement des Types d'evaluation
"""
for eval_type_id in evaluation_distinc_type_eval :
eval_type_id_data = MYSY_GV.dbname['type_evaluation'].find_one({'partner_owner_recid': str(my_partner['recid']),
'valide': '1',
'locked': '0',
'_id': ObjectId(str(eval_type_id))})
print(" TRAITEMENT TYPE EVAL iii : ", str(eval_type_id_data["code"]))
local_diction = diction
local_diction['tab_inscriptions_ids'] = str(my_inscription)
local_diction['inscri_data_nom'] = inscri_data['nom']
local_diction['inscri_data_prenom'] = inscri_data['prenom']
local_diction['inscri_data_email'] = inscri_data['email']
local_diction['ue_id'] = str(my_ue_id)
if ("tab_ue_ids" in local_diction.keys()):
del local_diction["tab_ue_ids"]
local_diction['evaluation_type_code'] = str(eval_type_id_data["code"])
local_diction['evaluation_type_id'] = str(eval_type_id_data["_id"])
local_status, local_retval_moyenne_TD, local_retval_somme_TD, local_retval_nb_eval_TD = Cacul_UE_Note_By_Evaluation_Type(
local_diction)
if (local_status):
new_node = {}
new_node['inscription_id'] = str(inscri_data['_id'])
new_node['inscription_nom'] = str(inscri_data['nom'])
new_node['inscription_email'] = str(inscri_data['email'])
new_node['class_id'] = str(diction['class_id'])
new_node['session_id'] = str(diction['session_id'])
new_node['ue_id'] = str(my_ue_id)
new_node['type_eval'] = str(eval_type_id_data["code"])
new_node['type_eval_id'] = str(eval_type_id)
new_node['moyenne'] = str(local_retval_moyenne_TD)
new_node['somme'] = str(local_retval_somme_TD)
new_node['nb_evaluation'] = str(local_retval_nb_eval_TD)
# Recuperer la ponderation associé à ce type d'evaluation
class_unite_enseignement_type_evaluation_data = MYSY_GV.dbname['class_unite_enseignement_type_evaluation'].find_one({'class_id':str(diction['class_id']),
'type_evaluation_id': str(eval_type_id_data["_id"]),
'class_ue_id': str(my_ue_id),
})
if( class_unite_enseignement_type_evaluation_data and 'ponderation_type_eval' in class_unite_enseignement_type_evaluation_data.keys()):
new_node['ponderation_type_eval'] = str(class_unite_enseignement_type_evaluation_data['ponderation_type_eval'])
else:
new_node['ponderation_type_eval'] = "1"
print(" WARNINNNNNNNNNNNN ponderation_type_eval")
tab_note_final.append(new_node)
else:
mycommon.myprint(
str(inspect.stack()[0][3]) + " WARNING : " + str(local_retval_moyenne_TD))
"""
Mise à jour de la collection des notes d'une session de formation : 'session_formation_final_note_classement_detail'
"""
print(" ### tab_note_final = ", tab_note_final)
for note_finale in tab_note_final:
qry_key = {}
qry_key['partner_owner_recid'] = my_partner['recid']
qry_key['valide'] = "1"
qry_key['locked'] = "0"
qry_key['inscription_id'] = note_finale['inscription_id']
qry_key['session_id'] = note_finale['session_id']
qry_key['type_eval'] = note_finale['type_eval']
qry_key['ue_id'] = note_finale['ue_id']
new_data = note_finale
new_data['date_update'] = str(datetime.now())
new_data['update_by'] = str(my_partner['_id'])
new_data['valide'] = "1"
new_data['locked'] = "0"
ret_val2 = MYSY_GV.dbname['session_formation_final_note_classement_detail'].find_one_and_update(
qry_key,
{"$set": new_data},
return_document=ReturnDocument.AFTER,
upsert=True,
)
return True, tab_note_final
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 calculer les notes avec le -calcul_mode_1- "
"""
Cette fonction va calculer moyenne par session (formation)
Précedemment les calculs se faisaient pas UE, a présent nous allons faire le calcul par formation.
Calcul selon la règle :
- [ UE * Coef (UE) ] / nb_coef
"""
def Cacul_Session_Note_Finale_For_calcul_Stanard(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', 'class_id', 'session_id', 'tab_inscriptions_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é")
return False, " Les informations fournies sont incorrectes"
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'class_id', 'session_id', 'tab_inscriptions_ids',]
for val in field_list_obligatoire:
if val not in diction:
mycommon.myprint(
str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans la liste des arguments ")
return False, " Les informations fournies 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 la validité de la session
is_session_valide_count = MYSY_GV.dbname['session_formation'].count_documents(
{'_id': ObjectId(str(diction['session_id'])),
'valide': '1',
'partner_owner_recid': str(my_partner['recid'])})
if (is_session_valide_count != 1):
mycommon.myprint(
str(inspect.stack()[0][3]) + " L'identifiant de la session est invalide ")
return False, " L'identifiant de la session est invalide"
is_session_valide_data = MYSY_GV.dbname['session_formation'].find_one(
{'_id': ObjectId(str(diction['session_id'])),
'valide': '1',
'partner_owner_recid': str(my_partner['recid'])})
# Verifier si la formartion est valide
is_myclass_valide_count = MYSY_GV.dbname['myclass'].count_documents(
{'_id': ObjectId(str(diction['class_id'])),
'valide': '1',
'locked': '0',
'partner_owner_recid': str(my_partner['recid'])})
if (is_myclass_valide_count != 1):
mycommon.myprint(
str(inspect.stack()[0][3]) + " L'identifiant de la formation est invalide ")
return False, " L'identifiant de la formation est invalide"
is_myclass_valide_data = MYSY_GV.dbname['myclass'].find_one(
{'_id': ObjectId(str(diction['class_id'])),
'valide': '1',
'locked': '0',
'partner_owner_recid': str(my_partner['recid'])})
"""
Recuperer la liste des UE de la formation, avec leur credit et coeff.*
"""
tab_class_ue = []
if( "list_unite_enseignement" in is_myclass_valide_data.keys() ):
tab_class_ue = is_myclass_valide_data['list_unite_enseignement']
if(len(tab_class_ue) <= 0 ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " Aucune unité d'enseignement pour cette formation ")
return False, " Aucune unité d'enseignement pour cette formation "
# Verifier la validité de la liste des inscrits fournie
tab_inscriptions_ids = ""
if ("tab_inscriptions_ids" in diction.keys()):
if diction['tab_inscriptions_ids']:
tab_inscriptions_ids = diction['tab_inscriptions_ids']
tab_inscriptions_ids_splited = str(tab_inscriptions_ids).split(",")
# Controle de validité de toutes info avant de commencer les traitements
for my_inscription in tab_inscriptions_ids_splited:
my_inscription = str(my_inscription).strip()
# Verifier que l'inscription est valide
my_inscription_is_valide = MYSY_GV.dbname['inscription'].count_documents(
{'_id': ObjectId(str(my_inscription)), 'status': '1',
'partner_owner_recid': str(my_partner['recid'])})
if (my_inscription_is_valide != 1):
mycommon.myprint(
str(inspect.stack()[0][3]) + " L'inscription_id '" + my_inscription + "' n'est pas valide ")
return False, " L'inscription_id '" + my_inscription + "' n'est pas valide "
"""
La formule : [ UE * Coef (UE) ] / nb_coef
"""
# Controle de validité de toutes info avant de commencer les traitements
for my_inscription in tab_inscriptions_ids_splited:
my_inscription = str(my_inscription).strip()
#print(" ### pour l'inscrit = ", my_inscription)
nb_coef = 0
session_somme_note_with_coef = 0
session_moyenne_note_with_coef = 0
session_somme_credit_acquis = 0
for class_ue in tab_class_ue :
for tmps_data in MYSY_GV.dbname['session_formation_final_note_classement'].find({'partner_owner_recid':str(my_partner['recid']),
'ue_id':str(class_ue['_id']),
'inscription_id':str(my_inscription),
'valide':'1',
'locked':'0'}):
coefficient = "1"
if( "coefficient" in class_ue.keys() and class_ue['coefficient']):
coefficient = class_ue['coefficient']
nb_coef = nb_coef + float(coefficient)
ue_note_with_coef = round( (float(tmps_data['note_finale'])*float(coefficient)), 2)
session_somme_note_with_coef = round( (session_somme_note_with_coef + ue_note_with_coef), 2)
"""
Si l'UE est validée, alors on attribut le credit comme validé
"""
if ("ue_validation" in tmps_data.keys() and str(tmps_data['ue_validation']) == "1" ):
if( "credit" in tmps_data.keys() and tmps_data['credit']):
session_somme_credit_acquis = round( (float(session_somme_credit_acquis) + float(tmps_data['credit'])), 2)
"""print(" ### session_somme_credit_acquis total = ", session_somme_credit_acquis)
print(" ### nb_coef total = ", nb_coef)
print(" ### session_somme_note_with_coef = ", session_somme_note_with_coef)"""
session_moyenne_note_with_coef = round( (float(session_somme_note_with_coef) / float(nb_coef)), 2)
#print(" ### session_moyenne_note_with_coef = ", session_moyenne_note_with_coef)
# MAJ de la note glabale
#print(" MAJJ classement glabal sur l'inscription = ")
MYSY_GV.dbname['inscription'].find_one_and_update(
{'_id': ObjectId(str(my_inscription)),
'partner_owner_recid': str(is_session_valide_data['partner_owner_recid']),
'session_id':str(is_session_valide_data['_id']),
'valide': '1',
'locked': '0'
},
{"$set": {'note_finale': str(session_moyenne_note_with_coef),
'credit_acquis':str(session_somme_credit_acquis)}},
return_document=ReturnDocument.AFTER,
upsert=False,
)
"""
Apres avoir saisi la note finale sur l'inscription, on va mettre à jour le rang
"""
classement = 0
note_precedente = ""
for sorted_data in MYSY_GV.dbname['inscription'].find(
{'partner_owner_recid': str(is_session_valide_data['partner_owner_recid']),
'session_id':str(is_session_valide_data['_id']),
'valide': '1',
'locked': '0' }).sort(
[("note_finale", pymongo.DESCENDING), ]):
if( sorted_data and "note_finale" in sorted_data.keys() ):
# Gestion des Execo
if (str(note_precedente) != str(sorted_data['note_finale'])):
classement = classement + 1
note_precedente = str(sorted_data['note_finale'])
# MAJ du rang
#print(" MAJJ classement = ", classement)
MYSY_GV.dbname['inscription'].find_one_and_update(
{'_id': ObjectId(str(sorted_data['_id'])),
'partner_owner_recid': str(sorted_data['partner_owner_recid']),
'valide': '1',
'locked': '0'
},
{"$set": {'rang': str(classement), 'rang_calculation_date':str(datetime.now())}},
return_document=ReturnDocument.AFTER,
upsert=False,
)
return True, "Calcul Final Moyenne et Classement ok"
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 lancer Cacul_Session_Note_Finale_For_calcul_mode_1 "

View File

@ -2551,6 +2551,7 @@ def get_class(diction):
}
]
mytoday = datetime.today()
print(" ### pipe myclass = ", pipe)
for retVal in coll_name.aggregate(pipe):
@ -2562,18 +2563,26 @@ def get_class(diction):
"""
#print('#### ICI retVal = '+str(retVal))
tab_selected_business_prices = []
if ("business_prices" in retVal.keys()):
if(len(retVal['business_prices']) > 0 and "discount" in retVal['business_prices'][0].keys() ):
"""
Calcal du prix discounté
"""
#print(" ### discount = ", x['business_prices'][0]['discount'], " PRIX initial = ", x['price'])
local_discount = mycommon.tryFloat(str(retVal['business_prices'][0]['discount']))
local_initial_price = mycommon.tryFloat(str(retVal['price']))
local_discounted_price = round( local_initial_price - (local_initial_price * (local_discount/100)), 2)
retVal['business_prices'][0]['discounted_price'] = str(local_discounted_price)
#print(" #### local_discounted_price = ", local_discounted_price)
for local_business_prices in retVal['business_prices']:
if ("date_du" in local_business_prices.keys() and "date_au" in local_business_prices.keys()
and mycommon.CheckisDate(local_business_prices['date_du']) and mycommon.CheckisDate(
local_business_prices['date_au'])):
local_date_du = datetime.strptime(str(local_business_prices['date_du']).strip(), '%d/%m/%Y')
local_date_au = datetime.strptime(str(local_business_prices['date_au']).strip(), '%d/%m/%Y')
if (local_date_du <= mytoday and mytoday <= local_date_au):
local_discount = mycommon.tryFloat(str(local_business_prices['discount']))
local_initial_price = mycommon.tryFloat(str(retVal['price']))
local_discounted_price = round(local_initial_price - (local_initial_price * (local_discount / 100)), 2)
local_business_prices['discounted_price'] = str(local_discounted_price)
retVal['business_prices'][0]['discounted_price'] = str(local_discounted_price)
tab_selected_business_prices.append(local_business_prices)
my_recid = {}
my_recid['user_rec_id'] = str(user_recid)
@ -2785,7 +2794,7 @@ def get_class(diction):
tab_ue_detail_data.append(local_node)
user['tab_ue_detail_data'] = tab_ue_detail_data
user['business_prices'] = tab_selected_business_prices
RetObject.append(JSONEncoder().encode(user))
@ -2995,8 +3004,8 @@ def get_class_for_partner_catalog(diction):
}
]
print(" ### pipe myclass = ", pipe)
#print(" ### pipe myclass = ", pipe)
mytoday = datetime.today()
for retVal in coll_name.aggregate(pipe):
"""
for retVal in coll_name.find({'valide':'1','locked':'0','internal_url':internal_url, 'published':'1'},
@ -3006,18 +3015,27 @@ def get_class_for_partner_catalog(diction):
"""
#print('#### ICI retVal = '+str(retVal))
tab_selected_business_prices = []
if ("business_prices" in retVal.keys()):
if(len(retVal['business_prices']) > 0 and "discount" in retVal['business_prices'][0].keys() ):
"""
Calcal du prix discounté
"""
#print(" ### discount = ", x['business_prices'][0]['discount'], " PRIX initial = ", x['price'])
local_discount = mycommon.tryFloat(str(retVal['business_prices'][0]['discount']))
local_initial_price = mycommon.tryFloat(str(retVal['price']))
local_discounted_price = round( local_initial_price - (local_initial_price * (local_discount/100)), 2)
retVal['business_prices'][0]['discounted_price'] = str(local_discounted_price)
#print(" #### local_discounted_price = ", local_discounted_price)
for local_business_prices in retVal['business_prices']:
if ("date_du" in local_business_prices.keys() and "date_au" in local_business_prices.keys()
and mycommon.CheckisDate(local_business_prices['date_du']) and mycommon.CheckisDate(
local_business_prices['date_au'])):
local_date_du = datetime.strptime(str(local_business_prices['date_du']).strip(), '%d/%m/%Y')
local_date_au = datetime.strptime(str(local_business_prices['date_au']).strip(), '%d/%m/%Y')
if (local_date_du <= mytoday and mytoday <= local_date_au):
local_discount = mycommon.tryFloat(str(local_business_prices['discount']))
local_initial_price = mycommon.tryFloat(str(retVal['price']))
local_discounted_price = round(
local_initial_price - (local_initial_price * (local_discount / 100)), 2)
retVal['business_prices'][0]['discounted_price'] = str(local_discounted_price)
local_business_prices['discounted_price'] = str(local_discounted_price)
tab_selected_business_prices.append(local_business_prices)
my_recid = {}
my_recid['user_rec_id'] = str(user_recid)
@ -3179,6 +3197,8 @@ def get_class_for_partner_catalog(diction):
#mycommon.myprint(" #### "+str(retVal))
user = retVal
user['business_prices'] = tab_selected_business_prices
if( "recyclage_delai" not in user.keys()):
user['recyclage_delai'] = ""

27
main.py
View File

@ -12428,6 +12428,19 @@ def run_ue_pre_calcul_moyenne_somme():
localStatus, message= base_class_calcul_note.run_ue_pre_calcul_moyenne_somme(payload)
return jsonify(status=localStatus, message=message )
"""
API de PRE PRE PRE calcul de la note finale
"""
@app.route('/myclass/api/run_ue_pre_calcul_moyenne_somme_v2', methods=['POST','GET'])
@crossdomain(origin='*')
def run_ue_pre_calcul_moyenne_somme_v2():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary(request.form.to_dict())
print(" ### run_ue_pre_calcul_moyenne_somme_v2 : payload = ",payload)
localStatus, message= base_class_calcul_note.run_ue_pre_calcul_moyenne_somme_v2(payload)
return jsonify(status=localStatus, message=message )
"""
@ -12474,6 +12487,20 @@ def Cacul_UE_Note_Finale_For_calcul_mode_1():
"""
API de calcul de la note finale d'une UE avec le model STANDARD : ue_calcul_mode_standard
"""
@app.route('/myclass/api/Cacul_UE_Note_Finale_Standard', methods=['POST','GET'])
@crossdomain(origin='*')
def Cacul_UE_Note_Finale_Standard():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary(request.form.to_dict())
print(" ### Cacul_UE_Note_Finale_Standard : payload = ",payload)
localStatus, message= base_class_calcul_note.Cacul_UE_Note_Finale_Standard(payload)
return jsonify(status=localStatus, message=message )
"""
API de calcul de la note finale d'une formation avec le model : class_calcul_mode_1
"""

View File

@ -456,7 +456,7 @@ def Add_Class_UE_Evaluation(diction):
"""
Verification des input acceptés
"""
field_list = ['token', 'class_id', 'class_ue_id', 'type_evaluation_id', 'max_note',
field_list = ['token', 'class_id', 'class_ue_id', 'type_evaluation_id', 'max_note', 'ponderation_type_eval'
]
incom_keys = diction.keys()
@ -560,7 +560,7 @@ def Update_Class_UE_Evaluation(diction):
"""
Verification des input acceptés
"""
field_list = ['token', 'max_note', 'class_ue_evaluation_id']
field_list = ['token', 'max_note', 'class_ue_evaluation_id', 'ponderation_type_eval']
incom_keys = diction.keys()
for val in incom_keys:
@ -733,6 +733,9 @@ def Get_List_Class_Evaluation(diction):
user['class_ue_code'] = class_ue_code
if("ponderation_type_eval" not in user.keys()):
user['ponderation_type_eval'] = "1"
val_tmp = val_tmp + 1

View File

@ -7942,3 +7942,29 @@ def Push_Document_To_ENT_For_Inscrit(tab_files, Folder, diction):
exc_type, exc_obj, exc_tb = sys.exc_info()
myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de publier les documents dans l'espace ENT "
"""
Fonction qui permet de recuperer la somme total des ponderation
d'un type d'evaluation dans la collection : 'class_unite_enseignement_type_evaluation'
"""
def Get_total_Ponderation_Class_UE_Type_Eval( class_id, ue_id):
try:
somme_ponderation = 0
print(" ### QRY Get_total_Ponderation_Class_UE_Type_Eval = ", {'class_id':class_id,
'class_ue_id':ue_id,
})
for tmp in MYSY_GV.dbname['class_unite_enseignement_type_evaluation'].find({'class_id':class_id,
'class_ue_id':ue_id,
}):
if( "ponderation_type_eval" in tmp.keys() ):
somme_ponderation = somme_ponderation + tryFloat(str(tmp['ponderation_type_eval']))
return True, somme_ponderation
except ValueError:
return False, 0

View File

@ -778,13 +778,21 @@ def Update_Ressource_Humaine(diction):
stocked_rh_data = MYSY_GV.dbname['ressource_humaine'].find_one(qry_update)
"""
Recuperation des données fournies en entrée
14/06/2025 - Concernant le compte super Admin du partenaire, il n'est pas autorisé à le modifier
"""
if( stocked_rh_data and "is_partner_admin_account" in stocked_rh_data.keys() and stocked_rh_data['is_partner_admin_account'] == "1"):
mycommon.myprint(
str(inspect.stack()[0][
3]) + " Vous n'êtes pas autorisé à modifier les information sur compte 'super admin du partenaire'. Merci de contacter le support ")
return False, "Vous n'êtes pas autorisé à modifier les information sur compte 'super admin du partenaire'. Merci de contacter le support "
data_update = {}
"""
Recuperation des données fournies en entrée
"""
Recuperation des données fournies en entrée
"""

View File

@ -279,22 +279,10 @@ def get_all_class(diction):
{'$limit': nb_formation_a_jouter},
]
print(" ### pipe = ", pipe)
#print(" ### pipe = ", pipe)
mytoday = datetime.today()
for x in coll_name.aggregate(pipe):
"""
for x in coll_name.find(
{"$and": [{"$or": [{'valide': '1', 'locked': '0', 'isalaune': '1', 'published': '1'},
{'coeur': 1, 'published': '1'}]},
{'external_code': {'$nin': alread_found}}
]},
{"_id": 0, "indexed": 0, "indexed_desc": 0, "indexed_obj": 0, "indexed_title": 0,
"valide": 0, "locked": 0, }).\
limit(nb_formation_a_jouter).\
sort(
[("display_rank", pymongo.DESCENDING), ("price", pymongo.ASCENDING), ("date_update", pymongo.DESCENDING) ]):
"""
#print("AVANT ==> "+str(x['description']))
if ("description" in x.keys()):
val = x['description']
@ -307,22 +295,32 @@ def get_all_class(diction):
#mycommon.myprint("APRES ==> " + str(x['description']))
tab_selected_business_prices = []
if ("business_prices" in x.keys()):
# print(" ### business_prices = ", x['business_prices'], " len(x['business_prices']) = ", len(x['business_prices']))
if (len(x['business_prices']) > 0 and "discount" in x['business_prices'][0].keys()):
"""
Calcal du prix discounté
"""
# print(" ### discount = ", x['business_prices'][0]['discount'], " PRIX initial = ", x['price'])
local_discount = mycommon.tryFloat(str(x['business_prices'][0]['discount']))
local_initial_price = mycommon.tryFloat(str(x['price']))
local_discounted_price = round(local_initial_price - (local_initial_price * (local_discount / 100)),
2)
x['business_prices'][0]['discounted_price'] = str(local_discounted_price)
# print(" #### local_discounted_price = ", local_discounted_price)
print(" ### x['business_prices'] == ",x['business_prices'])
for local_business_prices in x['business_prices']:
if ("date_du" in local_business_prices.keys() and "date_au" in local_business_prices.keys()
and mycommon.CheckisDate(local_business_prices['date_du']) and mycommon.CheckisDate(
local_business_prices['date_au'])):
local_date_du = datetime.strptime(str(local_business_prices['date_du']).strip(), '%d/%m/%Y')
local_date_au = datetime.strptime(str(local_business_prices['date_au']).strip(), '%d/%m/%Y')
if (local_date_du <= mytoday and mytoday <= local_date_au):
local_discount = mycommon.tryFloat(str(local_business_prices['discount']))
local_initial_price = mycommon.tryFloat(str(x['price']))
local_discounted_price = round(
local_initial_price - (local_initial_price * (local_discount / 100)), 2)
x['business_prices'][0]['discounted_price'] = str(local_discounted_price)
local_business_prices['discounted_price'] = str(local_discounted_price)
tab_selected_business_prices.append(local_business_prices)
user = x
user['id'] = str(val_tmp)
user['business_prices'] = tab_selected_business_prices
insertObject.append(JSONEncoder().encode(user))
#print(" 1111111 ")
@ -529,21 +527,10 @@ def get_all_class_Given_partner_owner_recid_No_Login(diction):
{'$limit': nb_formation_a_jouter},
]
print(" ### get_all_class_Given_partner_owner_recid_No_Login pipe = ", pipe)
mytoday = datetime.today()
#print(" ### get_all_class_Given_partner_owner_recid_No_Login pipe = ", pipe)
for x in coll_name.aggregate(pipe):
"""
for x in coll_name.find(
{"$and": [{"$or": [{'valide': '1', 'locked': '0', 'isalaune': '1', },
{'coeur': 1, 'published': '1'}]},
{'external_code': {'$nin': alread_found}}
]},
{"_id": 0, "indexed": 0, "indexed_desc": 0, "indexed_obj": 0, "indexed_title": 0,
"valide": 0, "locked": 0, }).\
limit(nb_formation_a_jouter).\
sort(
[("display_rank", pymongo.DESCENDING), ("price", pymongo.ASCENDING), ("date_update", pymongo.DESCENDING) ]):
"""
# print("AVANT ==> "+str(x['description']))
if ("description" in x.keys()):
@ -557,22 +544,31 @@ def get_all_class_Given_partner_owner_recid_No_Login(diction):
# mycommon.myprint("APRES ==> " + str(x['description']))
tab_selected_business_prices = []
if ("business_prices" in x.keys()):
# print(" ### business_prices = ", x['business_prices'], " len(x['business_prices']) = ", len(x['business_prices']))
if (len(x['business_prices']) > 0 and "discount" in x['business_prices'][0].keys()):
"""
Calcal du prix discounté
"""
# print(" ### discount = ", x['business_prices'][0]['discount'], " PRIX initial = ", x['price'])
local_discount = mycommon.tryFloat(str(x['business_prices'][0]['discount']))
local_initial_price = mycommon.tryFloat(str(x['price']))
local_discounted_price = round(local_initial_price - (local_initial_price * (local_discount / 100)),
2)
x['business_prices'][0]['discounted_price'] = str(local_discounted_price)
# print(" #### local_discounted_price = ", local_discounted_price)
for local_business_prices in x['business_prices']:
if ("date_du" in local_business_prices.keys() and "date_au" in local_business_prices.keys()
and mycommon.CheckisDate(local_business_prices['date_du']) and mycommon.CheckisDate(
local_business_prices['date_au'])):
local_date_du = datetime.strptime(str(local_business_prices['date_du']).strip(), '%d/%m/%Y')
local_date_au = datetime.strptime(str(local_business_prices['date_au']).strip(), '%d/%m/%Y')
if (local_date_du <= mytoday and mytoday <= local_date_au):
local_discount = mycommon.tryFloat(str(local_business_prices['discount']))
local_initial_price = mycommon.tryFloat(str(x['price']))
local_discounted_price = round(
local_initial_price - (local_initial_price * (local_discount / 100)), 2)
x['business_prices'][0]['discounted_price'] = str(local_discounted_price)
local_business_prices['discounted_price'] = str(local_discounted_price)
tab_selected_business_prices.append(local_business_prices)
user = x
user['id'] = str(val_tmp)
user['business_prices'] = tab_selected_business_prices
insertObject.append(JSONEncoder().encode(user))
# print(" 1111111 ")
@ -1014,12 +1010,6 @@ def recherche_text_simple(diction):
23/02/2023 : FIN Uniquement pour des raisons de tests
"""
"""
for x in coll_name.find({"external_code":{"$in":tab_training}, 'published':'1'},
{"_id": 0, "indexed": 0, "indexed_desc": 0,
"indexed_obj": 0, "indexed_title": 0, "valide": 0,
"locked": 0 }).sort([("display_rank", pymongo.DESCENDING), ("price", pymongo.ASCENDING), ("date_update", pymongo.DESCENDING), ]):
"""
pipe = [
{ '$match': {'external_code': {"$in": tab_training}, 'published':'1'} },
@ -1051,29 +1041,38 @@ def recherche_text_simple(diction):
{'$sort': {"display_rank": pymongo.DESCENDING, "price": pymongo.ASCENDING,
"date_update": pymongo.DESCENDING}},
]
mytoday = datetime.today()
print(" ### pipe recherche_text_simple = ", pipe)
for x in coll_name.aggregate(pipe):
nb_result = nb_result + 1
tab_selected_business_prices = []
if ("business_prices" in x.keys()):
#print(" ### business_prices = ", x['business_prices'], " len(x['business_prices']) = ", len(x['business_prices']))
if(len(x['business_prices']) > 0 and "discount" in x['business_prices'][0].keys() ):
"""
Calcal du prix discounté
"""
#print(" ### discount = ", x['business_prices'][0]['discount'], " PRIX initial = ", x['price'])
local_discount = mycommon.tryFloat(str(x['business_prices'][0]['discount']))
local_initial_price = mycommon.tryFloat(str(x['price']))
local_discounted_price = round( local_initial_price - (local_initial_price * (local_discount/100)), 2)
x['business_prices'][0]['discounted_price'] = str(local_discounted_price)
#print(" #### local_discounted_price = ", local_discounted_price)
for local_business_prices in x['business_prices']:
if ("date_du" in local_business_prices.keys() and "date_au" in local_business_prices.keys()
and mycommon.CheckisDate(local_business_prices['date_du']) and mycommon.CheckisDate(
local_business_prices['date_au'])):
local_date_du = datetime.strptime(str(local_business_prices['date_du']).strip(), '%d/%m/%Y')
local_date_au = datetime.strptime(str(local_business_prices['date_au']).strip(), '%d/%m/%Y')
if (local_date_du <= mytoday and mytoday <= local_date_au):
local_discount = mycommon.tryFloat(str(local_business_prices['discount']))
local_initial_price = mycommon.tryFloat(str(x['price']))
local_discounted_price = round(
local_initial_price - (local_initial_price * (local_discount / 100)), 2)
x['business_prices'][0]['discounted_price'] = str(local_discounted_price)
local_business_prices['discounted_price'] = str(local_discounted_price)
tab_selected_business_prices.append(local_business_prices)
my_recid = {}
my_recid['user_rec_id'] = str(user_recid)
#print(" XXXXXXXXXX = "+str(x))
mydict_combined = {**diction, **x, **my_recid}
mydict_combined['date_update'] = str(datetime.now())
@ -1095,6 +1094,7 @@ def recherche_text_simple(diction):
return False, "La recheche est impossible "
user = x
user['business_prices'] = tab_selected_business_prices
val = mycommon.clean_emoji(str(x['description']))
no_html = mycommon.cleanhtml(val)
@ -1489,28 +1489,37 @@ def recherche_text_simple_for_partner_catalog(diction):
"date_update": pymongo.DESCENDING}},
]
mytoday = datetime.today()
print(" ### pipe recherche_text_simple = ", pipe)
for x in coll_name.aggregate(pipe):
nb_result = nb_result + 1
tab_selected_business_prices = []
if ("business_prices" in x.keys()):
# print(" ### business_prices = ", x['business_prices'], " len(x['business_prices']) = ", len(x['business_prices']))
if (len(x['business_prices']) > 0 and "discount" in x['business_prices'][0].keys()):
"""
Calcal du prix discounté
"""
# print(" ### discount = ", x['business_prices'][0]['discount'], " PRIX initial = ", x['price'])
local_discount = mycommon.tryFloat(str(x['business_prices'][0]['discount']))
local_initial_price = mycommon.tryFloat(str(x['price']))
local_discounted_price = round(local_initial_price - (local_initial_price * (local_discount / 100)),
2)
x['business_prices'][0]['discounted_price'] = str(local_discounted_price)
# print(" #### local_discounted_price = ", local_discounted_price)
for local_business_prices in x['business_prices']:
if ("date_du" in local_business_prices.keys() and "date_au" in local_business_prices.keys()
and mycommon.CheckisDate(local_business_prices['date_du']) and mycommon.CheckisDate(
local_business_prices['date_au'])):
local_date_du = datetime.strptime(str(local_business_prices['date_du']).strip(), '%d/%m/%Y')
local_date_au = datetime.strptime(str(local_business_prices['date_au']).strip(), '%d/%m/%Y')
if (local_date_du <= mytoday and mytoday <= local_date_au):
local_discount = mycommon.tryFloat(str(local_business_prices['discount']))
local_initial_price = mycommon.tryFloat(str(x['price']))
local_discounted_price = round(
local_initial_price - (local_initial_price * (local_discount / 100)), 2)
x['business_prices'][0]['discounted_price'] = str(local_discounted_price)
local_business_prices['discounted_price'] = str(local_discounted_price)
tab_selected_business_prices.append(local_business_prices)
my_recid = {}
my_recid['user_rec_id'] = str(user_recid)
# print(" XXXXXXXXXX = "+str(x))
mydict_combined = {**diction, **x, **my_recid}
mydict_combined['date_update'] = str(datetime.now())
@ -1530,6 +1539,7 @@ def recherche_text_simple_for_partner_catalog(diction):
return False, "La recheche est impossible "
user = x
user['business_prices'] = tab_selected_business_prices
val = mycommon.clean_emoji(str(x['description']))
no_html = mycommon.cleanhtml(val)