03/09/2024 - 20:00

master
cherif 2024-09-03 20:53:53 +02:00
parent 9a905df4d3
commit fecc9123ee
8 changed files with 9059 additions and 38 deletions

View File

@ -1,10 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="01/09/2024 - 14:00">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="01/09/2024 - 20:00">
<change afterPath="$PROJECT_DIR$/type_cours.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Dashbord_queries/BPF.py" beforeDir="false" afterPath="$PROJECT_DIR$/Dashbord_queries/BPF.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$/domaine_formation_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/domaine_formation_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/prj_common.py" beforeDir="false" afterPath="$PROJECT_DIR$/prj_common.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/unite_enseignement_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/unite_enseignement_mgt.py" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -74,13 +79,6 @@
<option name="presentableId" value="Default" />
<updated>1680804787304</updated>
</task>
<task id="LOCAL-00339" summary="qsds">
<created>1719144150975</created>
<option name="number" value="00339" />
<option name="presentableId" value="LOCAL-00339" />
<option name="project" value="LOCAL" />
<updated>1719144150976</updated>
</task>
<task id="LOCAL-00340" summary="26/06/2024 - 19h30">
<created>1719423411649</created>
<option name="number" value="00340" />
@ -417,7 +415,14 @@
<option name="project" value="LOCAL" />
<updated>1725191980575</updated>
</task>
<option name="localTasksCounter" value="388" />
<task id="LOCAL-00388" summary="01/09/2024 - 20:00">
<created>1725213634326</created>
<option name="number" value="00388" />
<option name="presentableId" value="LOCAL-00388" />
<option name="project" value="LOCAL" />
<updated>1725213634327</updated>
</task>
<option name="localTasksCounter" value="389" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
@ -459,7 +464,6 @@
</option>
</component>
<component name="VcsManagerConfiguration">
<MESSAGE value="02/08/2024 - 17h" />
<MESSAGE value="03/08/2024 - 18h30" />
<MESSAGE value="08/08/2024 - 20h30" />
<MESSAGE value="08/08/2024 - 20h32" />
@ -484,6 +488,7 @@
<MESSAGE value="31082024" />
<MESSAGE value="31/08/2024 - 18h50" />
<MESSAGE value="01/09/2024 - 14:00" />
<option name="LAST_COMMIT_MESSAGE" value="01/09/2024 - 14:00" />
<MESSAGE value="01/09/2024 - 20:00" />
<option name="LAST_COMMIT_MESSAGE" value="01/09/2024 - 20:00" />
</component>
</project>

View File

@ -176,7 +176,7 @@ def Get_Qery_Generate_BPF_From_partner_invoice_header(diction):
{'$expr':
{'$and':
[
{'$eq': ["order_line_is_include_bpf", "1"]},
{'$eq': ["$order_line_is_include_bpf", "1"]},
{'$eq': ["$valide", "1"]},
{'$eq': ["$invoice_header_ref_interne",
'$$partner_invoice_line_invoice_header_ref_interne']},
@ -1398,8 +1398,8 @@ def Prepare_and_Print_BPF_PDF(diction):
{'$expr':
{'$and':
[
{'$eq': ["$valide", "1"]},
{'$eq': ["$order_line_is_include_bpf", "1"]},
{'$eq': ["$valide", "1"]},
{'$eq': ["$invoice_header_ref_interne",
'$$partner_invoice_line_invoice_header_ref_interne']},
{'$eq': ["$partner_owner_recid", '$$partner_invoice_line_partner_owner_recid']},
@ -1429,6 +1429,11 @@ def Prepare_and_Print_BPF_PDF(diction):
},
])
print(
" ### C1_pipe_qry_invoice_header_partner__invoice_line_detail__is_client_1_is_financeur_0_is_company_1 = ",
C1_pipe_qry_invoice_header_partner__invoice_line_detail__is_client_1_is_financeur_0_is_company_1)
for retval in MYSY_GV.dbname['partner_invoice_header'].aggregate(
C1_pipe_qry_invoice_header_partner__invoice_line_detail__is_client_1_is_financeur_0_is_company_1):
print(" ### retval bpf_c1_entreprise = ", retval)
@ -1575,7 +1580,7 @@ def Prepare_and_Print_BPF_PDF(diction):
total_bpf_c_type_apprenant = 0
for retval in MYSY_GV.dbname['partner_invoice_header'].aggregate(
C2_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_organisme_financement__type_apprenant):
print(" ### retval = ", retval)
node = {}
node['Type_Apprenant_Code'] = retval['_id']['Type_Apprenant']
node['Type_Apprenant_Desc'] = retval['_id']['Type_Apprenant_Description']
@ -1587,6 +1592,7 @@ def Prepare_and_Print_BPF_PDF(diction):
RetObject['bpf_c2_type_apprenant'] = bpf_c2_type_apprenant
RetObject['total_bpf_c_type_apprenant'] = round(total_bpf_c_type_apprenant, 2)
total_c1_C9 = total_c1_C9 + mycommon.tryFloat(total_bpf_c_type_apprenant)
print(" ### total_c1_C9 = ", total_c1_C9, ", ### total_bpf_c_type_apprenant = ", total_bpf_c_type_apprenant)
C3_qery_match = {'$and': [
{"valide": '1', 'invoice_header_type': 'facture',
@ -1996,14 +2002,22 @@ def Prepare_and_Print_BPF_PDF(diction):
RetObject['bpf_e2_nb_formateurs_externes'] = str(len(tab_formateur_rh_id_sous_traitant))
RetObject['bpf_e2_nb_heures_formateurs_externes'] = tab_formateur_rh_sous_traitant_total_heure
F1_qery_match = {'$and': [{"partner_owner_recid": str(my_partner['recid'])}, {"valide": '1', 'status': '1'},
"""
FIN TRAITEMENT DU PAVE EEEE
"""
"""
TRAITEMENT DU PAVE FFFF
"""
F3_qery_match = {'$and': [{"partner_owner_recid": str(my_partner['recid'])}, {"valide": '1', 'status': '1'},
]}
F1_pipe_qry_stagiaire_par_class_level = ([
F3_pipe_qry_stagiaire_par_class_level = ([
{'$project': {'_id': 1, 'email': 1, 'session_id': 1, 'nom': 1, 'prenom': 1, 'partner_owner_recid': 1,
'valide': 1, 'type_apprenant': 1, 'status': 1}},
{'$match': F1_qery_match},
{'$match': F3_qery_match},
{'$lookup': {
'from': 'session_formation',
'let': {'session_id': "$session_id", 'partner_owner_recid': '$partner_owner_recid'},
@ -2115,10 +2129,10 @@ def Prepare_and_Print_BPF_PDF(diction):
])
print(" ### F1_pipe_qry_stagiaire_par_class_level = ", F1_pipe_qry_stagiaire_par_class_level)
print(" ### F3_pipe_qry_stagiaire_par_class_level = ", F3_pipe_qry_stagiaire_par_class_level)
bpf_f_class_niveau_formation = []
total_bpf_f_class_niveau_formation = 0
bpf_f3_class_niveau_formation = []
total_bpf_f3_class_niveau_formation = 0
"""
Recuperer la configuration de conversion des semaines, mois, années en nombre d'heures
@ -2126,7 +2140,7 @@ def Prepare_and_Print_BPF_PDF(diction):
local_conversion_heure_status, local_nb_heure_par_jour, local_nb_heure_par_sem, local_nb_heure_par_mois, local_nb_heure_par_annee = mycommon.Get_Config_Conversion_Heures(
str(my_partner['recid']))
for retval in MYSY_GV.dbname['inscription'].aggregate(F1_pipe_qry_stagiaire_par_class_level):
for retval in MYSY_GV.dbname['inscription'].aggregate(F3_pipe_qry_stagiaire_par_class_level):
# print(" ### retval = ", retval)
node = {}
@ -2140,7 +2154,7 @@ def Prepare_and_Print_BPF_PDF(diction):
{'$project': {'_id': 1, 'email': 1, 'session_id': 1, 'nom': 1, 'prenom': 1, 'partner_owner_recid': 1,
'valide': 1, 'type_apprenant': 1, 'status': 1}},
{'$match': F1_qery_match},
{'$match': F3_qery_match},
{'$lookup': {
'from': 'session_formation',
'let': {'session_id': "$session_id", 'partner_owner_recid': '$partner_owner_recid'},
@ -2270,14 +2284,188 @@ def Prepare_and_Print_BPF_PDF(diction):
node['total_nb_heure_formation_by_level'] = str(total_nb_heure_formation_by_level)
total_bpf_f_class_niveau_formation = total_bpf_f_class_niveau_formation + mycommon.tryFloat(retval['count'])
bpf_f_class_niveau_formation.append(node)
total_bpf_f3_class_niveau_formation = total_bpf_f3_class_niveau_formation + mycommon.tryFloat(
retval['count'])
bpf_f3_class_niveau_formation.append(node)
RetObject['bpf_f_class_niveau_formation'] = bpf_f_class_niveau_formation
RetObject['total_bpf_f_class_niveau_formation'] = round(total_bpf_f_class_niveau_formation, 2)
RetObject['bpf_f3_class_niveau_formation'] = bpf_f3_class_niveau_formation
RetObject['total_bpf_f3_class_niveau_formation'] = round(total_bpf_f3_class_niveau_formation, 2)
""""
F1 Les différents types de stagiaires au sein de votre organisme
"""
"""
Recuperation des types d'apprenant
"""
bpf_f1_type_apprenant = []
nb_personne_a_distance = 0
nb_personne = 0
nb_heure_formation = 0
for type_apprenant_data in MYSY_GV.dbname['type_apprenant'].find({'valide': '1', 'locked': '0'}):
F1_qery_match = {'$and': [{"partner_owner_recid": str(my_partner['recid'])}, {"valide": '1', 'status': '1',
'type_apprenant': str(
type_apprenant_data[
'code'])},
]}
F1_pipe_qry_stagiaire_type = ([
{'$project': {'_id': 1, 'email': 1, 'session_id': 1, 'nom': 1, 'prenom': 1, 'partner_owner_recid': 1,
'valide': 1, 'type_apprenant': 1, 'status': 1, }},
{'$match': F1_qery_match},
{'$lookup': {
'from': 'session_formation',
'let': {'session_id': "$session_id", 'partner_owner_recid': '$partner_owner_recid'},
'pipeline': [
{
"$addFields": {
"mysy_date_debut_session": {
"$dateFromString": {
"dateString": "$date_debut",
"format": "%d/%m/%Y"
}
}
}
},
{'$project': {'_id': 1, 'code_session': 1, 'class_internal_url': 1, 'date_debut': 1,
'date_fin': 1,
'nb_participant': 1, 'partner_owner_recid': 1, 'valide': 1,
'mysy_date_debut_session': 1, 'distantiel': 1}},
{'$match':
{'$expr':
{'$and':
[
{'$eq': ["$_id", {'$convert': {
'input': "$$session_id",
'to': "objectId",
'onError': {'error': 'true'},
'onNull': {'isnull': 'true'}
}}]},
{'$eq': ["$valide", "1"]},
{'$eq': ["$partner_owner_recid", '$$partner_owner_recid']},
{'$gte': [{'$toDate': "$mysy_date_debut_session"},
filt_periode_start_date_ISODATE]},
{'$lt': [{'$toDate': "$mysy_date_debut_session"},
filt_periode_end_date_ISODATE]},
]
}
}
},
],
'as': 'session_formation_collection'
}
},
{
'$unwind': '$session_formation_collection'
},
{
"$lookup": {
'from': 'myclass',
'localField': 'session_formation_collection.class_internal_url',
'foreignField': 'internal_url',
"pipeline": [
{'$project': {'title': 1, 'internal_url': 1, 'external_code': 1, 'published': 1,
'duration': 1, 'duration_unit': 1, 'class_level': 1,
'partner_owner_recid': 1}},
{'$match': {'partner_owner_recid': str(my_partner['recid'])}},
],
"as": "myclass_collection"
}
},
{
'$unwind': '$myclass_collection'
},
{
"$group": {
"_id": {
"class_id": "$myclass_collection._id",
"class_external_code": "$myclass_collection.external_code",
"class_duration": "$myclass_collection.duration",
"class_duration_unit": "$myclass_collection.duration_unit",
"session_distance": "$session_formation_collection.distantiel"
},
"count": {
"$sum": 1
}
}
},
])
print(" ### F1_pipe_qry_stagiaire_type pour : " + str(type_apprenant_data['description']) + " = ",
F1_pipe_qry_stagiaire_type)
total_bpf_f1_type_apprenant = 0
total_bpf_f1_nb_heure_formation = 0
node = {}
node['Type_Apprenant'] = str(type_apprenant_data['code'])
node['Type_Apprenant_Desc'] = str(type_apprenant_data['description'])
local_f1_nb_distance = 0
for f1_local_retval in MYSY_GV.dbname['inscription'].aggregate(F1_pipe_qry_stagiaire_type):
# print(" ### retval F1_pipe_qry_stagiaire_type = ", f1_local_retval)
total_bpf_f1_type_apprenant = total_bpf_f1_type_apprenant + mycommon.tryFloat(f1_local_retval['count'])
nb_personne = nb_personne + + mycommon.tryFloat(f1_local_retval['count'])
if (str(f1_local_retval['_id']['session_distance']) == "1"):
nb_personne_a_distance = nb_personne_a_distance + mycommon.tryFloat(f1_local_retval['count'])
local_f1_nb_distance = local_f1_nb_distance + mycommon.tryFloat(f1_local_retval['count'])
print(" ### nb_personne_a_distance= ", str(nb_personne_a_distance))
print(" ### local_f1_nb_distance= ", str(local_f1_nb_distance))
"""
traitement du nombre d'heure de formation
"""
local_duration = mycommon.tryFloat(str(f1_local_retval['_id']['class_duration']))
local_duration_unit = str(f1_local_retval['_id']['class_duration_unit'])
if (str(local_duration_unit) == "heure"):
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + local_duration
elif (str(local_duration_unit) == "jour"):
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + (
local_duration * local_nb_heure_par_jour)
elif (str(local_duration_unit) == "semaine"):
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + (
local_duration * local_nb_heure_par_sem)
elif (str(local_duration_unit) == "mois"):
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + (
local_duration * local_nb_heure_par_mois)
elif (str(local_duration_unit) == "annee"):
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + (
local_duration * local_nb_heure_par_annee)
node['total_bpf_f1_type_apprenant'] = str(total_bpf_f1_type_apprenant)
node['total_bpf_f1_type_apprenant_distance'] = str(local_f1_nb_distance)
node['total_bpf_f1_nb_heure_formation'] = str(total_bpf_f1_nb_heure_formation)
nb_heure_formation = nb_heure_formation + mycommon.tryFloat(total_bpf_f1_nb_heure_formation)
bpf_f1_type_apprenant.append(node)
RetObject['total_f1_apprenant_a_distance'] = str(nb_personne_a_distance)
RetObject['total_f1_apprenant'] = str(nb_personne)
RetObject['total_f1_nb_heure'] = str(nb_heure_formation)
RetObject['filt_periode_start_date'] = str(filt_periode_start_date)
RetObject['filt_periode_end_date'] = str(filt_periode_end_date)
RetObject['bpf_f1_type_apprenant'] = bpf_f1_type_apprenant
print(" ### RetObject BPF = ", RetObject)
# Creation du dictionnaire d'information à utiliser pour la creation du doc
convention_dictionnary_data = {}
new_diction = {}
@ -2294,11 +2482,16 @@ def Prepare_and_Print_BPF_PDF(diction):
return local_status, local_retval
convention_dictionnary_data = local_retval
convention_dictionnary_data['bpf_data'] = RetObject
body = {
"params": convention_dictionnary_data,
}
#json_formatted_str = json.dumps(body, indent=2)
#print(" ### AFFICHAGE dU data dictionnary -- body body ")
#print(json_formatted_str)
"""
Recuperer le modèle de document
"""
@ -2333,7 +2526,7 @@ def Prepare_and_Print_BPF_PDF(diction):
if (len(str(tmp_file_name)) > 30):
tmp_file_name = str(tmp_file_name)[0:30]
orig_file_name = "Contrat_" + str(tmp_file_name) + "_" + str(ts) + ".pdf"
orig_file_name = str(tmp_file_name) + "_" + str(ts) + ".pdf"
outputFilename = str(MYSY_GV.TEMPORARY_DIRECTORY) + "/" + str(orig_file_name)
# open output file for writing (truncated binary)

File diff suppressed because one or more lines are too long

View File

@ -65,7 +65,7 @@ def Add_Class_Domaine(diction):
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'code', 'nom', 'class_domaine_id']
field_list_obligatoire = ['token', 'code', 'nom',]
for val in field_list_obligatoire:
if val not in diction:
@ -185,13 +185,11 @@ def Update_Class_domaine(diction):
return False, " L'identifiant de le domaine est invalide "
local_id = str(diction['_id'])
del diction['token']
del diction['_id']
new_data['date_update'] = str(datetime.now())
new_data['update_by'] = str(my_partner['_id'])
@ -269,7 +267,7 @@ def Delete_Class_domaine(diction):
return local_status, my_partner
# Verifier que la codition de paiement existe
is_existe_class_domaine = MYSY_GV.dbname['class_domaine'].count_documents(
{'_id': ObjectId(str(diction['_id'])),
'valide': '1',
@ -282,7 +280,7 @@ def Delete_Class_domaine(diction):
"""
Verifier que la domaine de formation n'est pas utilisée (collection : myclass)
Verifier que le domaine de formation n'est pas utilisé (collection : myclass)
"""
is_domaine_in_myclass = MYSY_GV.dbname['myclass'].count_documents({'partner_owner_recid':my_partner['recid'],
'valide':'1',
@ -358,7 +356,7 @@ def Get_List_Class_domaine(diction):
Clés de mise à jour
"""
data_cle = {}
#data_cle['partner_owner_recid'] = str(my_partner['recid'])
data_cle['partner_owner_recid'] = str(my_partner['recid'])
data_cle['valide'] = "1"
data_cle['locked'] = "0"
@ -366,7 +364,7 @@ def Get_List_Class_domaine(diction):
RetObject = []
val_tmp = 0
for retval in MYSY_GV.dbname['class_domaine'].find(data_cle):
for retval in MYSY_GV.dbname['class_domaine'].find(data_cle).sort([("_id", pymongo.DESCENDING), ]):
user = retval
user['id'] = str(val_tmp)
val_tmp = val_tmp + 1
@ -383,7 +381,7 @@ def Get_List_Class_domaine(diction):
"""
Recuperer les données d'un domainede formtion donnée
Recuperer les données d'un domaine de formtion donnée
"""
def Get_Given_Class_domaine(diction):
try:

13
main.py
View File

@ -95,6 +95,7 @@ import partner_produit_service_mgt as partner_produit_service_mgt
import model_planning_sequence_mgt as model_planning_sequence_mgt
import base_partner_catalog_config as base_partner_catalog_config
import Dashbord_queries.BPF as BPF
import type_cours as type_cours
app = Flask(__name__)
cors = CORS(app, resources={r"/foo": {"origins": "*"}})
@ -11059,6 +11060,18 @@ def Prepare_and_Print_BPF_PDF(token, periode_start_date, periode_end_date):
else:
return False
"""
API pour recuperer les types de cours (TP, CM, TPG etc)
"""
@app.route('/myclass/api/Get_List_Type_Cours/', methods=['POST','GET'])
@crossdomain(origin='*')
def Get_List_Type_Cours():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### Get_List_Type_Cours payload = ",payload)
status, retval = type_cours.Get_List_Type_Cours(payload)
return jsonify(status=status, message=retval)
if __name__ == '__main__':

View File

@ -4588,7 +4588,7 @@ def Get_Dictionnary_data_For_Template(diction):
local_company_data = local_retval
company_data = {}
company_liste_champ = ['nom', 'email', 'telephone', 'num_nda', 'website', 'adr_street', 'adr_zip', 'adr_city', 'adr_country']
company_liste_champ = ['nom', 'email', 'telephone', 'num_nda', 'website', 'adr_street', 'adr_zip', 'adr_city', 'adr_country', 'siret']
for champ in company_liste_champ:
if (champ in local_company_data):
new_champ_name = "societe_" + str(champ)

105
type_cours.py Normal file
View File

@ -0,0 +1,105 @@
"""
Ce fichier permet de gerer les types de cours
"""
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
"""
Recuperer la liste des type d'evaluation d'un partenaire
"""
def Get_List_Type_Cours(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'existe pas")
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 liste ")
return False, " Les informations fournies sont incorrectes",
"""
Verification de l'identité et autorisation de l'entité qui
appelle cette API
"""
token = ""
if ("token" in diction.keys()):
if diction['token']:
token = diction['token']
local_status, my_partner = mycommon.Check_Connexion_And_Return_Partner_Data(diction)
if (local_status is not True):
return local_status, my_partner
"""
Clés de mise à jour
"""
data_cle = {}
data_cle['partner_owner_recid'] = "default"
data_cle['valide'] = "1"
data_cle['locked'] = "0"
RetObject = []
val_tmp = 0
for retval in MYSY_GV.dbname['type_cours'].find(data_cle).sort([("_id", pymongo.DESCENDING), ]):
user = retval
user['id'] = str(val_tmp)
val_tmp = val_tmp + 1
RetObject.append(mycommon.JSONEncoder().encode(user))
return True, RetObject
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de récupérer la liste des type d'évaluation "

View File

@ -376,7 +376,7 @@ def Get_List_Unite_Enseignement_no_filter(diction):
RetObject.append(mycommon.JSONEncoder().encode(user))
print(" #### RetObject = ", RetObject)
#print(" #### RetObject = ", RetObject)
return True, RetObject
except Exception as e: