Ela_Back/Dashbord_queries/session_tbd_qries.py

175 lines
7.2 KiB
Python

"""
Ce fichier contient les requetes utilisées dans les tableaux de bord des session
"""
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
from datetime import timedelta
from datetime import timedelta
def Get_Qery_List_Session_Data(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', 'session_start_date', 'session_end_date' ]
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
filt_session_start_date = ""
if ("session_start_date" in diction.keys() and diction['session_start_date']):
filt_session_start_date = str(diction['session_start_date'])[0:10]
local_status = mycommon.CheckisDate(filt_session_start_date)
if (local_status is False):
mycommon.myprint(str(
inspect.stack()[0][3]) + " Le filtre : 'date de debut de session' n'est pas au format jj/mm/aaaa.")
return False, " Le filtre : 'date de debut de session' n'est pas au format jj/mm/aaaa."
filt_session_end_date = ""
if ("session_end_date" in diction.keys() and diction['session_end_date']):
filt_session_end_date = str(diction['session_end_date'])[0:10]
local_status = mycommon.CheckisDate(filt_session_end_date)
if (local_status is False):
mycommon.myprint(str(
inspect.stack()[0][3]) + " Le filtre : 'date de fin de session' n'est pas au format jj/mm/aaaa.")
return False, " Le filtre : 'date de fin de session' n'est pas au format jj/mm/aaaa."
RetObject = []
val_tmp = 1
qery = [{'partner_owner_recid':str(my_partner['recid'])}, {'code_session':1, 'session_etape':1, 'class_internal_url':1, 'distantiel':1,
'presentiel':1, 'nb_participant':1, 'formateur_id':1,
'date_debut':1, 'date_fin':1}]
print(" #### qery = ", qery)
for retval in MYSY_GV.dbname['session_formation'].find({'partner_owner_recid':str(my_partner['recid'])}, {'code_session':1, 'session_etape':1, 'class_internal_url':1, 'distantiel':1,
'presentiel':1, 'nb_participant':1, 'formateur_id':1, 'date_debut':1, 'date_fin':1}):
user = retval
user['id'] = str(val_tmp)
val_tmp = val_tmp + 1
nb_participant = "1"
if ("nb_participant" in retval.keys()):
nb_participant = retval['nb_participant']
user['nb_participant'] = nb_participant
## Recuperation du nombre d'inscrits
Count_Inscrit = MYSY_GV.dbname['inscription'].count_documents(
{'session_id': str(retval['_id']), 'class_internal_url': str(retval['class_internal_url']),
'status': "1"})
user['nb_inscrit'] = str(Count_Inscrit)
## Recuperation du nombre de preinscrits
Count_Preinscrit = MYSY_GV.dbname['inscription'].count_documents(
{'session_id': str(retval['_id']), 'class_internal_url': str(retval['class_internal_url']),
'status': "0"})
user['nb_preinscrit'] = str(Count_Preinscrit)
taux_disponibilite = "100"
taux_remplissage = "0"
if (str(nb_participant) != "0"):
taux_remplissage = (round(int(mycommon.tryInt(Count_Inscrit)) / int(mycommon.tryInt(nb_participant)),
2))*100
taux_disponibilite = 100 - taux_remplissage
user['taux_remplissage'] = str(taux_remplissage)
user['taux_remplissageColor'] = "green"
user['taux_disponibilite'] = str(taux_disponibilite)
user['taux_disponibiliteColor'] = "yellow"
if (filt_session_start_date and filt_session_end_date):
# Si on a un filtre sur la date debut et de fin de session
if ((datetime.strptime(str(retval['date_debut'][0:10]).strip(), '%d/%m/%Y') >= datetime.strptime(
str(filt_session_start_date).strip(), '%d/%m/%Y'))
and
(datetime.strptime(str(retval['date_fin'][0:10]).strip(),
'%d/%m/%Y') <= datetime.strptime(str(filt_session_end_date).strip(),
'%d/%m/%Y'))
):
RetObject.append(mycommon.JSONEncoder().encode(user))
elif (filt_session_start_date):
# Si on a un filtre uniquement sur la date de debut de session
if ((datetime.strptime(str(retval['date_debut'][0:10]).strip(), '%d/%m/%Y') >= datetime.strptime(
str(filt_session_start_date).strip(), '%d/%m/%Y'))):
RetObject.append(mycommon.JSONEncoder().encode(user))
elif (filt_session_end_date):
# Si on a un filtre uniquement sur la date de fin session
if ((datetime.strptime(str(retval['date_fin'][0:10]).strip(), '%d/%m/%Y') <= datetime.strptime(
str(filt_session_end_date).strip(), '%d/%m/%Y'))):
RetObject.append(mycommon.JSONEncoder().encode(user))
else:
RetObject.append(mycommon.JSONEncoder().encode(user))
#RetObject.append(mycommon.JSONEncoder().encode(user))
#print(" #### RetObject = ", RetObject)
return True, RetObject
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de récupérer les données "