""" Ce ficher gerer l'emargement à une session de formation """ 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 """ Creation du tableau d'emargement Au debut de la session, le formateur clique sur un bouton qui va aller créer le tableau d'emargement. la finction prend en argement : - url_formation - session_id """ def CreateTableauEmargement(diction): try: ''' # Verification que les champs reçus dans l'API sont bien dans la liste des champs autorisés # Cela evite le cas ou une entité tierce ajouter les valeurs inconnu dans l'API # Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste # field_list. ''' field_list = ['class_internal_url', 'session_id', 'token'] incom_keys = diction.keys() for val in incom_keys: if val not in field_list: mycommon.myprint(str(inspect.stack()[0][ 3]) + " - Creation partner account : Le champ '" + val + "' n'est pas autorisé, Creation partenaire annulée") return False, "Impossible de créer la liste d'emargement. Toutes les informations fournies ne sont pas valables" """ Verification de la liste des champs obligatoires """ field_list_obligatoire = ['class_internal_url', 'session_id', 'token'] for val in field_list_obligatoire: if val not in diction: mycommon.myprint( str(inspect.stack()[0][3]) + " - : La valeur '" + val + "' n'est pas presente dans liste ") return False, "Impossible de créer la liste d'emargement, Toutes les informations necessaires n'ont pas été fournies" mydata = {} my_token = "" if ("token" in diction.keys()): if diction['token']: my_token = diction['token'] class_internal_url = "" if ("class_internal_url" in diction.keys()): if diction['class_internal_url']: class_internal_url = diction['class_internal_url'] partner_recid = mycommon.get_parnter_recid_from_token(my_token) if (partner_recid is False): mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de créer la liste d'emargement ") return False, "Impossible de créer la liste d'emargement " session_id = "" if ("session_id" in diction.keys()): if diction['session_id']: mydata['session_id'] = diction['session_id'] session_id = diction['session_id'] """ Recuperation des info de la session de formation """ date_du = "" date_au = "" ville = "" code_postal = "" adresse = "" for tmp_val in MYSY_GV.dbname['myclass'].find({"internal_url":str(class_internal_url), "datelieu.session_id": str(session_id)}): tmp_date_lieu = tmp_val['datelieu'] for val in tmp_date_lieu: if (val['session_id'] == str(session_id)): date_du = val['date_du'] date_au = val['date_au'] ville = val['ville'] code_postal = val['code_postal'] code_postal = val['adresse'] is_date_du = mycommon.CheckisDate(date_du) is_date_au = mycommon.CheckisDate(date_au) if( is_date_du is False or is_date_au is False): mycommon.myprint( str(inspect.stack()[0][3]) + " - Impossible de créer la liste d'emargement, Les dates de la session sont incorrectes ") return False, " Impossible de créer la liste d'emargement, Les dates de la session sont incorrectes " date_emargement = datetime.strptime(str(date_du), '%d/%m/%Y') i = 0 # compteur de securité liste_date = [] print(" Date du = "+str(date_du)+" CMP Date au ="+str(date_au)) while( date_emargement < datetime.strptime(str(date_au), '%d/%m/%Y') and i < 360): date_10 = str(date_emargement) liste_date.append(date_10[0:10]) i = i + 1 date_emargement = date_emargement + timedelta(days=1) ##print(" ### date_emargement = "+str(date_emargement) + " < "+str(datetime.strptime(str(date_au), '%d/%m/%Y') )) print("#### Liste Date = "+str(liste_date)) coll_emargement = MYSY_GV.dbname['emargement'] #Recuperation de la liste des participants dont l'inscription est validée for tmp_val in MYSY_GV.dbname['inscription'].find({'session_id':str(session_id), 'class_internal_url':str(class_internal_url), 'status':'1'} ): my_local_data = {} my_local_data['email'] = tmp_val['email'] my_local_data['nom'] = tmp_val['nom'] my_local_data['prenom'] = tmp_val['prenom'] my_local_data['session_id'] = tmp_val['session_id'] my_local_data['class_internal_url'] = tmp_val['class_internal_url'] my_local_data['date_update'] = str(datetime.now()) for local_date in liste_date : new_my_local_data = {} new_my_local_data['email'] = tmp_val['email'] new_my_local_data['nom'] = tmp_val['nom'] new_my_local_data['prenom'] = tmp_val['prenom'] new_my_local_data['session_id'] = tmp_val['session_id'] new_my_local_data['class_internal_url'] = tmp_val['class_internal_url'] new_my_local_data['date_update'] = str(datetime.now()) new_my_local_data['date'] = str(local_date) new_my_local_data['matin'] = '0' new_my_local_data['apresmidi'] = '0' print("### emargement insertion de : "+str(new_my_local_data)) coll_emargement.insert_one(new_my_local_data) return True, "ok" except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno)) return False, "Impossible de créer le tableau d'emargement" """ Cette fonction recuperer la liste d'emargement """ def GetTableauEmargement(diction): try: ''' # Verification que les champs reçus dans l'API sont bien dans la liste des champs autorisés # Cela evite le cas ou une entité tierce ajouter les valeurs inconnu dans l'API # Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste # field_list. ''' field_list = ['class_internal_url', 'session_id', 'token'] incom_keys = diction.keys() for val in incom_keys: if val not in field_list: mycommon.myprint(str(inspect.stack()[0][ 3]) + " - Creation partner account : Le champ '" + val + "' n'est pas autorisé, Creation partenaire annulée") return False, "Impossible de créer la liste d'emargement. Toutes les informations fournies ne sont pas valables" """ Verification de la liste des champs obligatoires """ field_list_obligatoire = ['class_internal_url', 'session_id', 'token'] for val in field_list_obligatoire: if val not in diction: mycommon.myprint( str(inspect.stack()[0][3]) + " - : La valeur '" + val + "' n'est pas presente dans liste ") return False, "Impossible de créer la liste d'emargement, Toutes les informations necessaires n'ont pas été fournies" mydata = {} my_token = "" if ("token" in diction.keys()): if diction['token']: my_token = diction['token'] class_internal_url = "" if ("class_internal_url" in diction.keys()): if diction['class_internal_url']: class_internal_url = diction['class_internal_url'] partner_recid = mycommon.get_parnter_recid_from_token(my_token) if (partner_recid is False): mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de créer la liste d'emargement ") return False, "Impossible de créer la liste d'emargement " session_id = "" if ("session_id" in diction.keys()): if diction['session_id']: mydata['session_id'] = diction['session_id'] session_id = diction['session_id'] val_tmp = 1 RetObject = [] for retval in MYSY_GV.dbname['emargement'].find({'session_id':str(session_id), 'class_internal_url':str(class_internal_url)}).sort([("date",pymongo.ASCENDING),]): user = retval user['id'] = str(val_tmp) RetObject.append(mycommon.JSONEncoder().encode(user)) val_tmp = val_tmp + 1 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) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno)) return False, "Impossible de recuperer le tableau d'emargement"