346 lines
14 KiB
Python
346 lines
14 KiB
Python
"""
|
|
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 :
|
|
query_key = {}
|
|
query_key['email'] = tmp_val['email']
|
|
query_key['session_id'] = tmp_val['session_id']
|
|
query_key['date'] = str(local_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'] = False
|
|
new_my_local_data['apresmidi'] = True
|
|
|
|
print("### emargement insertion de : "+str(new_my_local_data))
|
|
|
|
local_ret_val = coll_emargement.find_one_and_update(
|
|
query_key,
|
|
{"$set": new_my_local_data},
|
|
upsert=True,
|
|
return_document=ReturnDocument.AFTER
|
|
)
|
|
|
|
|
|
|
|
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"
|
|
|
|
"""
|
|
Fonction de mise à jour de l'emargement d'une personne sur une date
|
|
"""
|
|
def UpdateUserEmargementDate(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 = [ 'session_id', 'token', 'email', 'date', 'matin', 'apresmidi']
|
|
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 = [ 'session_id', 'token', 'email', 'date']
|
|
|
|
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']
|
|
|
|
my_email = ""
|
|
if ("email" in diction.keys()):
|
|
if diction['email']:
|
|
my_email = diction['email']
|
|
mydata['email'] = diction['email']
|
|
|
|
my_date = ""
|
|
if ("date" in diction.keys()):
|
|
if diction['date']:
|
|
my_date = diction['date']
|
|
mydata['date'] = diction['date']
|
|
|
|
my_matin = ""
|
|
if ("matin" in diction.keys()):
|
|
if diction['matin']:
|
|
my_matin = diction['matin']
|
|
|
|
my_apresmidi = ""
|
|
if ("apresmidi" in diction.keys()):
|
|
if diction['apresmidi']:
|
|
my_apresmidi = diction['apresmidi']
|
|
|
|
partner_recid = mycommon.get_parnter_recid_from_token(my_token)
|
|
if (partner_recid is False):
|
|
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de valider l'emargement ")
|
|
return False, "Impossible de valider l'emargement "
|
|
|
|
session_id = ""
|
|
if ("session_id" in diction.keys()):
|
|
if diction['session_id']:
|
|
mydata['session_id'] = diction['session_id']
|
|
session_id = diction['session_id']
|
|
|
|
mydata['date_update'] = str(datetime.now())
|
|
|
|
if( my_matin == "1"):
|
|
mydata['matin'] = True
|
|
elif (my_matin == "0"):
|
|
mydata['matin'] = False
|
|
|
|
if (my_apresmidi == "1"):
|
|
mydata['apresmidi'] = True
|
|
elif (my_apresmidi == "0"):
|
|
mydata['apresmidi'] = False
|
|
|
|
|
|
query_key = {}
|
|
query_key['email'] = mydata['email']
|
|
query_key['session_id'] = mydata['session_id']
|
|
query_key['date'] = str(my_date)
|
|
|
|
coll_emargement = MYSY_GV.dbname['emargement']
|
|
local_ret_val = coll_emargement.find_one_and_update(
|
|
query_key,
|
|
{"$set": mydata},
|
|
upsert=False,
|
|
return_document=ReturnDocument.AFTER
|
|
)
|
|
|
|
mycommon.myprint(str(inspect.stack()[0][3]) + " OK, la liste d'emargement de la session "+str( mydata['session_id'])+" a été mise à jour")
|
|
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 valider l'émargement" |