""" 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 "