215 lines
7.2 KiB
Python
215 lines
7.2 KiB
Python
"""
|
|
Ce fichier permet de gerer les crons et differents job
|
|
"""
|
|
import ast
|
|
|
|
import bson
|
|
import pymongo
|
|
import xlsxwriter
|
|
from pymongo import MongoClient
|
|
import json
|
|
from bson import ObjectId
|
|
import re
|
|
from datetime import datetime
|
|
|
|
import module_editique
|
|
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
|
|
import ela_index_bdd_classes as eibdd
|
|
import email_mgt as email
|
|
import jinja2
|
|
from flask import send_file
|
|
from xhtml2pdf import pisa
|
|
from email.message import EmailMessage
|
|
from email.mime.text import MIMEText
|
|
from email import encoders
|
|
import smtplib
|
|
from email.mime.multipart import MIMEMultipart
|
|
from email.mime.text import MIMEText
|
|
from email.mime.base import MIMEBase
|
|
from email import encoders
|
|
import survey_mgt as survey_mgt
|
|
|
|
|
|
"""
|
|
Ce job permet d'envoyer les demandes d'enquetes comme les
|
|
evaluation à froid.
|
|
|
|
Les informations sont stockées dans la collection : "survey"
|
|
|
|
Par exemple, une fois par jour ce job va tourner,
|
|
"date_demande_envoi" = date_jour, alors on envoi
|
|
|
|
on met à jour avec la collection avec
|
|
"""
|
|
def Global_MySy_Cron_Traitement():
|
|
try:
|
|
|
|
today = str(datetime.now().strftime("%d/%m/%Y"))
|
|
today_date_ISODATE = datetime.strptime(str(today), '%d/%m/%Y')
|
|
|
|
|
|
qery_match = {'$and': [{"valide": '1', 'locked':'0'},
|
|
|
|
{
|
|
'mysy_cron_date_start': {'$lte': today_date_ISODATE},
|
|
},
|
|
{
|
|
'mysy_cron_date_end': {'$gte': today_date_ISODATE,},
|
|
},
|
|
|
|
|
|
]}
|
|
|
|
pipe_qry = ([
|
|
{"$addFields": {
|
|
"mysy_cron_date_start": {
|
|
'$dateFromString': {
|
|
'dateString': '$date_start',
|
|
'format': "%d/%m/%Y"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{"$addFields": {
|
|
"mysy_cron_date_end": {
|
|
'$dateFromString': {
|
|
'dateString': '$date_end',
|
|
'format': "%d/%m/%Y"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{'$match': qery_match},
|
|
])
|
|
|
|
|
|
for val in MYSY_GV.dbname['Job_Cron'].aggregate(pipe_qry):
|
|
if( "job_name" in val.keys() ):
|
|
possibles = globals().copy()
|
|
possibles.update(locals())
|
|
cron_function = possibles.get(val['job_name'])
|
|
if not cron_function:
|
|
return False, "Fonction '"+str(val['job_name'])+"' est introuvable"
|
|
|
|
local_con_status, local_con_retval = cron_function()
|
|
|
|
print(" local_con_status = ", local_con_status)
|
|
|
|
"""
|
|
Mettre à jour le cron pour dire que tout s'est bien poassé
|
|
"""
|
|
|
|
now = str(datetime.now())
|
|
cron_update_data = {}
|
|
|
|
cron_update_data['last_run'] = str(now)
|
|
if( local_con_status is True ):
|
|
cron_update_data['last_run_status'] = "1"
|
|
else:
|
|
cron_update_data['last_run_status'] = "0"
|
|
|
|
cron_update_data['last_run_message'] = local_con_retval
|
|
|
|
node_traitement = {}
|
|
node_traitement['run_date'] = str(now)
|
|
node_traitement['run_status'] = str(cron_update_data['last_run_status'])
|
|
node_traitement['run_message'] = str(local_con_retval)
|
|
|
|
|
|
|
|
if( "cront_list_traitement" in val.keys() and val['cront_list_traitement']):
|
|
local_cront_list_traitement = val['cront_list_traitement']
|
|
local_cront_list_traitement.append(node_traitement)
|
|
else:
|
|
local_cront_list_traitement = []
|
|
local_cront_list_traitement.append(node_traitement)
|
|
|
|
|
|
cron_update_data['cront_list_traitement'] = local_cront_list_traitement
|
|
|
|
ret_val = MYSY_GV.dbname['Job_Cron'].find_one_and_update(
|
|
{'_id': ObjectId(str(val['_id']))},
|
|
{"$set": cron_update_data},
|
|
return_document=ReturnDocument.AFTER,
|
|
upsert=False,
|
|
)
|
|
|
|
return True, "OK"
|
|
|
|
|
|
except Exception as e:
|
|
exc_type, exc_obj, exc_tb = sys.exc_info()
|
|
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
|
|
return False, str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno)
|
|
|
|
|
|
def Cron_Send_Survey():
|
|
try:
|
|
for val in MYSY_GV.dbname['survey'].find({"automatique_traitement":"1",
|
|
'automatique_traitement_done':'0',
|
|
'valide':'1',
|
|
'locked':'0'}) :
|
|
|
|
|
|
|
|
|
|
if( "automatique_sending_request_date" in val.keys() and val['automatique_sending_request_date']):
|
|
automatic_date_to_send = str(val['automatique_sending_request_date'])[0:10]
|
|
local_status = mycommon.CheckisDate(automatic_date_to_send)
|
|
if (local_status is False):
|
|
mycommon.myprint(str(inspect.stack()[0][
|
|
3]) + " La date 'automatique_sending_request_date' de n'est pas au format jj/mm/aaaa.")
|
|
return False, " La date 'automatique_sending_request_date' de n'est pas au format jj/mm/aaaa."
|
|
|
|
|
|
|
|
if (datetime.strptime(str(automatic_date_to_send), '%d/%m/%Y') <= datetime.strptime(str(datetime.now().strftime("%d/%m/%Y")), '%d/%m/%Y') ) :
|
|
print(" OKK to run job ")
|
|
|
|
local_dicton = {}
|
|
local_dicton['partner_owner_recid'] = str(val['partner_owner_recid'])
|
|
local_dicton['tab_ids'] = (str(val['_id']))
|
|
|
|
|
|
|
|
local_status, local_retval = survey_mgt.Automatic_Send_Survey_TabIds(local_dicton)
|
|
|
|
#data['date_update'] = str(datetime.now())
|
|
survey_update_data = {}
|
|
|
|
sending_status = "0"
|
|
if( local_status is False ):
|
|
sending_status = "0"
|
|
|
|
else:
|
|
sending_status = "1"
|
|
survey_update_data['automatique_traitement_done'] = "1"
|
|
|
|
survey_update_data['date_envoi'] = str(datetime.now())
|
|
|
|
|
|
ret_val = MYSY_GV.dbname['survey'].find_one_and_update(
|
|
{'_id': ObjectId(str(val['_id']))},
|
|
{"$set": survey_update_data},
|
|
return_document=ReturnDocument.AFTER,
|
|
upsert=False,
|
|
)
|
|
|
|
|
|
|
|
return True, ""
|
|
|
|
|
|
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, str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno) |