3609 lines
149 KiB
Python
3609 lines
149 KiB
Python
"""
|
||
Ce fichier permet de traiter et generer le BPF
|
||
SPEC : Source : https://culture-rh.com/bfp-bilan-pedagogique-financier/
|
||
"""
|
||
|
||
import ast
|
||
import dateutil
|
||
import pymongo
|
||
import xlsxwriter
|
||
from flask import send_file
|
||
from pandas.io.formats.style import jinja2
|
||
from pymongo import MongoClient
|
||
import json
|
||
from bson import ObjectId
|
||
import re
|
||
from datetime import datetime, timezone, date
|
||
|
||
from xhtml2pdf import pisa
|
||
|
||
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 Dashbord_queries.formation_tbd_qries as formation_tbd_qries
|
||
from dateutil.relativedelta import relativedelta
|
||
|
||
|
||
def Get_Qery_Generate_BPF_From_partner_invoice_header(diction):
|
||
try:
|
||
diction = mycommon.strip_dictionary(diction)
|
||
|
||
"""
|
||
Verification des input acceptés
|
||
"""
|
||
field_list = ['token', 'periode_start_date', 'periode_end_date', 'filter_value', ]
|
||
|
||
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
|
||
|
||
filt_client_id = {}
|
||
if ("filter_client_id" in diction.keys() and diction['filter_client_id']):
|
||
filt_client_id = {'order_header_client_id': str(diction['filter_client_id'])}
|
||
|
||
filt_periode_start_date = ""
|
||
if ("periode_start_date" in diction.keys() and diction['periode_start_date']):
|
||
filt_periode_start_date = str(diction['periode_start_date'])[0:10]
|
||
local_status = mycommon.CheckisDate(filt_periode_start_date)
|
||
if (local_status is False):
|
||
mycommon.myprint(str(
|
||
inspect.stack()[0][3]) + " Le filtre : 'date de debut' n'est pas au format jj/mm/aaaa.")
|
||
return False, " Le filtre : 'date de debut' n'est pas au format jj/mm/aaaa."
|
||
|
||
filt_periode_end_date = ""
|
||
if ("periode_end_date" in diction.keys() and diction['periode_end_date']):
|
||
filt_periode_end_date = str(diction['periode_end_date'])[0:10]
|
||
local_status = mycommon.CheckisDate(filt_periode_end_date)
|
||
if (local_status is False):
|
||
mycommon.myprint(str(
|
||
inspect.stack()[0][3]) + " Le filtre : 'date de fin' n'est pas au format jj/mm/aaaa.")
|
||
return False, " Le filtre : 'date de fin' n'est pas au format jj/mm/aaaa."
|
||
|
||
"""
|
||
Si la valeur de 'filter_value' est m0 ou m1, on va aller recuperer les date du mois correspondant.
|
||
On ecrase les valeur de filt_session_start_date et filt_session_end_date
|
||
"""
|
||
if ('filter_value' in diction.keys()):
|
||
# print(" filter_value = ", diction['filter_value'])
|
||
if (str(diction['filter_value']) == "m0"):
|
||
# On recupere les date du mois en cours
|
||
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
|
||
|
||
filt_periode_start_date = start_current_month_date
|
||
filt_periode_end_date = end_current_month_date
|
||
|
||
# print(" ### filt_session_start_date = ", filt_session_start_date, " ### filt_session_end_date = ", filt_session_end_date)
|
||
|
||
elif (str(diction['filter_value']) == "m1"):
|
||
# On recupere les date du mois en cours
|
||
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
|
||
|
||
filt_periode_start_date = start_current_month_date
|
||
filt_periode_end_date = end_current_month_date
|
||
|
||
filt_periode_start_date_ISODATE = datetime.strptime(str(filt_periode_start_date), '%d/%m/%Y')
|
||
filt_periode_end_date_ISODATE = datetime.strptime(str(filt_periode_end_date), '%d/%m/%Y')
|
||
|
||
RetObject = {}
|
||
val_tmp = 0
|
||
|
||
"""
|
||
C1 – Quelles sont vos ressources provenant directement des entreprises pour la formation de leurs salariés ?
|
||
|
||
On recherche le CA venant des client : is_client = 1, is_financeur != 1
|
||
|
||
"""
|
||
C1_qery_match = {'$and': [
|
||
{"valide": '1', 'invoice_header_type': 'facture',
|
||
'credit_note_ref': {'$exists': False},
|
||
'order_header_is_company':'1',
|
||
'order_header_is_client':'1',
|
||
"partner_owner_recid": str(my_partner['recid'])
|
||
},
|
||
{
|
||
'mysy_invoice_date': {'$gte': filt_periode_start_date_ISODATE,
|
||
'$lte': filt_periode_end_date_ISODATE}}, ]}
|
||
|
||
"""
|
||
TRAITEMENT DU PAVE CCCC
|
||
"""
|
||
|
||
|
||
total_c1_C9 = 0
|
||
|
||
bpf_c1_entreprise = []
|
||
total_bpf_c1_entreprise = 0
|
||
C1_pipe_qry_invoice_header_partner__invoice_line_detail__is_client_1_is_financeur_0_is_company_1 = ([
|
||
{"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match': C1_qery_match
|
||
|
||
},
|
||
{'$lookup': {
|
||
'from': 'partner_invoice_line_detail',
|
||
"let": {"invoice_header_id": {'$toString': "$_id"},
|
||
'partner_invoice_line_partner_owner_recid': '$partner_owner_recid',
|
||
'partner_invoice_line_invoice_header_ref_interne': '$invoice_header_ref_interne'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$order_line_is_include_bpf", "1"]},
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$invoice_header_ref_interne",
|
||
'$$partner_invoice_line_invoice_header_ref_interne']},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_invoice_line_partner_owner_recid']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'collection_partner_invoice_line'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$collection_partner_invoice_line'
|
||
},
|
||
|
||
|
||
|
||
{'$group': {
|
||
'_id': { },
|
||
"TotalAmount_HT": {
|
||
"$sum": {'$toDouble': '$collection_partner_invoice_line.order_line_invoiced_amount'}},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
{
|
||
'$sort': {'count': -1}
|
||
},
|
||
|
||
])
|
||
|
||
print(
|
||
" ### C1_pipe_qry_invoice_header_partner__invoice_line_detail__is_client_1_is_financeur_0_is_company_1 = ",
|
||
C1_pipe_qry_invoice_header_partner__invoice_line_detail__is_client_1_is_financeur_0_is_company_1)
|
||
|
||
for retval in MYSY_GV.dbname['partner_invoice_header'].aggregate(
|
||
C1_pipe_qry_invoice_header_partner__invoice_line_detail__is_client_1_is_financeur_0_is_company_1):
|
||
print(" ### retval bpf_c1_entreprise = ", retval)
|
||
node = {}
|
||
node['bpf_c1_entreprise'] = retval['TotalAmount_HT']
|
||
total_bpf_c1_entreprise = total_bpf_c1_entreprise + mycommon.tryFloat(retval['TotalAmount_HT'])
|
||
bpf_c1_entreprise.append(node)
|
||
|
||
RetObject['bpf_c1_entreprise'] = bpf_c1_entreprise
|
||
total_c1_C9 = total_c1_C9 + mycommon.tryFloat(total_bpf_c1_entreprise)
|
||
print(" ### total_c1_C9 = ", total_c1_C9, ", ### bpf_c1_entreprise = ", total_bpf_c1_entreprise)
|
||
|
||
|
||
C2_qery_match = {'$and': [
|
||
{"valide": '1', 'invoice_header_type': 'facture',
|
||
'credit_note_ref': {'$exists': False},
|
||
'order_header_is_financeur':'1',
|
||
"partner_owner_recid": str(my_partner['recid'])
|
||
},
|
||
{
|
||
'mysy_invoice_date': {'$gte': filt_periode_start_date_ISODATE,
|
||
'$lte': filt_periode_end_date_ISODATE}}, ]}
|
||
|
||
C2_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_organisme_financement__type_apprenant = ([
|
||
{"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match': C2_qery_match },
|
||
{'$lookup': {
|
||
'from': 'partner_invoice_line_detail',
|
||
"let": {"invoice_header_id": {'$toString': "$_id"},
|
||
'partner_invoice_line_partner_owner_recid': '$partner_owner_recid',
|
||
'partner_invoice_line_invoice_header_ref_interne': '$invoice_header_ref_interne'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$order_line_is_include_bpf", "1"]},
|
||
{'$eq': ["$invoice_header_ref_interne",
|
||
'$$partner_invoice_line_invoice_header_ref_interne']},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_invoice_line_partner_owner_recid']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'collection_partner_invoice_line'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$collection_partner_invoice_line'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'type_organisme_financement',
|
||
"let": {'type_financeur_id': "$order_header_type_financeur_id",
|
||
|
||
},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$type_financeur_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'type_organisme_financement_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$type_organisme_financement_collection'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'type_apprenant',
|
||
"let": {'type_apprenant_code': "$collection_partner_invoice_line.order_line_inscription_type_apprenant",
|
||
|
||
},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$code", '$$type_apprenant_code']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'type_apprenante_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$type_apprenante_collection'
|
||
},
|
||
|
||
{'$group': {
|
||
'_id': {
|
||
"Type_Apprenant": "$collection_partner_invoice_line.order_line_inscription_type_apprenant",
|
||
"Type_Apprenant_Description": "$type_apprenante_collection.description",
|
||
},
|
||
"TotalAmount_HT": {
|
||
"$sum": {'$toDouble': '$collection_partner_invoice_line.order_line_invoiced_amount'}},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
{
|
||
'$sort': {'count': -1}
|
||
},
|
||
|
||
])
|
||
|
||
print(" ### Get_Qery_Generate_BPF C2_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_organisme_financement__type_apprenant = ", C2_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_organisme_financement__type_apprenant)
|
||
|
||
bpf_c2_type_apprenant = []
|
||
total_bpf_c_type_apprenant = 0
|
||
for retval in MYSY_GV.dbname['partner_invoice_header'].aggregate(C2_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_organisme_financement__type_apprenant):
|
||
print(" ### retval = ", retval)
|
||
node = {}
|
||
node['Type_Apprenant_Code'] = retval['_id']['Type_Apprenant']
|
||
node['Type_Apprenant_Desc'] = retval['_id']['Type_Apprenant_Description']
|
||
node['TotalAmount_HT'] = retval['TotalAmount_HT']
|
||
|
||
total_bpf_c_type_apprenant = total_bpf_c_type_apprenant + mycommon.tryFloat(retval['TotalAmount_HT'])
|
||
bpf_c2_type_apprenant.append(node)
|
||
|
||
RetObject['bpf_c2_type_apprenant'] = bpf_c2_type_apprenant
|
||
RetObject['total_bpf_c_type_apprenant'] = round(total_bpf_c_type_apprenant, 2)
|
||
total_c1_C9 = total_c1_C9 + mycommon.tryFloat(total_bpf_c_type_apprenant)
|
||
print(" ### total_c1_C9 = ", total_c1_C9, ", ### total_bpf_c_type_apprenant = ", total_bpf_c_type_apprenant)
|
||
|
||
|
||
|
||
C3_qery_match = {'$and': [
|
||
{"valide": '1', 'invoice_header_type': 'facture',
|
||
'credit_note_ref': {'$exists': False},
|
||
"partner_owner_recid": str(my_partner['recid'])
|
||
},
|
||
{
|
||
'mysy_invoice_date': {'$gte': filt_periode_start_date_ISODATE,
|
||
'$lte': filt_periode_end_date_ISODATE}}, ]}
|
||
|
||
|
||
C3_C8_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_pouvoir_public = ([
|
||
{"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match': C3_qery_match
|
||
},
|
||
{'$lookup': {
|
||
'from': 'partner_invoice_line_detail',
|
||
"let": {"invoice_header_id": {'$toString': "$_id"},
|
||
'partner_invoice_line_partner_owner_recid': '$partner_owner_recid',
|
||
'partner_invoice_line_invoice_header_ref_interne': '$invoice_header_ref_interne'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$order_line_is_include_bpf", "1"]},
|
||
{'$eq': ["$invoice_header_ref_interne",
|
||
'$$partner_invoice_line_invoice_header_ref_interne']},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_invoice_line_partner_owner_recid']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'collection_partner_invoice_line'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$collection_partner_invoice_line'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'type_pouvoir_public',
|
||
"let": {'order_header_type_pouvoir_public_id': "$order_header_type_pouvoir_public_id",
|
||
|
||
},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$order_header_type_pouvoir_public_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'type_pouvoir_public_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$type_pouvoir_public_collection'
|
||
},
|
||
|
||
{'$group': {
|
||
'_id': {
|
||
|
||
"Type_pouvoir_public_desc": "$type_pouvoir_public_collection.description",
|
||
},
|
||
"TotalAmount_HT": {
|
||
"$sum": {'$toDouble': '$collection_partner_invoice_line.order_line_invoiced_amount'}},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
{
|
||
'$sort': {'count': -1}
|
||
},
|
||
|
||
])
|
||
|
||
|
||
bpf_c3_c8_type_pouvoir_public = []
|
||
total_bpf_c3_c8_type_pouvoir_public = 0
|
||
for retval in MYSY_GV.dbname['partner_invoice_header'].aggregate(
|
||
C3_C8_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_pouvoir_public):
|
||
print(" bpf_c3_c8_type_pouvoir_public ### retval = ", retval)
|
||
node = {}
|
||
node['Type_pouvoir_public_desc'] = retval['_id']['Type_pouvoir_public_desc']
|
||
node['TotalAmount_HT'] = retval['TotalAmount_HT']
|
||
|
||
total_bpf_c3_c8_type_pouvoir_public = total_bpf_c3_c8_type_pouvoir_public + mycommon.tryFloat(retval['TotalAmount_HT'])
|
||
bpf_c3_c8_type_pouvoir_public.append(node)
|
||
|
||
RetObject['bpf_c3_c8_type_pouvoir_public'] = bpf_c3_c8_type_pouvoir_public
|
||
RetObject['total_bpf_c3_c8_type_pouvoir_public'] = round(total_bpf_c3_c8_type_pouvoir_public, 2)
|
||
total_c1_C9 = total_c1_C9 + mycommon.tryFloat(total_bpf_c3_c8_type_pouvoir_public)
|
||
print(" ### total_c1_C9 = ", total_c1_C9, ", ### bpf_c3_c8_type_pouvoir_public = ", total_bpf_c3_c8_type_pouvoir_public)
|
||
|
||
C9_qery_match = {'$and': [
|
||
{"valide": '1', 'invoice_header_type': 'facture',
|
||
'credit_note_ref': {'$exists': False},
|
||
'order_header_is_company':'0',
|
||
"partner_owner_recid": str(my_partner['recid'])
|
||
},
|
||
{
|
||
'mysy_invoice_date': {'$gte': filt_periode_start_date_ISODATE,
|
||
'$lte': filt_periode_end_date_ISODATE}}, ]}
|
||
|
||
C9_pipe_qry_invoice_header_partner__invoice_line_detail__is_company_0 = ([
|
||
{"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match': C9_qery_match},
|
||
{'$lookup': {
|
||
'from': 'partner_invoice_line_detail',
|
||
"let": {"invoice_header_id": {'$toString': "$_id"},
|
||
'partner_invoice_line_partner_owner_recid': '$partner_owner_recid',
|
||
'partner_invoice_line_invoice_header_ref_interne': '$invoice_header_ref_interne'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$order_line_is_include_bpf", "1"]},
|
||
{'$eq': ["$invoice_header_ref_interne",
|
||
'$$partner_invoice_line_invoice_header_ref_interne']},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_invoice_line_partner_owner_recid']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'collection_partner_invoice_line'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$collection_partner_invoice_line'
|
||
},
|
||
|
||
{'$group': {
|
||
'_id': {
|
||
"Type_Client": "$order_header_is_company",
|
||
"Type_Client_Desc": "Client Type Particulier",
|
||
},
|
||
"TotalAmount_HT": {
|
||
"$sum": {'$toDouble': '$collection_partner_invoice_line.order_line_invoiced_amount'}},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
{
|
||
'$sort': {'count': -1}
|
||
},
|
||
|
||
])
|
||
|
||
bpf_c9_is_company_particulier = []
|
||
total_bpf_c9_is_company_particulier = 0
|
||
|
||
for retval in MYSY_GV.dbname['partner_invoice_header'].aggregate(C9_pipe_qry_invoice_header_partner__invoice_line_detail__is_company_0):
|
||
print(" ### retval is_company_particulier = ", retval)
|
||
node = {}
|
||
node['Type_Client_Desc'] = retval['_id']['Type_Client_Desc']
|
||
node['TotalAmount_HT'] = retval['TotalAmount_HT']
|
||
|
||
total_bpf_c9_is_company_particulier = total_bpf_c9_is_company_particulier + mycommon.tryFloat(retval['TotalAmount_HT'])
|
||
bpf_c9_is_company_particulier.append(node)
|
||
|
||
|
||
RetObject['bpf_c9_is_company_particulier'] = bpf_c9_is_company_particulier
|
||
RetObject['total_bpf_c9_is_company_particulier'] = round(total_bpf_c9_is_company_particulier, 2)
|
||
total_c1_C9 = total_c1_C9 + mycommon.tryFloat(total_bpf_c9_is_company_particulier)
|
||
|
||
RetObject['total_bpf_c1_c9'] = str(total_c1_C9)
|
||
print(" ### total_c1_C9 = ", total_c1_C9, ", ### total_bpf_c9_is_company_particulier = ", total_bpf_c9_is_company_particulier)
|
||
|
||
|
||
"""
|
||
FIN TRAITEMENT DU PAVE CCCC
|
||
"""
|
||
|
||
"""
|
||
TRAITEMENT DU PAVE EEE
|
||
"""
|
||
E_pipe_qry_ressource_humaine__ressource_humaine_contrat = ([
|
||
{
|
||
"$project": {
|
||
"_id": 1, "partner_recid": 1, "nom": 1, "prenom": 1, "fonction": 1, "email": 1, "email": 1,
|
||
"email": 1, "email": 1, "email": 1,
|
||
}
|
||
},
|
||
{'$lookup': {
|
||
'from': 'ressource_humaine_contrat',
|
||
'let': {'rh_id': {'$toString': '$_id'}, 'rh_partner_owner_recid': '$partner_recid'},
|
||
'pipeline': [
|
||
{"$addFields": {
|
||
"mysy_contrat_date_debut": {
|
||
'$dateFromString': {
|
||
'dateString': '$date_debut',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
},
|
||
|
||
"mysy_contrat_date_fin": {
|
||
'$dateFromString': {
|
||
'dateString': '$date_fin',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
},
|
||
|
||
}
|
||
},
|
||
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[ {'$eq': ['$valide', '1']},
|
||
{'$eq': ['$rh_id', '$$rh_id']},
|
||
{'$eq': ['$partner_owner_recid', '$$rh_partner_owner_recid']},
|
||
|
||
{"$and":
|
||
[
|
||
{"$gt": [
|
||
{
|
||
"$toDate": "$mysy_contrat_date_fin"
|
||
},filt_periode_start_date_ISODATE
|
||
]},
|
||
{"$lt": [
|
||
{
|
||
"$toDate": "$mysy_contrat_date_debut"
|
||
},filt_periode_end_date_ISODATE
|
||
]},
|
||
|
||
],
|
||
|
||
},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"$project": {
|
||
"_id": 1, "rh_id": 1, "date_debut": 1, "date_fin": 1, "type_contrat": 1, "type_employe": 1,
|
||
"cout": 1, "periodicite": 1, "mysy_contrat_date_debut": 1, "mysy_contrat_date_fin": 1
|
||
}
|
||
},
|
||
|
||
],
|
||
|
||
'as': 'collection_ressource_humaine_contrat'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$collection_ressource_humaine_contrat'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'agenda',
|
||
"let": {"rh_id": {'$toString': "$_id"}, 'rh_partner_owner_recid': '$partner_recid'},
|
||
'pipeline': [
|
||
{
|
||
"$addFields": {
|
||
"agenda_event_date_debut": {
|
||
"$dateFromString": {
|
||
'dateString': {"$substr": ["$event_start", 0, 10]},
|
||
"format": "%Y-%m-%d"
|
||
}
|
||
},
|
||
"agenda_event_date_fin": {
|
||
"$dateFromString": {
|
||
'dateString': {"$substr": ["$event_end", 0, 10]},
|
||
"format": "%Y-%m-%d"
|
||
}
|
||
},
|
||
|
||
}
|
||
},
|
||
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$related_collection_recid", '$$rh_id']},
|
||
{'$eq': ["$partner_owner_recid", '$$rh_partner_owner_recid']},
|
||
{'$eq': ["$event_type", 'planning']},
|
||
{'$gte': [{'$toDate': "$agenda_event_date_debut"},filt_periode_start_date_ISODATE]},
|
||
{'$lt': [{'$toDate': "$agenda_event_date_fin"}, filt_periode_end_date_ISODATE]}
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'collection_agenda'
|
||
}
|
||
},
|
||
])
|
||
|
||
tab_formateur_rh_id_interne = []
|
||
tab_formateur_rh_interne_nom_prenom_mail = []
|
||
tab_formateur_rh_interne_total_heure = 0
|
||
|
||
tab_formateur_rh_id_sous_traitant = []
|
||
tab_formateur_rh_sous_traitant_nom_prenom_mail = []
|
||
tab_formateur_rh_sous_traitant_total_heure = 0
|
||
|
||
|
||
print(" ### E_pipe_qry_ressource_humaine__ressource_humaine_contrat = ", E_pipe_qry_ressource_humaine__ressource_humaine_contrat)
|
||
for retval in MYSY_GV.dbname['ressource_humaine'].aggregate(
|
||
E_pipe_qry_ressource_humaine__ressource_humaine_contrat):
|
||
|
||
#print(" ### retval (employé ayant un contrat valide) = ", retval)
|
||
formateur_id = str(retval['_id'])
|
||
formateur_data = str(retval['nom']) + " " + str(retval['prenom']) + " - " + str(retval['email']) + " - " + str(retval['_id'])
|
||
formateur_contrat_type = ""
|
||
if( "collection_ressource_humaine_contrat" in retval.keys() and "type_contrat" in retval['collection_ressource_humaine_contrat'].keys()):
|
||
formateur_contrat_type = retval['collection_ressource_humaine_contrat']["type_contrat"]
|
||
|
||
|
||
total_duration = 0
|
||
for agenda_retval in retval['collection_agenda']:
|
||
#print(" ### pour formateur_data = ", formateur_data)
|
||
#print(" ### AGENDA : ", agenda_retval)
|
||
event_duration_second = datetime.strptime( str(agenda_retval['event_end'])[0:16], '%Y-%m-%dT%H:%M') - datetime.strptime(str(agenda_retval['event_start'])[0:16],'%Y-%m-%dT%H:%M')
|
||
event_duration_second = event_duration_second.total_seconds()
|
||
|
||
event_duration_hour = round(divmod(event_duration_second, 3600)[0] + divmod(event_duration_second, 3600)[1] / 3600, 2)
|
||
|
||
"""
|
||
Gerer les eventuels cas d'erreur sur une date de fin event < debut event
|
||
"""
|
||
if( event_duration_hour < 0 ):
|
||
event_duration_hour = 0
|
||
|
||
total_duration = total_duration + event_duration_hour
|
||
|
||
|
||
|
||
formateur_data = formateur_data+" - Nb_heure = "+str(total_duration)+" heure "
|
||
|
||
if( formateur_contrat_type and formateur_contrat_type in ['vacataire', 'vacataire_qty']):
|
||
if( formateur_id not in tab_formateur_rh_id_sous_traitant ):
|
||
tab_formateur_rh_id_sous_traitant.append(str(retval['_id']))
|
||
tab_formateur_rh_sous_traitant_nom_prenom_mail.append(str(formateur_data))
|
||
tab_formateur_rh_sous_traitant_total_heure = tab_formateur_rh_sous_traitant_total_heure + total_duration
|
||
|
||
elif( formateur_contrat_type and formateur_contrat_type not in ['vacataire', 'vacataire_qty']):
|
||
if (formateur_id not in tab_formateur_rh_id_interne):
|
||
tab_formateur_rh_id_interne.append(str(retval['_id']))
|
||
tab_formateur_rh_interne_nom_prenom_mail.append(str(formateur_data))
|
||
tab_formateur_rh_interne_total_heure = tab_formateur_rh_interne_total_heure + total_duration
|
||
|
||
|
||
"""
|
||
RetObject['tab_formateur_rh_id_interne'] = tab_formateur_rh_id_interne
|
||
RetObject['tab_formateur_rh_interne_nom_prenom_mail'] = tab_formateur_rh_interne_nom_prenom_mail
|
||
RetObject['tab_formateur_rh_interne_total_heure'] = tab_formateur_rh_interne_total_heure
|
||
"""
|
||
|
||
RetObject['bpf_e1_nb_formateurs_internee'] = str(len(tab_formateur_rh_id_interne))
|
||
RetObject['bpf_e1_nb_heures_formateurs_internes'] = tab_formateur_rh_interne_total_heure
|
||
|
||
"""
|
||
RetObject['tab_formateur_rh_id_sous_traitant'] = tab_formateur_rh_id_sous_traitant
|
||
RetObject['tab_formateur_rh_sous_traitant_nom_prenom_mail'] = tab_formateur_rh_sous_traitant_nom_prenom_mail
|
||
RetObject['tab_formateur_rh_sous_traitant_total_heure'] = tab_formateur_rh_sous_traitant_total_heure
|
||
"""
|
||
|
||
RetObject['bpf_e2_nb_formateurs_externes'] = str(len(tab_formateur_rh_id_sous_traitant))
|
||
RetObject['bpf_e2_nb_heures_formateurs_externes'] = tab_formateur_rh_sous_traitant_total_heure
|
||
|
||
"""
|
||
FIN TRAITEMENT DU PAVE EEEE
|
||
"""
|
||
|
||
"""
|
||
TRAITEMENT DU PAVE FFFF
|
||
"""
|
||
|
||
|
||
F3_qery_match = {'$and': [{"partner_owner_recid": str(my_partner['recid'])}, {"valide": '1', 'status':'1'},
|
||
]}
|
||
|
||
F3_pipe_qry_stagiaire_par_class_level = ([
|
||
|
||
{'$project': {'_id': 1, 'email': 1, 'session_id': 1, 'nom': 1, 'prenom': 1, 'partner_owner_recid': 1,
|
||
'valide': 1, 'type_apprenant': 1, 'status':1}},
|
||
{'$match': F3_qery_match},
|
||
{'$lookup': {
|
||
'from': 'session_formation',
|
||
'let': {'session_id': "$session_id", 'partner_owner_recid': '$partner_owner_recid'},
|
||
'pipeline': [
|
||
{
|
||
"$addFields": {
|
||
"mysy_date_debut_session": {
|
||
"$dateFromString": {
|
||
"dateString": "$date_debut",
|
||
"format": "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
{'$project': {'_id': 1, 'code_session': 1, 'class_internal_url': 1, 'date_debut': 1, 'date_fin': 1,
|
||
'nb_participant': 1, 'partner_owner_recid': 1, 'valide': 1, 'mysy_date_debut_session':1}},
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$session_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_owner_recid']},
|
||
{'$gte': [{'$toDate': "$mysy_date_debut_session"}, filt_periode_start_date_ISODATE]},
|
||
{'$lt': [{'$toDate': "$mysy_date_debut_session"}, filt_periode_end_date_ISODATE]},
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'session_formation_collection'
|
||
}
|
||
},
|
||
|
||
{
|
||
'$unwind': '$session_formation_collection'
|
||
},
|
||
|
||
{
|
||
"$lookup": {
|
||
'from': 'myclass',
|
||
'localField': 'session_formation_collection.class_internal_url',
|
||
'foreignField': 'internal_url',
|
||
"pipeline": [
|
||
{'$project': {'title': 1, 'internal_url': 1, 'external_code': 1, 'published': 1,
|
||
'duration': 1, 'duration_unit': 1, 'class_level':1, 'partner_owner_recid':1}},
|
||
|
||
{'$match': {'partner_owner_recid': str(my_partner['recid'])}},
|
||
|
||
],
|
||
"as": "myclass_collection"
|
||
}
|
||
},
|
||
|
||
{
|
||
'$unwind': '$myclass_collection'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'class_niveau_formation',
|
||
"let": {'class_level_code': "$myclass_collection.class_level",
|
||
|
||
},
|
||
'pipeline': [
|
||
{'$project': {'_id': 1, 'code': 1, 'description': 1, 'valide': 1}},
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$code", '$$class_level_code']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'class_niveau_formation_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$class_niveau_formation_collection'
|
||
},
|
||
{'$group': {
|
||
'_id': {
|
||
"Class_Level_Code": "$class_niveau_formation_collection.code",
|
||
"Class_Level_Desc": "$class_niveau_formation_collection.description",
|
||
|
||
},
|
||
"TotalAmount_HT": {
|
||
"$sum": 1},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
{
|
||
'$sort': {'count': -1}
|
||
},
|
||
|
||
|
||
])
|
||
|
||
print(" ### F3_pipe_qry_stagiaire_par_class_level = ", F3_pipe_qry_stagiaire_par_class_level)
|
||
|
||
bpf_f3_class_niveau_formation = []
|
||
total_bpf_f3_class_niveau_formation = 0
|
||
|
||
"""
|
||
Recuperer la configuration de conversion des semaines, mois, années en nombre d'heures
|
||
"""
|
||
local_conversion_heure_status, local_nb_heure_par_jour, local_nb_heure_par_sem, local_nb_heure_par_mois, local_nb_heure_par_annee = mycommon.Get_Config_Conversion_Heures(str(my_partner['recid']))
|
||
|
||
|
||
for retval in MYSY_GV.dbname['inscription'].aggregate(F3_pipe_qry_stagiaire_par_class_level):
|
||
#print(" ### retval = ", retval)
|
||
node = {}
|
||
|
||
node['Class_Level_Desc'] = retval['_id']['Class_Level_Desc']
|
||
node['Nb_Apprenant_By_Class_Level'] = retval['count']
|
||
|
||
"""
|
||
Aller chercher le nombre d'heures de formation des formations concernées par niveau
|
||
"""
|
||
pipe_concerned_class = ([
|
||
|
||
{'$project': {'_id': 1, 'email': 1, 'session_id': 1, 'nom': 1, 'prenom': 1, 'partner_owner_recid': 1,
|
||
'valide': 1, 'type_apprenant': 1, 'status':1}},
|
||
{'$match': F3_qery_match},
|
||
{'$lookup': {
|
||
'from': 'session_formation',
|
||
'let': {'session_id': "$session_id", 'partner_owner_recid': '$partner_owner_recid'},
|
||
'pipeline': [
|
||
{
|
||
"$addFields": {
|
||
"mysy_date_debut_session": {
|
||
"$dateFromString": {
|
||
"dateString": "$date_debut",
|
||
"format": "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
{'$project': {'_id': 1, 'code_session': 1, 'class_internal_url': 1, 'date_debut': 1,
|
||
'date_fin': 1,
|
||
'nb_participant': 1, 'partner_owner_recid': 1, 'valide': 1, 'mysy_date_debut_session':1}},
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$session_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_owner_recid']},
|
||
{'$gte': [{'$toDate': "$mysy_date_debut_session"},
|
||
filt_periode_start_date_ISODATE]},
|
||
{'$lt': [{'$toDate': "$mysy_date_debut_session"},
|
||
filt_periode_end_date_ISODATE]},
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'session_formation_collection'
|
||
}
|
||
},
|
||
|
||
{
|
||
'$unwind': '$session_formation_collection'
|
||
},
|
||
|
||
{
|
||
"$lookup": {
|
||
'from': 'myclass',
|
||
'localField': 'session_formation_collection.class_internal_url',
|
||
'foreignField': 'internal_url',
|
||
"pipeline": [
|
||
{'$project': {'_id':1, 'title': 1, 'internal_url': 1, 'external_code': 1, 'published': 1,
|
||
'duration': 1, 'duration_unit': 1, 'class_level': 1, 'partner_owner_recid':1}},
|
||
{'$match': {'class_level': str(retval['_id']['Class_Level_Code']) , 'partner_owner_recid': str(my_partner['recid'])}},
|
||
|
||
],
|
||
"as": "myclass_collection"
|
||
}
|
||
},
|
||
|
||
{
|
||
'$unwind': '$myclass_collection'
|
||
},
|
||
|
||
|
||
|
||
|
||
])
|
||
#print(" ### pipe_concerned_class = ", pipe_concerned_class)
|
||
|
||
tab_class_info = []
|
||
tab_class_id = []
|
||
|
||
total_nb_heure_formation_by_level = 0
|
||
if( local_conversion_heure_status is True ):
|
||
for retval_pipe_concerned_class in MYSY_GV.dbname['inscription'].aggregate(pipe_concerned_class):
|
||
|
||
#print(" ### retval_pipe_concerned_class = ", retval_pipe_concerned_class)
|
||
|
||
if( "myclass_collection" in retval_pipe_concerned_class.keys() and
|
||
"duration" in retval_pipe_concerned_class['myclass_collection'].keys() and retval_pipe_concerned_class['myclass_collection']['duration'] and
|
||
"duration_unit" in retval_pipe_concerned_class['myclass_collection'].keys() and retval_pipe_concerned_class['myclass_collection']['duration_unit'] ):
|
||
|
||
local_duration = mycommon.tryFloat(str(retval_pipe_concerned_class['myclass_collection']['duration']))
|
||
local_duration_unit = str(retval_pipe_concerned_class['myclass_collection']['duration_unit'])
|
||
|
||
|
||
#print(" ### local_duration = ", str(local_duration), " duration_unit = ", str(local_duration_unit) )
|
||
|
||
if( str(retval_pipe_concerned_class['myclass_collection']['_id']) not in tab_class_id ):
|
||
tab_class_id.append((str(retval_pipe_concerned_class['myclass_collection']['_id'])))
|
||
local_node = {}
|
||
local_node['class_id'] = str(retval_pipe_concerned_class['myclass_collection']['_id'])
|
||
local_node['class_duration'] = str(local_duration)
|
||
local_node['class_duration_unit'] = local_duration_unit
|
||
tab_class_info.append(local_node)
|
||
|
||
|
||
for local_retval in tab_class_info :
|
||
#print( " ### local_retval = ",local_retval)
|
||
local_duration = mycommon.tryFloat(str(local_retval['class_duration']))
|
||
local_duration_unit = str(local_retval['class_duration_unit'])
|
||
|
||
|
||
if( str(local_duration_unit) == "heure"):
|
||
total_nb_heure_formation_by_level = total_nb_heure_formation_by_level + local_duration
|
||
|
||
elif( str(local_duration_unit) == "jour"):
|
||
total_nb_heure_formation_by_level = total_nb_heure_formation_by_level + ( local_duration * local_nb_heure_par_jour)
|
||
|
||
elif (str(local_duration_unit) == "semaine"):
|
||
total_nb_heure_formation_by_level = total_nb_heure_formation_by_level + (local_duration * local_nb_heure_par_sem)
|
||
|
||
elif (str(local_duration_unit) == "mois"):
|
||
total_nb_heure_formation_by_level = total_nb_heure_formation_by_level + (local_duration * local_nb_heure_par_mois)
|
||
|
||
elif (str(local_duration_unit) == "annee"):
|
||
total_nb_heure_formation_by_level = total_nb_heure_formation_by_level + (local_duration * local_nb_heure_par_annee)
|
||
|
||
|
||
node['total_nb_heure_formation_by_level'] = str(total_nb_heure_formation_by_level)
|
||
|
||
|
||
|
||
total_bpf_f3_class_niveau_formation = total_bpf_f3_class_niveau_formation + mycommon.tryFloat(retval['count'])
|
||
bpf_f3_class_niveau_formation.append(node)
|
||
|
||
RetObject['bpf_f3_class_niveau_formation'] = bpf_f3_class_niveau_formation
|
||
RetObject['total_bpf_f3_class_niveau_formation'] = round(total_bpf_f3_class_niveau_formation, 2)
|
||
|
||
|
||
|
||
""""
|
||
F1 – Les différents types de stagiaires au sein de votre organisme
|
||
"""
|
||
|
||
"""
|
||
Recuperation des types d'apprenant
|
||
"""
|
||
bpf_f1_type_apprenant = []
|
||
nb_personne_a_distance = 0
|
||
nb_personne = 0
|
||
nb_heure_formation = 0
|
||
|
||
|
||
for type_apprenant_data in MYSY_GV.dbname['type_apprenant'].find({'valide':'1', 'locked':'0'}):
|
||
|
||
F1_qery_match = {'$and': [{"partner_owner_recid": str(my_partner['recid'])}, {"valide": '1', 'status': '1',
|
||
'type_apprenant':str(type_apprenant_data['code'])},
|
||
]}
|
||
F1_pipe_qry_stagiaire_type = ([
|
||
|
||
{'$project': {'_id': 1, 'email': 1, 'session_id': 1, 'nom': 1, 'prenom': 1, 'partner_owner_recid': 1,
|
||
'valide': 1, 'type_apprenant': 1, 'status': 1, }},
|
||
{'$match': F1_qery_match},
|
||
{'$lookup': {
|
||
'from': 'session_formation',
|
||
'let': {'session_id': "$session_id", 'partner_owner_recid': '$partner_owner_recid'},
|
||
'pipeline': [
|
||
{
|
||
"$addFields": {
|
||
"mysy_date_debut_session": {
|
||
"$dateFromString": {
|
||
"dateString": "$date_debut",
|
||
"format": "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
{'$project': {'_id': 1, 'code_session': 1, 'class_internal_url': 1, 'date_debut': 1, 'date_fin': 1,
|
||
'nb_participant': 1, 'partner_owner_recid': 1, 'valide': 1,
|
||
'mysy_date_debut_session': 1, 'distantiel':1}},
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$session_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_owner_recid']},
|
||
{'$gte': [{'$toDate': "$mysy_date_debut_session"},
|
||
filt_periode_start_date_ISODATE]},
|
||
{'$lt': [{'$toDate': "$mysy_date_debut_session"}, filt_periode_end_date_ISODATE]},
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'session_formation_collection'
|
||
}
|
||
},
|
||
|
||
{
|
||
'$unwind': '$session_formation_collection'
|
||
},
|
||
{
|
||
"$lookup": {
|
||
'from': 'myclass',
|
||
'localField': 'session_formation_collection.class_internal_url',
|
||
'foreignField': 'internal_url',
|
||
"pipeline": [
|
||
{'$project': {'title': 1, 'internal_url': 1, 'external_code': 1, 'published': 1,
|
||
'duration': 1, 'duration_unit': 1, 'class_level': 1, 'partner_owner_recid': 1}},
|
||
|
||
{'$match': {'partner_owner_recid': str(my_partner['recid'])}},
|
||
|
||
],
|
||
"as": "myclass_collection"
|
||
}
|
||
},
|
||
|
||
{
|
||
'$unwind': '$myclass_collection'
|
||
},
|
||
|
||
{
|
||
"$group": {
|
||
"_id": {
|
||
"class_id": "$myclass_collection._id",
|
||
"class_external_code": "$myclass_collection.external_code",
|
||
"class_duration": "$myclass_collection.duration",
|
||
"class_duration_unit": "$myclass_collection.duration_unit",
|
||
"session_distance": "$session_formation_collection.distantiel"
|
||
},
|
||
"count": {
|
||
"$sum": 1
|
||
}
|
||
}
|
||
},
|
||
])
|
||
|
||
print(" ### F1_pipe_qry_stagiaire_type pour : "+str(type_apprenant_data['description'])+" = ", F1_pipe_qry_stagiaire_type)
|
||
|
||
|
||
total_bpf_f1_type_apprenant = 0
|
||
total_bpf_f1_nb_heure_formation = 0
|
||
node = {}
|
||
node['Type_Apprenant'] = str(type_apprenant_data['code'])
|
||
node['Type_Apprenant_Desc'] = str(type_apprenant_data['description'])
|
||
local_f1_nb_distance = 0
|
||
for f1_local_retval in MYSY_GV.dbname['inscription'].aggregate(F1_pipe_qry_stagiaire_type):
|
||
#print(" ### retval F1_pipe_qry_stagiaire_type = ", f1_local_retval)
|
||
total_bpf_f1_type_apprenant = total_bpf_f1_type_apprenant + mycommon.tryFloat( f1_local_retval['count'])
|
||
nb_personne = nb_personne + + mycommon.tryFloat( f1_local_retval['count'])
|
||
|
||
if( str(f1_local_retval['_id']['session_distance']) == "1"):
|
||
nb_personne_a_distance = nb_personne_a_distance + mycommon.tryFloat( f1_local_retval['count'])
|
||
local_f1_nb_distance = local_f1_nb_distance + mycommon.tryFloat( f1_local_retval['count'])
|
||
|
||
print(" ### nb_personne_a_distance= ", str(nb_personne_a_distance))
|
||
print(" ### local_f1_nb_distance= ", str(local_f1_nb_distance))
|
||
|
||
|
||
"""
|
||
traitement du nombre d'heure de formation
|
||
"""
|
||
local_duration = mycommon.tryFloat(str(f1_local_retval['_id']['class_duration']))
|
||
local_duration_unit = str(f1_local_retval['_id']['class_duration_unit'])
|
||
|
||
if (str(local_duration_unit) == "heure"):
|
||
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + local_duration
|
||
|
||
elif (str(local_duration_unit) == "jour"):
|
||
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + (
|
||
local_duration * local_nb_heure_par_jour)
|
||
|
||
elif (str(local_duration_unit) == "semaine"):
|
||
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + (
|
||
local_duration * local_nb_heure_par_sem)
|
||
|
||
elif (str(local_duration_unit) == "mois"):
|
||
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + (
|
||
local_duration * local_nb_heure_par_mois)
|
||
|
||
elif (str(local_duration_unit) == "annee"):
|
||
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + (
|
||
local_duration * local_nb_heure_par_annee)
|
||
|
||
|
||
node['total_bpf_f1_type_apprenant'] = str(total_bpf_f1_type_apprenant)
|
||
node['total_bpf_f1_type_apprenant_distance'] = str(local_f1_nb_distance)
|
||
node['total_bpf_f1_nb_heure_formation'] = str(total_bpf_f1_nb_heure_formation)
|
||
|
||
nb_heure_formation = nb_heure_formation + mycommon.tryFloat( total_bpf_f1_nb_heure_formation)
|
||
|
||
|
||
bpf_f1_type_apprenant.append(node)
|
||
|
||
RetObject['total_f1_apprenant_a_distance'] = str(nb_personne_a_distance)
|
||
RetObject['total_f1_apprenant'] = str(nb_personne)
|
||
RetObject['total_f1_nb_heure'] = str(nb_heure_formation)
|
||
RetObject['bpf_f1_type_apprenant'] = bpf_f1_type_apprenant
|
||
|
||
|
||
|
||
|
||
print(" ### RetObject BPF = ", RetObject)
|
||
RetObject = mycommon.JSONEncoder().encode(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 "
|
||
|
||
|
||
|
||
|
||
"""
|
||
Cette fonction permert d'imprimer le BPF au format PDF
|
||
"""
|
||
def Prepare_and_Print_BPF_PDF(diction):
|
||
try:
|
||
diction = mycommon.strip_dictionary(diction)
|
||
|
||
"""
|
||
Verification des input acceptés
|
||
"""
|
||
field_list = ['token', 'periode_start_date', 'periode_end_date', 'filter_value', ]
|
||
|
||
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
|
||
|
||
filt_client_id = {}
|
||
if ("filter_client_id" in diction.keys() and diction['filter_client_id']):
|
||
filt_client_id = {'order_header_client_id': str(diction['filter_client_id'])}
|
||
|
||
filt_periode_start_date = ""
|
||
if ("periode_start_date" in diction.keys() and diction['periode_start_date']):
|
||
filt_periode_start_date = str(diction['periode_start_date'])[0:10]
|
||
local_status = mycommon.CheckisDate(filt_periode_start_date)
|
||
if (local_status is False):
|
||
mycommon.myprint(str(
|
||
inspect.stack()[0][3]) + " Le filtre : 'date de debut' n'est pas au format jj/mm/aaaa.")
|
||
return False, " Le filtre : 'date de debut' n'est pas au format jj/mm/aaaa."
|
||
|
||
filt_periode_end_date = ""
|
||
if ("periode_end_date" in diction.keys() and diction['periode_end_date']):
|
||
filt_periode_end_date = str(diction['periode_end_date'])[0:10]
|
||
local_status = mycommon.CheckisDate(filt_periode_end_date)
|
||
if (local_status is False):
|
||
mycommon.myprint(str(
|
||
inspect.stack()[0][3]) + " Le filtre : 'date de fin' n'est pas au format jj/mm/aaaa.")
|
||
return False, " Le filtre : 'date de fin' n'est pas au format jj/mm/aaaa."
|
||
|
||
"""
|
||
Si la valeur de 'filter_value' est m0 ou m1, on va aller recuperer les date du mois correspondant.
|
||
On ecrase les valeur de filt_session_start_date et filt_session_end_date
|
||
"""
|
||
if ('filter_value' in diction.keys()):
|
||
# print(" filter_value = ", diction['filter_value'])
|
||
if (str(diction['filter_value']) == "m0"):
|
||
# On recupere les date du mois en cours
|
||
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
|
||
|
||
filt_periode_start_date = start_current_month_date
|
||
filt_periode_end_date = end_current_month_date
|
||
|
||
# print(" ### filt_session_start_date = ", filt_session_start_date, " ### filt_session_end_date = ", filt_session_end_date)
|
||
|
||
elif (str(diction['filter_value']) == "m1"):
|
||
# On recupere les date du mois en cours
|
||
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
|
||
|
||
filt_periode_start_date = start_current_month_date
|
||
filt_periode_end_date = end_current_month_date
|
||
|
||
filt_periode_start_date_ISODATE = datetime.strptime(str(filt_periode_start_date), '%d/%m/%Y')
|
||
filt_periode_end_date_ISODATE = datetime.strptime(str(filt_periode_end_date), '%d/%m/%Y')
|
||
|
||
RetObject = {}
|
||
val_tmp = 0
|
||
|
||
"""
|
||
C1 – Quelles sont vos ressources provenant directement des entreprises pour la formation de leurs salariés ?
|
||
|
||
On recherche le CA venant des client : is_client = 1, is_financeur != 1
|
||
|
||
"""
|
||
C1_qery_match = {'$and': [
|
||
{"valide": '1', 'invoice_header_type': 'facture',
|
||
'credit_note_ref': {'$exists': False},
|
||
'order_header_is_company': '1',
|
||
'order_header_is_client': '1',
|
||
"partner_owner_recid": str(my_partner['recid'])
|
||
},
|
||
{
|
||
'mysy_invoice_date': {'$gte': filt_periode_start_date_ISODATE,
|
||
'$lte': filt_periode_end_date_ISODATE}}, ]}
|
||
|
||
"""
|
||
TRAITEMENT DU PAVE CCCC
|
||
"""
|
||
|
||
total_c1_C9 = 0
|
||
|
||
bpf_c1_entreprise = []
|
||
total_bpf_c1_entreprise = 0
|
||
C1_pipe_qry_invoice_header_partner__invoice_line_detail__is_client_1_is_financeur_0_is_company_1 = ([
|
||
{"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match': C1_qery_match
|
||
|
||
},
|
||
{'$lookup': {
|
||
'from': 'partner_invoice_line_detail',
|
||
"let": {"invoice_header_id": {'$toString': "$_id"},
|
||
'partner_invoice_line_partner_owner_recid': '$partner_owner_recid',
|
||
'partner_invoice_line_invoice_header_ref_interne': '$invoice_header_ref_interne'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$order_line_is_include_bpf", "1"]},
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$invoice_header_ref_interne",
|
||
'$$partner_invoice_line_invoice_header_ref_interne']},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_invoice_line_partner_owner_recid']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'collection_partner_invoice_line'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$collection_partner_invoice_line'
|
||
},
|
||
|
||
{'$group': {
|
||
'_id': {},
|
||
"TotalAmount_HT": {
|
||
"$sum": {'$toDouble': '$collection_partner_invoice_line.order_line_invoiced_amount'}},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
{
|
||
'$sort': {'count': -1}
|
||
},
|
||
|
||
])
|
||
|
||
print(
|
||
" ### C1_pipe_qry_invoice_header_partner__invoice_line_detail__is_client_1_is_financeur_0_is_company_1 = ",
|
||
C1_pipe_qry_invoice_header_partner__invoice_line_detail__is_client_1_is_financeur_0_is_company_1)
|
||
|
||
for retval in MYSY_GV.dbname['partner_invoice_header'].aggregate(
|
||
C1_pipe_qry_invoice_header_partner__invoice_line_detail__is_client_1_is_financeur_0_is_company_1):
|
||
print(" ### retval bpf_c1_entreprise = ", retval)
|
||
node = {}
|
||
node['bpf_c1_entreprise'] = retval['TotalAmount_HT']
|
||
total_bpf_c1_entreprise = total_bpf_c1_entreprise + mycommon.tryFloat(retval['TotalAmount_HT'])
|
||
bpf_c1_entreprise.append(node)
|
||
|
||
RetObject['bpf_c1_entreprise'] = bpf_c1_entreprise
|
||
total_c1_C9 = total_c1_C9 + mycommon.tryFloat(total_bpf_c1_entreprise)
|
||
print(" ### total_c1_C9 = ", total_c1_C9, ", ### bpf_c1_entreprise = ", total_bpf_c1_entreprise)
|
||
|
||
C2_qery_match = {'$and': [
|
||
{"valide": '1', 'invoice_header_type': 'facture',
|
||
'credit_note_ref': {'$exists': False},
|
||
'order_header_is_financeur': '1',
|
||
"partner_owner_recid": str(my_partner['recid'])
|
||
},
|
||
{
|
||
'mysy_invoice_date': {'$gte': filt_periode_start_date_ISODATE,
|
||
'$lte': filt_periode_end_date_ISODATE}}, ]}
|
||
|
||
C2_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_organisme_financement__type_apprenant = ([
|
||
{"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match': C2_qery_match},
|
||
{'$lookup': {
|
||
'from': 'partner_invoice_line_detail',
|
||
"let": {"invoice_header_id": {'$toString': "$_id"},
|
||
'partner_invoice_line_partner_owner_recid': '$partner_owner_recid',
|
||
'partner_invoice_line_invoice_header_ref_interne': '$invoice_header_ref_interne'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$order_line_is_include_bpf", "1"]},
|
||
{'$eq': ["$invoice_header_ref_interne",
|
||
'$$partner_invoice_line_invoice_header_ref_interne']},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_invoice_line_partner_owner_recid']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'collection_partner_invoice_line'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$collection_partner_invoice_line'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'type_organisme_financement',
|
||
"let": {'type_financeur_id': "$order_header_type_financeur_id",
|
||
|
||
},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$type_financeur_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'type_organisme_financement_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$type_organisme_financement_collection'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'type_apprenant',
|
||
"let": {'type_apprenant_code': "$collection_partner_invoice_line.order_line_inscription_type_apprenant",
|
||
|
||
},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$code", '$$type_apprenant_code']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'type_apprenante_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$type_apprenante_collection'
|
||
},
|
||
|
||
{'$group': {
|
||
'_id': {
|
||
"Type_Apprenant": "$collection_partner_invoice_line.order_line_inscription_type_apprenant",
|
||
"Type_Apprenant_Description": "$type_apprenante_collection.description",
|
||
},
|
||
"TotalAmount_HT": {
|
||
"$sum": {'$toDouble': '$collection_partner_invoice_line.order_line_invoiced_amount'}},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
{
|
||
'$sort': {'count': -1}
|
||
},
|
||
|
||
])
|
||
|
||
print(
|
||
" ### Get_Qery_Generate_BPF C2_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_organisme_financement__type_apprenant = ",
|
||
C2_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_organisme_financement__type_apprenant)
|
||
|
||
bpf_c2_type_apprenant = []
|
||
total_bpf_c_type_apprenant = 0
|
||
for retval in MYSY_GV.dbname['partner_invoice_header'].aggregate(
|
||
C2_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_organisme_financement__type_apprenant):
|
||
print(" ### retval = ", retval)
|
||
node = {}
|
||
node['Type_Apprenant_Code'] = retval['_id']['Type_Apprenant']
|
||
node['Type_Apprenant_Desc'] = retval['_id']['Type_Apprenant_Description']
|
||
node['TotalAmount_HT'] = retval['TotalAmount_HT']
|
||
|
||
total_bpf_c_type_apprenant = total_bpf_c_type_apprenant + mycommon.tryFloat(retval['TotalAmount_HT'])
|
||
bpf_c2_type_apprenant.append(node)
|
||
|
||
RetObject['bpf_c2_type_apprenant'] = bpf_c2_type_apprenant
|
||
RetObject['total_bpf_c_type_apprenant'] = round(total_bpf_c_type_apprenant, 2)
|
||
total_c1_C9 = total_c1_C9 + mycommon.tryFloat(total_bpf_c_type_apprenant)
|
||
print(" ### total_c1_C9 = ", total_c1_C9, ", ### total_bpf_c_type_apprenant = ", total_bpf_c_type_apprenant)
|
||
|
||
C3_qery_match = {'$and': [
|
||
{"valide": '1', 'invoice_header_type': 'facture',
|
||
'credit_note_ref': {'$exists': False},
|
||
"partner_owner_recid": str(my_partner['recid'])
|
||
},
|
||
{
|
||
'mysy_invoice_date': {'$gte': filt_periode_start_date_ISODATE,
|
||
'$lte': filt_periode_end_date_ISODATE}}, ]}
|
||
|
||
C3_C8_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_pouvoir_public = ([
|
||
{"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match': C3_qery_match
|
||
},
|
||
{'$lookup': {
|
||
'from': 'partner_invoice_line_detail',
|
||
"let": {"invoice_header_id": {'$toString': "$_id"},
|
||
'partner_invoice_line_partner_owner_recid': '$partner_owner_recid',
|
||
'partner_invoice_line_invoice_header_ref_interne': '$invoice_header_ref_interne'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$order_line_is_include_bpf", "1"]},
|
||
{'$eq': ["$invoice_header_ref_interne",
|
||
'$$partner_invoice_line_invoice_header_ref_interne']},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_invoice_line_partner_owner_recid']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'collection_partner_invoice_line'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$collection_partner_invoice_line'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'type_pouvoir_public',
|
||
"let": {'order_header_type_pouvoir_public_id': "$order_header_type_pouvoir_public_id",
|
||
|
||
},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$order_header_type_pouvoir_public_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'type_pouvoir_public_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$type_pouvoir_public_collection'
|
||
},
|
||
|
||
{'$group': {
|
||
'_id': {
|
||
|
||
"Type_pouvoir_public_desc": "$type_pouvoir_public_collection.description",
|
||
},
|
||
"TotalAmount_HT": {
|
||
"$sum": {'$toDouble': '$collection_partner_invoice_line.order_line_invoiced_amount'}},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
{
|
||
'$sort': {'count': -1}
|
||
},
|
||
|
||
])
|
||
|
||
bpf_c3_c8_type_pouvoir_public = []
|
||
total_bpf_c3_c8_type_pouvoir_public = 0
|
||
for retval in MYSY_GV.dbname['partner_invoice_header'].aggregate(
|
||
C3_C8_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_pouvoir_public):
|
||
print(" bpf_c3_c8_type_pouvoir_public ### retval = ", retval)
|
||
node = {}
|
||
node['Type_pouvoir_public_desc'] = retval['_id']['Type_pouvoir_public_desc']
|
||
node['TotalAmount_HT'] = retval['TotalAmount_HT']
|
||
|
||
total_bpf_c3_c8_type_pouvoir_public = total_bpf_c3_c8_type_pouvoir_public + mycommon.tryFloat(
|
||
retval['TotalAmount_HT'])
|
||
bpf_c3_c8_type_pouvoir_public.append(node)
|
||
|
||
RetObject['bpf_c3_c8_type_pouvoir_public'] = bpf_c3_c8_type_pouvoir_public
|
||
RetObject['total_bpf_c3_c8_type_pouvoir_public'] = round(total_bpf_c3_c8_type_pouvoir_public, 2)
|
||
total_c1_C9 = total_c1_C9 + mycommon.tryFloat(total_bpf_c3_c8_type_pouvoir_public)
|
||
print(" ### total_c1_C9 = ", total_c1_C9, ", ### bpf_c3_c8_type_pouvoir_public = ",
|
||
total_bpf_c3_c8_type_pouvoir_public)
|
||
|
||
C9_qery_match = {'$and': [
|
||
{"valide": '1', 'invoice_header_type': 'facture',
|
||
'credit_note_ref': {'$exists': False},
|
||
'order_header_is_company': '0',
|
||
"partner_owner_recid": str(my_partner['recid'])
|
||
},
|
||
{
|
||
'mysy_invoice_date': {'$gte': filt_periode_start_date_ISODATE,
|
||
'$lte': filt_periode_end_date_ISODATE}}, ]}
|
||
|
||
C9_pipe_qry_invoice_header_partner__invoice_line_detail__is_company_0 = ([
|
||
{"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match': C9_qery_match},
|
||
{'$lookup': {
|
||
'from': 'partner_invoice_line_detail',
|
||
"let": {"invoice_header_id": {'$toString': "$_id"},
|
||
'partner_invoice_line_partner_owner_recid': '$partner_owner_recid',
|
||
'partner_invoice_line_invoice_header_ref_interne': '$invoice_header_ref_interne'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$order_line_is_include_bpf", "1"]},
|
||
{'$eq': ["$invoice_header_ref_interne",
|
||
'$$partner_invoice_line_invoice_header_ref_interne']},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_invoice_line_partner_owner_recid']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'collection_partner_invoice_line'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$collection_partner_invoice_line'
|
||
},
|
||
|
||
{'$group': {
|
||
'_id': {
|
||
"Type_Client": "$order_header_is_company",
|
||
"Type_Client_Desc": "Client Type Particulier",
|
||
},
|
||
"TotalAmount_HT": {
|
||
"$sum": {'$toDouble': '$collection_partner_invoice_line.order_line_invoiced_amount'}},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
{
|
||
'$sort': {'count': -1}
|
||
},
|
||
|
||
])
|
||
|
||
bpf_c9_is_company_particulier = []
|
||
total_bpf_c9_is_company_particulier = 0
|
||
|
||
for retval in MYSY_GV.dbname['partner_invoice_header'].aggregate(
|
||
C9_pipe_qry_invoice_header_partner__invoice_line_detail__is_company_0):
|
||
print(" ### retval is_company_particulier = ", retval)
|
||
node = {}
|
||
node['Type_Client_Desc'] = retval['_id']['Type_Client_Desc']
|
||
node['TotalAmount_HT'] = retval['TotalAmount_HT']
|
||
|
||
total_bpf_c9_is_company_particulier = total_bpf_c9_is_company_particulier + mycommon.tryFloat(
|
||
retval['TotalAmount_HT'])
|
||
bpf_c9_is_company_particulier.append(node)
|
||
|
||
RetObject['bpf_c9_is_company_particulier'] = bpf_c9_is_company_particulier
|
||
RetObject['total_bpf_c9_is_company_particulier'] = round(total_bpf_c9_is_company_particulier, 2)
|
||
total_c1_C9 = total_c1_C9 + mycommon.tryFloat(total_bpf_c9_is_company_particulier)
|
||
|
||
RetObject['total_bpf_c1_c9'] = str(total_c1_C9)
|
||
print(" ### total_c1_C9 = ", total_c1_C9, ", ### total_bpf_c9_is_company_particulier = ",
|
||
total_bpf_c9_is_company_particulier)
|
||
|
||
"""
|
||
FIN TRAITEMENT DU PAVE CCCC
|
||
"""
|
||
|
||
"""
|
||
TRAITEMENT DU PAVE EEE
|
||
"""
|
||
E_pipe_qry_ressource_humaine__ressource_humaine_contrat = ([
|
||
{
|
||
"$project": {
|
||
"_id": 1, "partner_recid": 1, "nom": 1, "prenom": 1, "fonction": 1, "email": 1, "email": 1,
|
||
"email": 1, "email": 1, "email": 1,
|
||
}
|
||
},
|
||
{'$lookup': {
|
||
'from': 'ressource_humaine_contrat',
|
||
'let': {'rh_id': {'$toString': '$_id'}, 'rh_partner_owner_recid': '$partner_recid'},
|
||
'pipeline': [
|
||
{"$addFields": {
|
||
"mysy_contrat_date_debut": {
|
||
'$dateFromString': {
|
||
'dateString': '$date_debut',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
},
|
||
|
||
"mysy_contrat_date_fin": {
|
||
'$dateFromString': {
|
||
'dateString': '$date_fin',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
},
|
||
|
||
}
|
||
},
|
||
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[{'$eq': ['$valide', '1']},
|
||
{'$eq': ['$rh_id', '$$rh_id']},
|
||
{'$eq': ['$partner_owner_recid', '$$rh_partner_owner_recid']},
|
||
|
||
{"$and":
|
||
[
|
||
{"$gt": [
|
||
{
|
||
"$toDate": "$mysy_contrat_date_fin"
|
||
}, filt_periode_start_date_ISODATE
|
||
]},
|
||
{"$lt": [
|
||
{
|
||
"$toDate": "$mysy_contrat_date_debut"
|
||
}, filt_periode_end_date_ISODATE
|
||
]},
|
||
|
||
],
|
||
|
||
},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"$project": {
|
||
"_id": 1, "rh_id": 1, "date_debut": 1, "date_fin": 1, "type_contrat": 1, "type_employe": 1,
|
||
"cout": 1, "periodicite": 1, "mysy_contrat_date_debut": 1, "mysy_contrat_date_fin": 1
|
||
}
|
||
},
|
||
|
||
],
|
||
|
||
'as': 'collection_ressource_humaine_contrat'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$collection_ressource_humaine_contrat'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'agenda',
|
||
"let": {"rh_id": {'$toString': "$_id"}, 'rh_partner_owner_recid': '$partner_recid'},
|
||
'pipeline': [
|
||
{
|
||
"$addFields": {
|
||
"agenda_event_date_debut": {
|
||
"$dateFromString": {
|
||
'dateString': {"$substr": ["$event_start", 0, 10]},
|
||
"format": "%Y-%m-%d"
|
||
}
|
||
},
|
||
"agenda_event_date_fin": {
|
||
"$dateFromString": {
|
||
'dateString': {"$substr": ["$event_end", 0, 10]},
|
||
"format": "%Y-%m-%d"
|
||
}
|
||
},
|
||
|
||
}
|
||
},
|
||
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$related_collection_recid", '$$rh_id']},
|
||
{'$eq': ["$partner_owner_recid", '$$rh_partner_owner_recid']},
|
||
{'$eq': ["$event_type", 'planning']},
|
||
{'$gte': [{'$toDate': "$agenda_event_date_debut"},
|
||
filt_periode_start_date_ISODATE]},
|
||
{'$lt': [{'$toDate': "$agenda_event_date_fin"}, filt_periode_end_date_ISODATE]}
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'collection_agenda'
|
||
}
|
||
},
|
||
])
|
||
|
||
tab_formateur_rh_id_interne = []
|
||
tab_formateur_rh_interne_nom_prenom_mail = []
|
||
tab_formateur_rh_interne_total_heure = 0
|
||
|
||
tab_formateur_rh_id_sous_traitant = []
|
||
tab_formateur_rh_sous_traitant_nom_prenom_mail = []
|
||
tab_formateur_rh_sous_traitant_total_heure = 0
|
||
|
||
print(" ### E_pipe_qry_ressource_humaine__ressource_humaine_contrat = ",
|
||
E_pipe_qry_ressource_humaine__ressource_humaine_contrat)
|
||
for retval in MYSY_GV.dbname['ressource_humaine'].aggregate(
|
||
E_pipe_qry_ressource_humaine__ressource_humaine_contrat):
|
||
|
||
# print(" ### retval (employé ayant un contrat valide) = ", retval)
|
||
formateur_id = str(retval['_id'])
|
||
formateur_data = str(retval['nom']) + " " + str(retval['prenom']) + " - " + str(
|
||
retval['email']) + " - " + str(retval['_id'])
|
||
formateur_contrat_type = ""
|
||
if ("collection_ressource_humaine_contrat" in retval.keys() and "type_contrat" in retval[
|
||
'collection_ressource_humaine_contrat'].keys()):
|
||
formateur_contrat_type = retval['collection_ressource_humaine_contrat']["type_contrat"]
|
||
|
||
total_duration = 0
|
||
for agenda_retval in retval['collection_agenda']:
|
||
# print(" ### pour formateur_data = ", formateur_data)
|
||
# print(" ### AGENDA : ", agenda_retval)
|
||
event_duration_second = datetime.strptime(str(agenda_retval['event_end'])[0:16],
|
||
'%Y-%m-%dT%H:%M') - datetime.strptime(
|
||
str(agenda_retval['event_start'])[0:16], '%Y-%m-%dT%H:%M')
|
||
event_duration_second = event_duration_second.total_seconds()
|
||
|
||
event_duration_hour = round(
|
||
divmod(event_duration_second, 3600)[0] + divmod(event_duration_second, 3600)[1] / 3600, 2)
|
||
|
||
"""
|
||
Gerer les eventuels cas d'erreur sur une date de fin event < debut event
|
||
"""
|
||
if (event_duration_hour < 0):
|
||
event_duration_hour = 0
|
||
|
||
total_duration = total_duration + event_duration_hour
|
||
|
||
formateur_data = formateur_data + " - Nb_heure = " + str(total_duration) + " heure "
|
||
|
||
if (formateur_contrat_type and formateur_contrat_type in ['vacataire', 'vacataire_qty']):
|
||
if (formateur_id not in tab_formateur_rh_id_sous_traitant):
|
||
tab_formateur_rh_id_sous_traitant.append(str(retval['_id']))
|
||
tab_formateur_rh_sous_traitant_nom_prenom_mail.append(str(formateur_data))
|
||
tab_formateur_rh_sous_traitant_total_heure = tab_formateur_rh_sous_traitant_total_heure + total_duration
|
||
|
||
elif (formateur_contrat_type and formateur_contrat_type not in ['vacataire', 'vacataire_qty']):
|
||
if (formateur_id not in tab_formateur_rh_id_interne):
|
||
tab_formateur_rh_id_interne.append(str(retval['_id']))
|
||
tab_formateur_rh_interne_nom_prenom_mail.append(str(formateur_data))
|
||
tab_formateur_rh_interne_total_heure = tab_formateur_rh_interne_total_heure + total_duration
|
||
|
||
"""
|
||
RetObject['tab_formateur_rh_id_interne'] = tab_formateur_rh_id_interne
|
||
RetObject['tab_formateur_rh_interne_nom_prenom_mail'] = tab_formateur_rh_interne_nom_prenom_mail
|
||
RetObject['tab_formateur_rh_interne_total_heure'] = tab_formateur_rh_interne_total_heure
|
||
"""
|
||
|
||
RetObject['bpf_e1_nb_formateurs_internee'] = str(len(tab_formateur_rh_id_interne))
|
||
RetObject['bpf_e1_nb_heures_formateurs_internes'] = tab_formateur_rh_interne_total_heure
|
||
|
||
"""
|
||
RetObject['tab_formateur_rh_id_sous_traitant'] = tab_formateur_rh_id_sous_traitant
|
||
RetObject['tab_formateur_rh_sous_traitant_nom_prenom_mail'] = tab_formateur_rh_sous_traitant_nom_prenom_mail
|
||
RetObject['tab_formateur_rh_sous_traitant_total_heure'] = tab_formateur_rh_sous_traitant_total_heure
|
||
"""
|
||
|
||
RetObject['bpf_e2_nb_formateurs_externes'] = str(len(tab_formateur_rh_id_sous_traitant))
|
||
RetObject['bpf_e2_nb_heures_formateurs_externes'] = tab_formateur_rh_sous_traitant_total_heure
|
||
|
||
"""
|
||
FIN TRAITEMENT DU PAVE EEEE
|
||
"""
|
||
|
||
"""
|
||
TRAITEMENT DU PAVE FFFF
|
||
"""
|
||
|
||
F3_qery_match = {'$and': [{"partner_owner_recid": str(my_partner['recid'])}, {"valide": '1', 'status': '1'},
|
||
]}
|
||
|
||
F3_pipe_qry_stagiaire_par_class_level = ([
|
||
|
||
{'$project': {'_id': 1, 'email': 1, 'session_id': 1, 'nom': 1, 'prenom': 1, 'partner_owner_recid': 1,
|
||
'valide': 1, 'type_apprenant': 1, 'status': 1}},
|
||
{'$match': F3_qery_match},
|
||
{'$lookup': {
|
||
'from': 'session_formation',
|
||
'let': {'session_id': "$session_id", 'partner_owner_recid': '$partner_owner_recid'},
|
||
'pipeline': [
|
||
{
|
||
"$addFields": {
|
||
"mysy_date_debut_session": {
|
||
"$dateFromString": {
|
||
"dateString": "$date_debut",
|
||
"format": "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
{'$project': {'_id': 1, 'code_session': 1, 'class_internal_url': 1, 'date_debut': 1, 'date_fin': 1,
|
||
'nb_participant': 1, 'partner_owner_recid': 1, 'valide': 1,
|
||
'mysy_date_debut_session': 1}},
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$session_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_owner_recid']},
|
||
{'$gte': [{'$toDate': "$mysy_date_debut_session"},
|
||
filt_periode_start_date_ISODATE]},
|
||
{'$lt': [{'$toDate': "$mysy_date_debut_session"}, filt_periode_end_date_ISODATE]},
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'session_formation_collection'
|
||
}
|
||
},
|
||
|
||
{
|
||
'$unwind': '$session_formation_collection'
|
||
},
|
||
|
||
{
|
||
"$lookup": {
|
||
'from': 'myclass',
|
||
'localField': 'session_formation_collection.class_internal_url',
|
||
'foreignField': 'internal_url',
|
||
"pipeline": [
|
||
{'$project': {'title': 1, 'internal_url': 1, 'external_code': 1, 'published': 1,
|
||
'duration': 1, 'duration_unit': 1, 'class_level': 1, 'partner_owner_recid': 1}},
|
||
|
||
{'$match': {'partner_owner_recid': str(my_partner['recid'])}},
|
||
|
||
],
|
||
"as": "myclass_collection"
|
||
}
|
||
},
|
||
|
||
{
|
||
'$unwind': '$myclass_collection'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'class_niveau_formation',
|
||
"let": {'class_level_code': "$myclass_collection.class_level",
|
||
|
||
},
|
||
'pipeline': [
|
||
{'$project': {'_id': 1, 'code': 1, 'description': 1, 'valide': 1}},
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$code", '$$class_level_code']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'class_niveau_formation_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$class_niveau_formation_collection'
|
||
},
|
||
{'$group': {
|
||
'_id': {
|
||
"Class_Level_Code": "$class_niveau_formation_collection.code",
|
||
"Class_Level_Desc": "$class_niveau_formation_collection.description",
|
||
|
||
},
|
||
"TotalAmount_HT": {
|
||
"$sum": 1},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
{
|
||
'$sort': {'count': -1}
|
||
},
|
||
|
||
])
|
||
|
||
print(" ### F3_pipe_qry_stagiaire_par_class_level = ", F3_pipe_qry_stagiaire_par_class_level)
|
||
|
||
bpf_f3_class_niveau_formation = []
|
||
total_bpf_f3_class_niveau_formation = 0
|
||
|
||
"""
|
||
Recuperer la configuration de conversion des semaines, mois, années en nombre d'heures
|
||
"""
|
||
local_conversion_heure_status, local_nb_heure_par_jour, local_nb_heure_par_sem, local_nb_heure_par_mois, local_nb_heure_par_annee = mycommon.Get_Config_Conversion_Heures(
|
||
str(my_partner['recid']))
|
||
|
||
for retval in MYSY_GV.dbname['inscription'].aggregate(F3_pipe_qry_stagiaire_par_class_level):
|
||
# print(" ### retval = ", retval)
|
||
node = {}
|
||
|
||
node['Class_Level_Desc'] = retval['_id']['Class_Level_Desc']
|
||
node['Nb_Apprenant_By_Class_Level'] = retval['count']
|
||
|
||
"""
|
||
Aller chercher le nombre d'heures de formation des formations concernées par niveau
|
||
"""
|
||
pipe_concerned_class = ([
|
||
|
||
{'$project': {'_id': 1, 'email': 1, 'session_id': 1, 'nom': 1, 'prenom': 1, 'partner_owner_recid': 1,
|
||
'valide': 1, 'type_apprenant': 1, 'status': 1}},
|
||
{'$match': F3_qery_match},
|
||
{'$lookup': {
|
||
'from': 'session_formation',
|
||
'let': {'session_id': "$session_id", 'partner_owner_recid': '$partner_owner_recid'},
|
||
'pipeline': [
|
||
{
|
||
"$addFields": {
|
||
"mysy_date_debut_session": {
|
||
"$dateFromString": {
|
||
"dateString": "$date_debut",
|
||
"format": "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
{'$project': {'_id': 1, 'code_session': 1, 'class_internal_url': 1, 'date_debut': 1,
|
||
'date_fin': 1,
|
||
'nb_participant': 1, 'partner_owner_recid': 1, 'valide': 1,
|
||
'mysy_date_debut_session': 1}},
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$session_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_owner_recid']},
|
||
{'$gte': [{'$toDate': "$mysy_date_debut_session"},
|
||
filt_periode_start_date_ISODATE]},
|
||
{'$lt': [{'$toDate': "$mysy_date_debut_session"},
|
||
filt_periode_end_date_ISODATE]},
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'session_formation_collection'
|
||
}
|
||
},
|
||
|
||
{
|
||
'$unwind': '$session_formation_collection'
|
||
},
|
||
|
||
{
|
||
"$lookup": {
|
||
'from': 'myclass',
|
||
'localField': 'session_formation_collection.class_internal_url',
|
||
'foreignField': 'internal_url',
|
||
"pipeline": [
|
||
{'$project': {'_id': 1, 'title': 1, 'internal_url': 1, 'external_code': 1, 'published': 1,
|
||
'duration': 1, 'duration_unit': 1, 'class_level': 1,
|
||
'partner_owner_recid': 1}},
|
||
{'$match': {'class_level': str(retval['_id']['Class_Level_Code']),
|
||
'partner_owner_recid': str(my_partner['recid'])}},
|
||
|
||
],
|
||
"as": "myclass_collection"
|
||
}
|
||
},
|
||
|
||
{
|
||
'$unwind': '$myclass_collection'
|
||
},
|
||
|
||
])
|
||
# print(" ### pipe_concerned_class = ", pipe_concerned_class)
|
||
|
||
tab_class_info = []
|
||
tab_class_id = []
|
||
|
||
total_nb_heure_formation_by_level = 0
|
||
if (local_conversion_heure_status is True):
|
||
for retval_pipe_concerned_class in MYSY_GV.dbname['inscription'].aggregate(pipe_concerned_class):
|
||
|
||
# print(" ### retval_pipe_concerned_class = ", retval_pipe_concerned_class)
|
||
|
||
if ("myclass_collection" in retval_pipe_concerned_class.keys() and
|
||
"duration" in retval_pipe_concerned_class['myclass_collection'].keys() and
|
||
retval_pipe_concerned_class['myclass_collection']['duration'] and
|
||
"duration_unit" in retval_pipe_concerned_class['myclass_collection'].keys() and
|
||
retval_pipe_concerned_class['myclass_collection']['duration_unit']):
|
||
|
||
local_duration = mycommon.tryFloat(
|
||
str(retval_pipe_concerned_class['myclass_collection']['duration']))
|
||
local_duration_unit = str(retval_pipe_concerned_class['myclass_collection']['duration_unit'])
|
||
|
||
# print(" ### local_duration = ", str(local_duration), " duration_unit = ", str(local_duration_unit) )
|
||
|
||
if (str(retval_pipe_concerned_class['myclass_collection']['_id']) not in tab_class_id):
|
||
tab_class_id.append((str(retval_pipe_concerned_class['myclass_collection']['_id'])))
|
||
local_node = {}
|
||
local_node['class_id'] = str(retval_pipe_concerned_class['myclass_collection']['_id'])
|
||
local_node['class_duration'] = str(local_duration)
|
||
local_node['class_duration_unit'] = local_duration_unit
|
||
tab_class_info.append(local_node)
|
||
|
||
for local_retval in tab_class_info:
|
||
# print( " ### local_retval = ",local_retval)
|
||
local_duration = mycommon.tryFloat(str(local_retval['class_duration']))
|
||
local_duration_unit = str(local_retval['class_duration_unit'])
|
||
|
||
if (str(local_duration_unit) == "heure"):
|
||
total_nb_heure_formation_by_level = total_nb_heure_formation_by_level + local_duration
|
||
|
||
elif (str(local_duration_unit) == "jour"):
|
||
total_nb_heure_formation_by_level = total_nb_heure_formation_by_level + (
|
||
local_duration * local_nb_heure_par_jour)
|
||
|
||
elif (str(local_duration_unit) == "semaine"):
|
||
total_nb_heure_formation_by_level = total_nb_heure_formation_by_level + (
|
||
local_duration * local_nb_heure_par_sem)
|
||
|
||
elif (str(local_duration_unit) == "mois"):
|
||
total_nb_heure_formation_by_level = total_nb_heure_formation_by_level + (
|
||
local_duration * local_nb_heure_par_mois)
|
||
|
||
elif (str(local_duration_unit) == "annee"):
|
||
total_nb_heure_formation_by_level = total_nb_heure_formation_by_level + (
|
||
local_duration * local_nb_heure_par_annee)
|
||
|
||
node['total_nb_heure_formation_by_level'] = str(total_nb_heure_formation_by_level)
|
||
|
||
total_bpf_f3_class_niveau_formation = total_bpf_f3_class_niveau_formation + mycommon.tryFloat(
|
||
retval['count'])
|
||
bpf_f3_class_niveau_formation.append(node)
|
||
|
||
RetObject['bpf_f3_class_niveau_formation'] = bpf_f3_class_niveau_formation
|
||
RetObject['total_bpf_f3_class_niveau_formation'] = round(total_bpf_f3_class_niveau_formation, 2)
|
||
|
||
""""
|
||
F1 – Les différents types de stagiaires au sein de votre organisme
|
||
"""
|
||
|
||
"""
|
||
Recuperation des types d'apprenant
|
||
"""
|
||
bpf_f1_type_apprenant = []
|
||
nb_personne_a_distance = 0
|
||
nb_personne = 0
|
||
nb_heure_formation = 0
|
||
|
||
for type_apprenant_data in MYSY_GV.dbname['type_apprenant'].find({'valide': '1', 'locked': '0'}):
|
||
|
||
F1_qery_match = {'$and': [{"partner_owner_recid": str(my_partner['recid'])}, {"valide": '1', 'status': '1',
|
||
'type_apprenant': str(
|
||
type_apprenant_data[
|
||
'code'])},
|
||
]}
|
||
F1_pipe_qry_stagiaire_type = ([
|
||
|
||
{'$project': {'_id': 1, 'email': 1, 'session_id': 1, 'nom': 1, 'prenom': 1, 'partner_owner_recid': 1,
|
||
'valide': 1, 'type_apprenant': 1, 'status': 1, }},
|
||
{'$match': F1_qery_match},
|
||
{'$lookup': {
|
||
'from': 'session_formation',
|
||
'let': {'session_id': "$session_id", 'partner_owner_recid': '$partner_owner_recid'},
|
||
'pipeline': [
|
||
{
|
||
"$addFields": {
|
||
"mysy_date_debut_session": {
|
||
"$dateFromString": {
|
||
"dateString": "$date_debut",
|
||
"format": "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
{'$project': {'_id': 1, 'code_session': 1, 'class_internal_url': 1, 'date_debut': 1,
|
||
'date_fin': 1,
|
||
'nb_participant': 1, 'partner_owner_recid': 1, 'valide': 1,
|
||
'mysy_date_debut_session': 1, 'distantiel': 1}},
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$session_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_owner_recid']},
|
||
{'$gte': [{'$toDate': "$mysy_date_debut_session"},
|
||
filt_periode_start_date_ISODATE]},
|
||
{'$lt': [{'$toDate': "$mysy_date_debut_session"},
|
||
filt_periode_end_date_ISODATE]},
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'session_formation_collection'
|
||
}
|
||
},
|
||
|
||
{
|
||
'$unwind': '$session_formation_collection'
|
||
},
|
||
{
|
||
"$lookup": {
|
||
'from': 'myclass',
|
||
'localField': 'session_formation_collection.class_internal_url',
|
||
'foreignField': 'internal_url',
|
||
"pipeline": [
|
||
{'$project': {'title': 1, 'internal_url': 1, 'external_code': 1, 'published': 1,
|
||
'duration': 1, 'duration_unit': 1, 'class_level': 1,
|
||
'partner_owner_recid': 1}},
|
||
|
||
{'$match': {'partner_owner_recid': str(my_partner['recid'])}},
|
||
|
||
],
|
||
"as": "myclass_collection"
|
||
}
|
||
},
|
||
|
||
{
|
||
'$unwind': '$myclass_collection'
|
||
},
|
||
|
||
{
|
||
"$group": {
|
||
"_id": {
|
||
"class_id": "$myclass_collection._id",
|
||
"class_external_code": "$myclass_collection.external_code",
|
||
"class_duration": "$myclass_collection.duration",
|
||
"class_duration_unit": "$myclass_collection.duration_unit",
|
||
"session_distance": "$session_formation_collection.distantiel"
|
||
},
|
||
"count": {
|
||
"$sum": 1
|
||
}
|
||
}
|
||
},
|
||
])
|
||
|
||
print(" ### F1_pipe_qry_stagiaire_type pour : " + str(type_apprenant_data['description']) + " = ",
|
||
F1_pipe_qry_stagiaire_type)
|
||
|
||
total_bpf_f1_type_apprenant = 0
|
||
total_bpf_f1_nb_heure_formation = 0
|
||
node = {}
|
||
node['Type_Apprenant'] = str(type_apprenant_data['code'])
|
||
node['Type_Apprenant_Desc'] = str(type_apprenant_data['description'])
|
||
local_f1_nb_distance = 0
|
||
for f1_local_retval in MYSY_GV.dbname['inscription'].aggregate(F1_pipe_qry_stagiaire_type):
|
||
# print(" ### retval F1_pipe_qry_stagiaire_type = ", f1_local_retval)
|
||
total_bpf_f1_type_apprenant = total_bpf_f1_type_apprenant + mycommon.tryFloat(f1_local_retval['count'])
|
||
nb_personne = nb_personne + + mycommon.tryFloat(f1_local_retval['count'])
|
||
|
||
if (str(f1_local_retval['_id']['session_distance']) == "1"):
|
||
nb_personne_a_distance = nb_personne_a_distance + mycommon.tryFloat(f1_local_retval['count'])
|
||
local_f1_nb_distance = local_f1_nb_distance + mycommon.tryFloat(f1_local_retval['count'])
|
||
|
||
print(" ### nb_personne_a_distance= ", str(nb_personne_a_distance))
|
||
print(" ### local_f1_nb_distance= ", str(local_f1_nb_distance))
|
||
|
||
"""
|
||
traitement du nombre d'heure de formation
|
||
"""
|
||
local_duration = mycommon.tryFloat(str(f1_local_retval['_id']['class_duration']))
|
||
local_duration_unit = str(f1_local_retval['_id']['class_duration_unit'])
|
||
|
||
if (str(local_duration_unit) == "heure"):
|
||
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + local_duration
|
||
|
||
elif (str(local_duration_unit) == "jour"):
|
||
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + (
|
||
local_duration * local_nb_heure_par_jour)
|
||
|
||
elif (str(local_duration_unit) == "semaine"):
|
||
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + (
|
||
local_duration * local_nb_heure_par_sem)
|
||
|
||
elif (str(local_duration_unit) == "mois"):
|
||
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + (
|
||
local_duration * local_nb_heure_par_mois)
|
||
|
||
elif (str(local_duration_unit) == "annee"):
|
||
total_bpf_f1_nb_heure_formation = total_bpf_f1_nb_heure_formation + (
|
||
local_duration * local_nb_heure_par_annee)
|
||
|
||
node['total_bpf_f1_type_apprenant'] = str(total_bpf_f1_type_apprenant)
|
||
node['total_bpf_f1_type_apprenant_distance'] = str(local_f1_nb_distance)
|
||
node['total_bpf_f1_nb_heure_formation'] = str(total_bpf_f1_nb_heure_formation)
|
||
|
||
nb_heure_formation = nb_heure_formation + mycommon.tryFloat(total_bpf_f1_nb_heure_formation)
|
||
|
||
bpf_f1_type_apprenant.append(node)
|
||
|
||
RetObject['total_f1_apprenant_a_distance'] = str(nb_personne_a_distance)
|
||
RetObject['total_f1_apprenant'] = str(nb_personne)
|
||
RetObject['total_f1_nb_heure'] = str(nb_heure_formation)
|
||
RetObject['filt_periode_start_date'] = str(filt_periode_start_date)
|
||
RetObject['filt_periode_end_date'] = str(filt_periode_end_date)
|
||
RetObject['bpf_f1_type_apprenant'] = bpf_f1_type_apprenant
|
||
|
||
print(" ### RetObject BPF = ", RetObject)
|
||
|
||
|
||
|
||
# Creation du dictionnaire d'information à utiliser pour la creation du doc
|
||
convention_dictionnary_data = {}
|
||
new_diction = {}
|
||
new_diction['token'] = diction['token']
|
||
new_diction['list_stagiaire_id'] = []
|
||
new_diction['list_session_id'] = []
|
||
new_diction['list_class_id'] = []
|
||
new_diction['list_client_id'] = []
|
||
new_diction['list_apprenant_id'] = []
|
||
|
||
local_status, local_retval = mycommon.Get_Dictionnary_data_For_Template(new_diction)
|
||
|
||
if (local_status is False):
|
||
return local_status, local_retval
|
||
|
||
convention_dictionnary_data = local_retval
|
||
convention_dictionnary_data['bpf_data'] = RetObject
|
||
|
||
body = {
|
||
"params": convention_dictionnary_data,
|
||
}
|
||
|
||
#json_formatted_str = json.dumps(body, indent=2)
|
||
#print(" ### AFFICHAGE dU data dictionnary -- body body ")
|
||
#print(json_formatted_str)
|
||
|
||
"""
|
||
Recuperer le modèle de document
|
||
"""
|
||
local_diction = {}
|
||
local_diction['ref_interne'] = "BPF_MODEL"
|
||
local_diction['type_doc'] = "pdf"
|
||
local_diction['partner_owner_recid'] = str(my_partner['recid'])
|
||
|
||
courrier_data_status, courrier_data_retval = mycommon.Get_Courrier_Template_Include_Default_Data(local_diction)
|
||
if (courrier_data_status is False):
|
||
return courrier_data_status, courrier_data_retval
|
||
|
||
if ("contenu_doc" not in courrier_data_retval.keys() or str(courrier_data_retval['contenu_doc']) == ""):
|
||
mycommon.myprint(
|
||
str(inspect.stack()[0][
|
||
3]) + " Le modèle de courrier 'BPF_MODEL' n'est pas correctement configuré ")
|
||
return False, " Le modèle de courrier 'BPF_MODEL' n'est pas correctement configuré "
|
||
|
||
"""
|
||
Creation du fichier PDF
|
||
"""
|
||
contenu_doc_Template = jinja2.Template(str(courrier_data_retval['contenu_doc']))
|
||
|
||
sourceHtml = contenu_doc_Template.render(params=body["params"])
|
||
|
||
todays_date = str(date.today().strftime("%d/%m/%Y"))
|
||
ts = datetime.now().timestamp()
|
||
ts = str(ts).replace(".", "").replace(",", "")[-3:]
|
||
|
||
tmp_file_name = "BPF_"+str(my_partner['nom'])
|
||
|
||
if (len(str(tmp_file_name)) > 30):
|
||
tmp_file_name = str(tmp_file_name)[0:30]
|
||
|
||
orig_file_name = str(tmp_file_name) + "_" + str(ts) + ".pdf"
|
||
outputFilename = str(MYSY_GV.TEMPORARY_DIRECTORY) + "/" + str(orig_file_name)
|
||
|
||
# open output file for writing (truncated binary)
|
||
resultFile = open(outputFilename, "w+b")
|
||
|
||
# convert HTML to PDF
|
||
pisaStatus = pisa.CreatePDF(
|
||
src=sourceHtml, # the HTML to convert
|
||
dest=resultFile) # file handle to receive result
|
||
|
||
# close output file
|
||
resultFile.close()
|
||
|
||
# print(" ### outputFilename = "+str(outputFilename))
|
||
if os.path.exists(outputFilename):
|
||
# print(" ### ok os.path.exists(outputFilename) "+str(outputFilename))
|
||
return True, send_file(outputFilename, as_attachment=True)
|
||
|
||
# return True on success and False on errors
|
||
print(pisaStatus.err, type(pisaStatus.err))
|
||
|
||
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 "
|
||
|
||
|
||
def Get_Qery_Generate_BPF_From_partner_invoice_header_work(diction):
|
||
try:
|
||
diction = mycommon.strip_dictionary(diction)
|
||
|
||
"""
|
||
Verification des input acceptés
|
||
"""
|
||
field_list = ['token', 'periode_start_date', 'periode_end_date', 'filter_value', ]
|
||
|
||
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
|
||
|
||
filt_client_id = {}
|
||
if ("filter_client_id" in diction.keys() and diction['filter_client_id']):
|
||
filt_client_id = {'order_header_client_id': str(diction['filter_client_id'])}
|
||
|
||
|
||
filt_periode_start_date = ""
|
||
if ("periode_start_date" in diction.keys() and diction['periode_start_date']):
|
||
filt_periode_start_date = str(diction['periode_start_date'])[0:10]
|
||
local_status = mycommon.CheckisDate(filt_periode_start_date)
|
||
if (local_status is False):
|
||
mycommon.myprint(str(
|
||
inspect.stack()[0][3]) + " Le filtre : 'date de debut' n'est pas au format jj/mm/aaaa.")
|
||
return False, " Le filtre : 'date de debut' n'est pas au format jj/mm/aaaa."
|
||
|
||
filt_periode_end_date = ""
|
||
if ("periode_end_date" in diction.keys() and diction['periode_end_date']):
|
||
filt_periode_end_date = str(diction['periode_end_date'])[0:10]
|
||
local_status = mycommon.CheckisDate(filt_periode_end_date)
|
||
if (local_status is False):
|
||
mycommon.myprint(str(
|
||
inspect.stack()[0][3]) + " Le filtre : 'date de fin' n'est pas au format jj/mm/aaaa.")
|
||
return False, " Le filtre : 'date de fin' n'est pas au format jj/mm/aaaa."
|
||
|
||
|
||
|
||
"""
|
||
Si la valeur de 'filter_value' est m0 ou m1, on va aller recuperer les date du mois correspondant.
|
||
On ecrase les valeur de filt_session_start_date et filt_session_end_date
|
||
"""
|
||
if ('filter_value' in diction.keys()):
|
||
# print(" filter_value = ", diction['filter_value'])
|
||
if (str(diction['filter_value']) == "m0"):
|
||
# On recupere les date du mois en cours
|
||
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
|
||
|
||
filt_periode_start_date = start_current_month_date
|
||
filt_periode_end_date = end_current_month_date
|
||
|
||
# print(" ### filt_session_start_date = ", filt_session_start_date, " ### filt_session_end_date = ", filt_session_end_date)
|
||
|
||
elif (str(diction['filter_value']) == "m1"):
|
||
# On recupere les date du mois en cours
|
||
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
|
||
|
||
filt_periode_start_date = start_current_month_date
|
||
filt_periode_end_date = end_current_month_date
|
||
|
||
|
||
|
||
filt_periode_start_date_ISODATE = datetime.strptime(str(filt_periode_start_date), '%d/%m/%Y')
|
||
filt_periode_end_date_ISODATE = datetime.strptime(str(filt_periode_end_date), '%d/%m/%Y')
|
||
|
||
RetObject = []
|
||
val_tmp = 0
|
||
|
||
|
||
"""
|
||
C1 – Quelles sont vos ressources provenant directement des entreprises pour la formation de leurs salariés ?
|
||
|
||
On recherche le CA venant des client : is_client = 1, is_financeur != 1
|
||
|
||
"""
|
||
C1_qery_match = {'$and': [{"partner_owner_recid": str(my_partner['recid'])},
|
||
{"valide": '1'},
|
||
|
||
{
|
||
'mysy_invoice_date': {'$gte': filt_periode_start_date_ISODATE,
|
||
'$lte': filt_periode_end_date_ISODATE}}, ]}
|
||
|
||
C1_pipe_qry = ([
|
||
{"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match': C1_qery_match},
|
||
{'$lookup': {
|
||
'from': 'partner_client',
|
||
"let": {'order_header_client_id': "$order_header_client_id",
|
||
'partner_owner_recid': '$partner_owner_recid'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$order_header_client_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_recid", '$$partner_owner_recid']},
|
||
{'$eq': ["is_client", "1"]},
|
||
{'$ne': ["is_financeur", "1"]},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'partner_client_collection'
|
||
}
|
||
},
|
||
{'$group': {
|
||
"TotalAmount": {"$sum": {'$toDouble': '$total_header_toutes_taxes'}},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
|
||
])
|
||
|
||
print(" ### Get_Qery_Generate_BPF C1_pipe_qry = ", C1_pipe_qry)
|
||
|
||
C2_pipe_qry = ([
|
||
{"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match': C1_qery_match},
|
||
{'$lookup': {
|
||
'from': 'partner_client',
|
||
"let": {'order_header_client_id': "$order_header_client_id",
|
||
'partner_owner_recid': '$partner_owner_recid'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$order_header_client_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_recid", '$$partner_owner_recid']}
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'partner_client_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$partner_client_collection'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'partner_client_type',
|
||
"let": {'client_type_id': "$partner_client_collection.client_type_id",
|
||
'partner_recid': '$partner_recid'
|
||
},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$client_type_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_client_collection.partner_recid",
|
||
'$$partner_recid']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'partner_client_type_collection'
|
||
}
|
||
},
|
||
|
||
{'$group': {
|
||
'_id': {
|
||
"Client_type": "$partner_client_type_collection.code",
|
||
|
||
},
|
||
"TotalAmount": {"$sum": {'$toDouble': '$total_header_toutes_taxes'}},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
|
||
|
||
])
|
||
|
||
print(" ### Get_Qery_Generate_BPF C2_pipe_qry = ", C2_pipe_qry)
|
||
|
||
C2_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_organisme_financement__type_apprenant = ([
|
||
{"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match': {'invoice_header_type':'facture',
|
||
'credit_note_ref': {'$exists': False},
|
||
'invoice_header_ref_interne':{'$in':['Invoice_567', 'Invoice_568', 'Invoice_569', 'Invoice_570', 'Invoice_571', 'Invoice_572', 'Invoice_573' ]} } },
|
||
{'$lookup': {
|
||
'from': 'partner_invoice_line_detail',
|
||
"let": {"invoice_header_id": {'$toString': "$_id"},
|
||
'partner_invoice_line_partner_owner_recid': '$partner_owner_recid',
|
||
'partner_invoice_line_invoice_header_ref_interne': '$invoice_header_ref_interne'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$order_line_is_include_bpf", "1"]},
|
||
{'$eq': ["$invoice_header_ref_interne",'$$partner_invoice_line_invoice_header_ref_interne']},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_invoice_line_partner_owner_recid']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'collection_partner_invoice_line'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$collection_partner_invoice_line'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'type_organisme_financement',
|
||
"let": {'type_financeur_id': "$order_header_type_financeur_id",
|
||
|
||
},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$type_financeur_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
|
||
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'type_organisme_financement_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$type_organisme_financement_collection'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'type_apprenant',
|
||
"let": {'type_apprenant_code': "$collection_partner_invoice_line.order_line_inscription_type_apprenant",
|
||
|
||
},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$code",'$$type_apprenant_code']},
|
||
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'type_apprenante_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$type_apprenante_collection'
|
||
},
|
||
|
||
{'$group': {
|
||
'_id': {
|
||
"Type Apprenant": "$collection_partner_invoice_line.order_line_inscription_type_apprenant",
|
||
"Type Apprenant Description": "$type_apprenante_collection.description",
|
||
},
|
||
"TotalAmount_HT": {
|
||
"$sum": {'$toDouble': '$collection_partner_invoice_line.order_line_invoiced_amount'}},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
{
|
||
'$sort': {'count': -1}
|
||
},
|
||
|
||
|
||
])
|
||
|
||
C3_C8_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_pouvoir_public = ([
|
||
{"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match': {'invoice_header_type':'facture',
|
||
'credit_note_ref': {'$exists': False},
|
||
'invoice_header_ref_interne':{'$in':['Invoice_588', 'Invoice_589', 'Invoice_590', 'Invoice_591', 'Invoice_592', 'Invoice_593', 'Invoice_594', 'Invoice_595' ]} } },
|
||
{'$lookup': {
|
||
'from': 'partner_invoice_line_detail',
|
||
"let": {"invoice_header_id": {'$toString': "$_id"},
|
||
'partner_invoice_line_partner_owner_recid': '$partner_owner_recid',
|
||
'partner_invoice_line_invoice_header_ref_interne': '$invoice_header_ref_interne'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$order_line_is_include_bpf", "1"]},
|
||
{'$eq': ["$invoice_header_ref_interne",'$$partner_invoice_line_invoice_header_ref_interne']},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_invoice_line_partner_owner_recid']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'collection_partner_invoice_line'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$collection_partner_invoice_line'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'type_pouvoir_public',
|
||
"let": {'order_header_type_pouvoir_public_id': "$order_header_type_pouvoir_public_id",
|
||
|
||
},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$order_header_type_pouvoir_public_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
|
||
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'type_pouvoir_public_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$type_pouvoir_public_collection'
|
||
},
|
||
|
||
|
||
{'$group': {
|
||
'_id': {
|
||
"Type pouvoir public": "$type_pouvoir_public_idt",
|
||
"Type pouvoir public": "$type_pouvoir_public_collection.description",
|
||
},
|
||
"TotalAmount_HT": {
|
||
"$sum": {'$toDouble': '$collection_partner_invoice_line.order_line_invoiced_amount'}},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
{
|
||
'$sort': {'count': -1}
|
||
},
|
||
|
||
|
||
])
|
||
|
||
C9_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_pouvoir_public = ([
|
||
{"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match': {'invoice_header_type':'facture',
|
||
'credit_note_ref': {'$exists': False},
|
||
'order_header_is_company':'0',
|
||
'invoice_header_ref_interne':{'$in':['Invoice_588', 'Invoice_589', 'Invoice_590', 'Invoice_591', 'Invoice_592', 'Invoice_593', 'Invoice_594', 'Invoice_595' ]} } },
|
||
{'$lookup': {
|
||
'from': 'partner_invoice_line_detail',
|
||
"let": {"invoice_header_id": {'$toString': "$_id"},
|
||
'partner_invoice_line_partner_owner_recid': '$partner_owner_recid',
|
||
'partner_invoice_line_invoice_header_ref_interne': '$invoice_header_ref_interne'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$order_line_is_include_bpf", "1"]},
|
||
{'$eq': ["$invoice_header_ref_interne",'$$partner_invoice_line_invoice_header_ref_interne']},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_invoice_line_partner_owner_recid']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'collection_partner_invoice_line'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$collection_partner_invoice_line'
|
||
},
|
||
|
||
|
||
|
||
|
||
{'$group': {
|
||
'_id': {
|
||
"Type Client": "$order_header_is_company",
|
||
"Type Client public": "Client Type Particulier",
|
||
},
|
||
"TotalAmount_HT": {
|
||
"$sum": {'$toDouble': '$collection_partner_invoice_line.order_line_invoiced_amount'}},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
{
|
||
'$sort': {'count': -1}
|
||
},
|
||
|
||
|
||
])
|
||
|
||
E_pipe_qry_ressource_humaine__ressource_humaine_contrat__partner_agenda = ([
|
||
{'$project': {'list_competence': 0, }},
|
||
{'$lookup': {
|
||
'from': 'ressource_humaine_contrat',
|
||
'let': {'rh_id': {'$toString': '$_id'}, 'rh_partner_owner_recid': '$partner_recid'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ['$valide', '1']},
|
||
{'$eq': ['$rh_id', '$$rh_id']},
|
||
{'$eq': ['$partner_owner_recid', '$$rh_partner_owner_recid']}
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
{"$project": {"_id": 0, }}
|
||
|
||
],
|
||
|
||
'as': 'collection_ressource_humaine_contrat'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$collection_ressource_humaine_contrat'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'agenda',
|
||
"let": {"rh_id": {'$toString': "$_id"}, 'rh_partner_owner_recid':'$partner_recid'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$related_collection_recid", '$$rh_id']},
|
||
{'$eq': ["$partner_owner_recid", '$$rh_partner_owner_recid']},
|
||
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'collection_agenda'
|
||
}
|
||
},
|
||
|
||
|
||
])
|
||
|
||
F1_pipe_qry_invoice_header_partner__invoice_line_detail__partner_type_pouvoir_public = ([
|
||
{"$addFields": {
|
||
"mysy_date_debut_session": {
|
||
'$dateFromString': {
|
||
'dateString': '$date_du',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
{'$project': {'_id': 1, 'email': 1, 'session_id': 1, 'nom': 1, 'prenom':1, 'partner_owner_recid':1, 'valide':1, 'type_apprenant':1}},
|
||
{'$match': {'session_id':'66cdeb5d7e8061b7b6f9b066'} },
|
||
{'$lookup': {
|
||
'from': 'session_formation',
|
||
'let': {'session_id': "$session_id", 'partner_owner_recid': '$partner_owner_recid'},
|
||
'pipeline': [
|
||
{'$project': {'_id': 1, 'code_session': 1, 'class_internal_url': 1, 'date_debut': 1, 'date_fin':1, 'nb_participant':1, 'partner_owner_recid':1, 'valide':1}},
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$session_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_owner_recid']}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'session_formation_collection'
|
||
}
|
||
},
|
||
|
||
{
|
||
'$unwind': '$session_formation_collection'
|
||
},
|
||
|
||
{
|
||
"$lookup": {
|
||
'from': 'myclass',
|
||
'localField': 'session_formation_collection.class_internal_url',
|
||
'foreignField': 'internal_url',
|
||
"pipeline": [{'$project': {'title': 1, 'internal_url': 1, 'external_code': 1, 'published': 1, 'duration':1, 'duration_unit':1}}
|
||
|
||
],
|
||
"as": "myclass_collection"
|
||
}
|
||
},
|
||
|
||
{
|
||
'$unwind': '$myclass_collection'
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'type_apprenant',
|
||
"let": {'type_apprenant_code': "$type_apprenant",
|
||
|
||
},
|
||
'pipeline': [
|
||
{'$project': {'_id': 1, 'code': 1, 'description': 1, 'valide':1}},
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$code",'$$type_apprenant_code']},
|
||
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'type_apprenante_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$type_apprenante_collection'
|
||
},
|
||
|
||
|
||
{'$group': {
|
||
'_id': {
|
||
"Type Apprenant": "$type_apprenant",
|
||
"Type Apprenant Description": "$type_apprenante_collection.description",
|
||
},
|
||
"TotalAmount_HT": {
|
||
"$sum": 1},
|
||
"count": {"$sum": 1}
|
||
}
|
||
},
|
||
{
|
||
'$sort': {'count': -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) + " - Line : " + str(exc_tb.tb_lineno))
|
||
return False, " Impossible de récupérer les données "
|
||
|
||
|
||
def Get_Qery_Generate_BPF_From_Inscription(diction):
|
||
try:
|
||
diction = mycommon.strip_dictionary(diction)
|
||
|
||
"""
|
||
Verification des input acceptés
|
||
"""
|
||
field_list = ['token', 'periode_start_date', 'periode_end_date', 'filter_value', ]
|
||
|
||
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
|
||
|
||
filt_client_id = {}
|
||
if ("filter_client_id" in diction.keys() and diction['filter_client_id']):
|
||
filt_client_id = {'order_header_client_id': str(diction['filter_client_id'])}
|
||
|
||
filt_periode_start_date = ""
|
||
if ("periode_start_date" in diction.keys() and diction['periode_start_date']):
|
||
filt_periode_start_date = str(diction['periode_start_date'])[0:10]
|
||
local_status = mycommon.CheckisDate(filt_periode_start_date)
|
||
if (local_status is False):
|
||
mycommon.myprint(str(
|
||
inspect.stack()[0][3]) + " Le filtre : 'date de debut' n'est pas au format jj/mm/aaaa.")
|
||
return False, " Le filtre : 'date de debut' n'est pas au format jj/mm/aaaa."
|
||
|
||
filt_periode_end_date = ""
|
||
if ("periode_end_date" in diction.keys() and diction['periode_end_date']):
|
||
filt_periode_end_date = str(diction['periode_end_date'])[0:10]
|
||
local_status = mycommon.CheckisDate(filt_periode_end_date)
|
||
if (local_status is False):
|
||
mycommon.myprint(str(
|
||
inspect.stack()[0][3]) + " Le filtre : 'date de fin' n'est pas au format jj/mm/aaaa.")
|
||
return False, " Le filtre : 'date de fin' n'est pas au format jj/mm/aaaa."
|
||
|
||
"""
|
||
Si la valeur de 'filter_value' est m0 ou m1, on va aller recuperer les date du mois correspondant.
|
||
On ecrase les valeur de filt_session_start_date et filt_session_end_date
|
||
"""
|
||
if ('filter_value' in diction.keys()):
|
||
# print(" filter_value = ", diction['filter_value'])
|
||
if (str(diction['filter_value']) == "m0"):
|
||
# On recupere les date du mois en cours
|
||
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
|
||
|
||
filt_periode_start_date = start_current_month_date
|
||
filt_periode_end_date = end_current_month_date
|
||
|
||
# print(" ### filt_session_start_date = ", filt_session_start_date, " ### filt_session_end_date = ", filt_session_end_date)
|
||
|
||
elif (str(diction['filter_value']) == "m1"):
|
||
# On recupere les date du mois en cours
|
||
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
|
||
|
||
filt_periode_start_date = start_current_month_date
|
||
filt_periode_end_date = end_current_month_date
|
||
|
||
filt_periode_start_date_ISODATE = datetime.strptime(str(filt_periode_start_date), '%d/%m/%Y')
|
||
filt_periode_end_date_ISODATE = datetime.strptime(str(filt_periode_end_date), '%d/%m/%Y')
|
||
|
||
RetObject = []
|
||
val_tmp = 0
|
||
|
||
"""
|
||
Voici une requete qui fait une jointure entre
|
||
- Inscription, Client, Type_Client, Facture
|
||
|
||
"""
|
||
C1_qery_match = {'$and': [{"partner_owner_recid": str(my_partner['recid'])},
|
||
{"valide": '1'},
|
||
|
||
{
|
||
'mysy_invoice_date': {'$gte': filt_periode_start_date_ISODATE,
|
||
'$lte': filt_periode_end_date_ISODATE}}, ]}
|
||
|
||
Inscription_Client_Type_Client_Facture_pipe_qry = ([
|
||
{'$match': {'invoiced':'1'} },
|
||
{'$lookup': {
|
||
'from': 'partner_client',
|
||
"let": {'facture_client_rattachement_id': "$facture_client_rattachement_id",
|
||
'partner_owner_recid': '$partner_owner_recid'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$facture_client_rattachement_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_recid", '$$partner_owner_recid']},
|
||
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'partner_client_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$partner_client_collection'
|
||
},
|
||
{'$lookup': {
|
||
'from': 'partner_client_type',
|
||
"let": {'client_type_id': "$partner_client_collection.client_type_id",
|
||
'partner_recid': '$partner_recid',
|
||
|
||
},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$client_type_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_client_collection.partner_recid", '$$partner_recid']},
|
||
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'partner_client_type_collection'
|
||
}
|
||
},
|
||
|
||
|
||
{'$lookup': {
|
||
'from': 'partner_invoice_header',
|
||
"let": {'facture_client_rattachement_id': "$facture_client_rattachement_id",
|
||
'invoiced_ref': "$invoiced_ref",
|
||
'partner_owner_recid': '$partner_owner_recid'
|
||
|
||
},
|
||
'pipeline': [
|
||
{
|
||
"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$invoice_header_ref_interne", '$$invoiced_ref']},
|
||
{'$eq': ["$order_header_client_id", '$$facture_client_rattachement_id']},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_owner_recid']},
|
||
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'partner_invoice_header_collection'
|
||
}
|
||
},
|
||
|
||
])
|
||
print(" ### Get_Qery_Generate_BPF_From_Inscription Inscription_Client_Type_Client_Facture_pipe_qry = ", Inscription_Client_Type_Client_Facture_pipe_qry)
|
||
|
||
Inscription_Client_Type_Client_Facture_pipe_qry_Client_Financeur = ([
|
||
{'$match': {'invoiced': '1'}},
|
||
{'$lookup': {
|
||
'from': 'partner_client',
|
||
"let": {'facture_client_rattachement_id': "$facture_client_rattachement_id",
|
||
'partner_owner_recid': '$partner_owner_recid'},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$facture_client_rattachement_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_recid", '$$partner_owner_recid']},
|
||
{'$eq': ["$is_financeur", '1']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'partner_client_collection'
|
||
}
|
||
},
|
||
{
|
||
'$unwind': '$partner_client_collection'
|
||
},
|
||
{'$lookup': {
|
||
'from': 'partner_client_type',
|
||
"let": {'client_type_id': "$partner_client_collection.client_type_id",
|
||
'partner_recid': '$partner_recid',
|
||
|
||
},
|
||
'pipeline': [
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$_id", {'$convert': {
|
||
'input': "$$client_type_id",
|
||
'to': "objectId",
|
||
'onError': {'error': 'true'},
|
||
'onNull': {'isnull': 'true'}
|
||
}}]},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_client_collection.partner_recid", '$$partner_recid']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'partner_client_type_collection'
|
||
}
|
||
},
|
||
|
||
{'$lookup': {
|
||
'from': 'partner_invoice_header',
|
||
"let": {'facture_client_rattachement_id': "$facture_client_rattachement_id",
|
||
'invoiced_ref': "$invoiced_ref",
|
||
'partner_owner_recid': '$partner_owner_recid'
|
||
|
||
},
|
||
'pipeline': [
|
||
{
|
||
"$addFields": {
|
||
"mysy_invoice_date": {
|
||
'$dateFromString': {
|
||
'dateString': '$invoice_date',
|
||
'format': "%d/%m/%Y"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
{'$match':
|
||
{'$expr':
|
||
{'$and':
|
||
[
|
||
|
||
{'$eq': ["$invoice_header_ref_interne", '$$invoiced_ref']},
|
||
{'$eq': ["$order_header_client_id", '$$facture_client_rattachement_id']},
|
||
|
||
{'$eq': ["$valide", "1"]},
|
||
{'$eq': ["$partner_owner_recid", '$$partner_owner_recid']},
|
||
|
||
]
|
||
}
|
||
}
|
||
},
|
||
|
||
],
|
||
'as': 'partner_invoice_header_collection'
|
||
}
|
||
},
|
||
|
||
])
|
||
print(" ### Get_Qery_Generate_BPF_From_Inscription Inscription_Client_Type_Client_Facture_pipe_qry_Client_Financeur = ",
|
||
Inscription_Client_Type_Client_Facture_pipe_qry)
|
||
|
||
|
||
|
||
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 "
|
||
|