365 lines
14 KiB
Python
365 lines
14 KiB
Python
"""
|
|
Fonction commune des tableaux de bord comme :
|
|
- get_list_tbd
|
|
- add to my tbd
|
|
- remove from my tbd,
|
|
- etc
|
|
"""
|
|
|
|
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
|
|
import ast
|
|
|
|
def Get_List_Partner_Dashbord(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 la liste des arguments ")
|
|
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
|
|
|
|
RetObject = []
|
|
val_tmp = 1
|
|
|
|
for retval in MYSY_GV.dbname['base_config_dashbord'].find({'$or':[{'valide':"1", 'locked':'0', 'partner_owner_recid':'default'},
|
|
{'valide':"1", 'locked':'0', 'partner_owner_recid':str(my_partner['recid'])} ]} ):
|
|
RetObject.append(mycommon.JSONEncoder().encode(retval))
|
|
|
|
|
|
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 tableaux de bord "
|
|
|
|
|
|
"""
|
|
Fonction ajoute un dashbord au dashbord de l'utilisateur
|
|
"""
|
|
def Add_To_User_Dashbord(diction):
|
|
try:
|
|
diction = mycommon.strip_dictionary(diction)
|
|
|
|
"""
|
|
Verification des input acceptés
|
|
"""
|
|
field_list = ['token', "dashbord_internal_code", "default_filter", "title", 'type_event',
|
|
'group_by']
|
|
|
|
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'est pas autorisé")
|
|
return False, " Les informations fournies sont incorrectes",
|
|
|
|
"""
|
|
Verification des champs obligatoires
|
|
"""
|
|
field_list_obligatoire = ['token', "dashbord_internal_code", "default_filter", ]
|
|
|
|
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 la liste des arguments ")
|
|
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
|
|
|
|
# Verifier que le dashbord existe
|
|
is_existe_dashbord = MYSY_GV.dbname['base_config_dashbord'].count_documents({"dashbord_internal_code":str(diction['dashbord_internal_code']),
|
|
'valide':'1',
|
|
'locked':'0',
|
|
'partner_owner_recid':'default'
|
|
})
|
|
|
|
if( is_existe_dashbord <= 0 ):
|
|
mycommon.myprint(
|
|
str(inspect.stack()[0][3]) + " Le code du tableau de bord est invalide ")
|
|
return False, " Le code du tableau de bord est invalide "
|
|
|
|
# S'assurer que le 'default_qery' est bien un json
|
|
default_qery_Json = ast.literal_eval(diction['default_filter'])
|
|
|
|
|
|
my_data = {}
|
|
my_data['connected_id'] = str(my_partner['_id'])
|
|
my_data['update_by'] = str(my_partner['_id'])
|
|
my_data['partner_owner_recid'] = str(my_partner['recid'])
|
|
my_data['default_filter'] = str(diction['default_filter'])
|
|
if( "group_by" in diction.keys() ):
|
|
my_data['group_by'] = str(diction['group_by'])
|
|
else:
|
|
my_data['group_by'] = ""
|
|
|
|
my_data['title'] = str(diction['title'])
|
|
my_data['dashbord_internal_code'] = str(diction['dashbord_internal_code'])
|
|
my_data['valide'] = "1"
|
|
my_data['locked'] = "0"
|
|
my_data['date_update'] = str(datetime.now())
|
|
|
|
if("type_event" in diction.keys() ):
|
|
my_data['type_event'] = str(diction['type_event'])
|
|
|
|
result = MYSY_GV.dbname['user_dashbord'].find_one_and_update(
|
|
{'partner_owner_recid': str(my_partner['recid']), 'connected_id':str(my_partner['_id']),
|
|
'dashbord_internal_code':str(diction['dashbord_internal_code']),
|
|
'title':str(diction['title'])},
|
|
{"$set": my_data},
|
|
upsert=True,
|
|
return_document=ReturnDocument.AFTER
|
|
)
|
|
|
|
|
|
return True, " Le tableau de bord a été correctement ajouté "
|
|
|
|
|
|
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 d'ajouter le tableau de bord "
|
|
|
|
|
|
"""
|
|
Fonction qui supprime un dashbord de la liste des dashbord de l'utilisateur
|
|
"""
|
|
|
|
|
|
def Delete_To_User_Dashbord(diction):
|
|
try:
|
|
diction = mycommon.strip_dictionary(diction)
|
|
|
|
"""
|
|
Verification des input acceptés
|
|
"""
|
|
field_list = ['token', "user_dashbord_id"]
|
|
|
|
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'est pas autorisé")
|
|
return False, " Les informations fournies sont incorrectes",
|
|
|
|
"""
|
|
Verification des champs obligatoires
|
|
"""
|
|
field_list_obligatoire = ['token', "user_dashbord_id" ]
|
|
|
|
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 la liste des arguments ")
|
|
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
|
|
|
|
# Verifier que le dashbord existe
|
|
qry = {"_id": ObjectId(str(diction['user_dashbord_id'])),
|
|
'valide': '1',
|
|
'locked': '0',
|
|
'partner_owner_recid': str(my_partner['recid'])
|
|
}
|
|
|
|
|
|
is_existe_dashbord = MYSY_GV.dbname['user_dashbord'].count_documents(
|
|
qry)
|
|
|
|
if (is_existe_dashbord <= 0):
|
|
mycommon.myprint(
|
|
str(inspect.stack()[0][3]) + " Le code du tableau de bord est invalide ")
|
|
return False, " Le code du tableau de bord est invalide "
|
|
|
|
|
|
my_data = {}
|
|
my_data['connected_id'] = str(my_partner['_id'])
|
|
my_data['partner_owner_recid'] = str(my_partner['recid'])
|
|
my_data['_id'] = ObjectId(str(diction['user_dashbord_id']))
|
|
|
|
|
|
MYSY_GV.dbname["user_dashbord"].delete_one(my_data)
|
|
|
|
|
|
return True, " Le tableau de bord a été correctement supprimé "
|
|
|
|
|
|
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 d'ajouter le tableau de bord "
|
|
|
|
"""
|
|
Recuperer la liste des tableaux de bord d'un user
|
|
"""
|
|
def Get_Connected_User_List_Dashbord(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 la liste des arguments ")
|
|
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
|
|
|
|
RetObject = []
|
|
val_tmp = 1
|
|
|
|
qry = {'valide':"1", 'locked':'0','partner_owner_recid':str(my_partner['recid']),'connected_id':str(my_partner['_id'])}
|
|
|
|
|
|
|
|
|
|
for retval in MYSY_GV.dbname['user_dashbord'].find( qry):
|
|
|
|
|
|
"""
|
|
Convertion des filtres en date reelles.
|
|
Par exemple m0 = mois en cours = 1 du mois en cours à la date du jours.
|
|
"""
|
|
start_date = ""
|
|
end_date = ""
|
|
if( "default_filter" in retval.keys() ):
|
|
local_default_filter = ast.literal_eval(retval['default_filter'])
|
|
#print(" ### local_default_filter = ", local_default_filter)
|
|
|
|
if( "periode" in local_default_filter.keys() and str(local_default_filter['periode']) == "m0" ):
|
|
local_status, start_current_month_date, end_current_month_date = mycommon.Get_Current_Month_Start_End_Date()
|
|
if( local_status is False):
|
|
return local_status, start_current_month_date
|
|
|
|
start_date = start_current_month_date
|
|
end_date = end_current_month_date
|
|
#print(" ### start_current_month_date = ", start_current_month_date, " ### end_current_month_date =", end_current_month_date)
|
|
|
|
if ("periode" in local_default_filter.keys() and str(local_default_filter['periode']) == "m1"):
|
|
local_status, start_current_month_date, end_current_month_date = mycommon.Get_Previous_Month_Start_End_Date()
|
|
if (local_status is False):
|
|
return local_status, start_current_month_date
|
|
|
|
start_date = start_current_month_date
|
|
end_date = end_current_month_date
|
|
#print(" ### start_current_month_date = ", start_current_month_date, " ### end_current_month_date =", end_current_month_date)
|
|
|
|
if ("session_start_date" in local_default_filter.keys() and "session_end_date" in local_default_filter.keys()):
|
|
start_date = local_default_filter['session_start_date']
|
|
end_date = local_default_filter['session_end_date']
|
|
#print(" ### start_date = ", start_date, " ### end_date =",end_date)
|
|
|
|
|
|
|
|
if( "type_event" not in retval.keys() ) :
|
|
retval['type_event'] = ""
|
|
|
|
retval['start_date'] = start_date
|
|
retval['end_date'] = end_date
|
|
#print(" ### final retval = ", retval)
|
|
RetObject.append(mycommon.JSONEncoder().encode(retval))
|
|
|
|
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 tableaux de bord "
|