09/02/23 - 17h
parent
92170635f1
commit
c2644dfde7
|
@ -1,16 +1,16 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="1122d9e2-679f-46d6-8c4f-97e9ae4041b5" name="Changes" comment="05/02/23 - 20h">
|
<list default="true" id="1122d9e2-679f-46d6-8c4f-97e9ae4041b5" name="Changes" comment="09/02/23 - 11h">
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/Emargement/fichier_presence.pdf" beforeDir="false" afterPath="$PROJECT_DIR$/Emargement/fichier_presence.pdf" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/Inscription_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/Inscription_mgt.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/Log/log_file.log" beforeDir="false" afterPath="$PROJECT_DIR$/Log/log_file.log" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/Log/log_file.log" beforeDir="false" afterPath="$PROJECT_DIR$/Log/log_file.log" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/class_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/class_mgt.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/class_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/class_mgt.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/data_indexees.csv" beforeDir="false" afterPath="$PROJECT_DIR$/data_indexees.csv" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/data_indexees.csv" beforeDir="false" afterPath="$PROJECT_DIR$/data_indexees.csv" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/ela_output_test_file_pandas_2.txt" beforeDir="false" afterPath="$PROJECT_DIR$/ela_output_test_file_pandas_2.txt" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/ela_output_test_file_pandas_2.txt" beforeDir="false" afterPath="$PROJECT_DIR$/ela_output_test_file_pandas_2.txt" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/email_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/email_mgt.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/email_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/email_mgt.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/tools_cherif/tools_cherif.py" beforeDir="false" afterPath="$PROJECT_DIR$/tools_cherif/tools_cherif.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/partners.py" beforeDir="false" afterPath="$PROJECT_DIR$/partners.py" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
@ -279,7 +279,14 @@
|
||||||
<option name="project" value="LOCAL" />
|
<option name="project" value="LOCAL" />
|
||||||
<updated>1675623091527</updated>
|
<updated>1675623091527</updated>
|
||||||
</task>
|
</task>
|
||||||
<option name="localTasksCounter" value="30" />
|
<task id="LOCAL-00030" summary="09/02/23 - 11h">
|
||||||
|
<created>1675938338905</created>
|
||||||
|
<option name="number" value="00030" />
|
||||||
|
<option name="presentableId" value="LOCAL-00030" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1675938338905</updated>
|
||||||
|
</task>
|
||||||
|
<option name="localTasksCounter" value="31" />
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="Vcs.Log.Tabs.Properties">
|
<component name="Vcs.Log.Tabs.Properties">
|
||||||
|
@ -294,7 +301,6 @@
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="VcsManagerConfiguration">
|
<component name="VcsManagerConfiguration">
|
||||||
<MESSAGE value="22/11/22 - 22h30" />
|
|
||||||
<MESSAGE value="23/11/22 - 22h30" />
|
<MESSAGE value="23/11/22 - 22h30" />
|
||||||
<MESSAGE value="26/11/22 - 10h30" />
|
<MESSAGE value="26/11/22 - 10h30" />
|
||||||
<MESSAGE value="26/11/22 - 23h30" />
|
<MESSAGE value="26/11/22 - 23h30" />
|
||||||
|
@ -319,7 +325,8 @@
|
||||||
<MESSAGE value="30/01/23 - 22h" />
|
<MESSAGE value="30/01/23 - 22h" />
|
||||||
<MESSAGE value="01/02/23 - 22h" />
|
<MESSAGE value="01/02/23 - 22h" />
|
||||||
<MESSAGE value="05/02/23 - 20h" />
|
<MESSAGE value="05/02/23 - 20h" />
|
||||||
<option name="LAST_COMMIT_MESSAGE" value="05/02/23 - 20h" />
|
<MESSAGE value="09/02/23 - 11h" />
|
||||||
|
<option name="LAST_COMMIT_MESSAGE" value="09/02/23 - 11h" />
|
||||||
</component>
|
</component>
|
||||||
<component name="XDebuggerManager">
|
<component name="XDebuggerManager">
|
||||||
<breakpoint-manager>
|
<breakpoint-manager>
|
||||||
|
|
|
@ -25,6 +25,7 @@ from xhtml2pdf import pisa
|
||||||
import jinja2
|
import jinja2
|
||||||
import ftplib
|
import ftplib
|
||||||
import pysftp
|
import pysftp
|
||||||
|
import email_mgt as email_mgt
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Enregistrement d'un stagiaire
|
Enregistrement d'un stagiaire
|
||||||
|
@ -1443,6 +1444,9 @@ def Evaluation_Class(diction):
|
||||||
mycommon.myprint(str(inspect.stack()[0][3]) + " Impossible d'enregistrer l'evaluation ")
|
mycommon.myprint(str(inspect.stack()[0][3]) + " Impossible d'enregistrer l'evaluation ")
|
||||||
return False, " Impossible d'enregistrer l'evaluation "
|
return False, " Impossible d'enregistrer l'evaluation "
|
||||||
|
|
||||||
|
|
||||||
|
# Declencer l'envoi de la notification de l'evaluation
|
||||||
|
email_mgt.EmailNotifEvaluation_Done()
|
||||||
return True, " L'evaluation a bien été enregistrée"
|
return True, " L'evaluation a bien été enregistrée"
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
1878
Log/log_file.log
1878
Log/log_file.log
File diff suppressed because it is too large
Load Diff
29
class_mgt.py
29
class_mgt.py
|
@ -1854,14 +1854,31 @@ def get_class(diction):
|
||||||
" d'une recherche de formation. Voir _id = ")
|
" d'une recherche de formation. Voir _id = ")
|
||||||
return False, "Impossible de faire un affichage detaillé "
|
return False, "Impossible de faire un affichage detaillé "
|
||||||
|
|
||||||
|
|
||||||
|
# Cette varible compte le nombre de certificat dont dispose le partenaire.
|
||||||
|
# Cette information est utilisée pour savoir les taille à afficher sur le front
|
||||||
|
nb_partner_certificat = 0
|
||||||
if( "isdatadock" in tmp_partenaire_data.keys() and tmp_partenaire_data['isdatadock']):
|
if( "isdatadock" in tmp_partenaire_data.keys() and tmp_partenaire_data['isdatadock']):
|
||||||
retVal['isdatadock'] = tmp_partenaire_data['isdatadock']
|
retVal['isdatadock'] = tmp_partenaire_data['isdatadock']
|
||||||
|
if (tmp_partenaire_data['isdatadock'] == "1"):
|
||||||
|
nb_partner_certificat = nb_partner_certificat + 1
|
||||||
|
|
||||||
if ("isqualiopi" in tmp_partenaire_data.keys() and tmp_partenaire_data['isqualiopi']):
|
if ("isqualiopi" in tmp_partenaire_data.keys() and tmp_partenaire_data['isqualiopi']):
|
||||||
retVal['isqualiopi'] = tmp_partenaire_data['isqualiopi']
|
retVal['isqualiopi'] = tmp_partenaire_data['isqualiopi']
|
||||||
|
if (tmp_partenaire_data['isqualiopi'] == "1"):
|
||||||
|
nb_partner_certificat = nb_partner_certificat + 1
|
||||||
|
|
||||||
if ("iscertitrace" in tmp_partenaire_data.keys() and tmp_partenaire_data['iscertitrace']):
|
if ("iscertitrace" in tmp_partenaire_data.keys() and tmp_partenaire_data['iscertitrace']):
|
||||||
retVal['iscertitrace'] = tmp_partenaire_data['iscertitrace']
|
retVal['iscertitrace'] = tmp_partenaire_data['iscertitrace']
|
||||||
|
if( tmp_partenaire_data['iscertitrace'] == "1"):
|
||||||
|
nb_partner_certificat = nb_partner_certificat + 1
|
||||||
|
|
||||||
|
if ("isbureaucertitrace" in tmp_partenaire_data.keys() and tmp_partenaire_data['isbureaucertitrace']):
|
||||||
|
retVal['isbureaucertitrace'] = tmp_partenaire_data['isbureaucertitrace']
|
||||||
|
if (tmp_partenaire_data['isbureaucertitrace'] == "1"):
|
||||||
|
nb_partner_certificat = nb_partner_certificat + 1
|
||||||
|
|
||||||
|
retVal['nb_partner_certificat'] = str(nb_partner_certificat)
|
||||||
|
|
||||||
if ("nom" in tmp_partenaire_data.keys() and tmp_partenaire_data['nom']):
|
if ("nom" in tmp_partenaire_data.keys() and tmp_partenaire_data['nom']):
|
||||||
retVal['nom_partenaire'] = tmp_partenaire_data['nom']
|
retVal['nom_partenaire'] = tmp_partenaire_data['nom']
|
||||||
|
@ -1870,11 +1887,13 @@ def get_class(diction):
|
||||||
retVal['website_partenaire'] = tmp_partenaire_data['website']
|
retVal['website_partenaire'] = tmp_partenaire_data['website']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ("description" in retVal.keys()):
|
if ("description" in retVal.keys()):
|
||||||
tmp_str = retVal['description']
|
tmp_str = retVal['description']
|
||||||
no_html = mycommon.cleanhtml(retVal['description'])
|
no_html = mycommon.cleanhtml(retVal['description'])
|
||||||
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
||||||
print(" ### nb_pave_a_afficher , DESCRI ")
|
|
||||||
|
|
||||||
text_size = text_size + len(str(no_html))
|
text_size = text_size + len(str(no_html))
|
||||||
if (len(retVal['description']) > MYSY_GV.MAX_CARACT_DETAIL):
|
if (len(retVal['description']) > MYSY_GV.MAX_CARACT_DETAIL):
|
||||||
|
@ -1886,7 +1905,7 @@ def get_class(diction):
|
||||||
no_html = mycommon.cleanhtml(retVal['objectif'])
|
no_html = mycommon.cleanhtml(retVal['objectif'])
|
||||||
text_size = text_size + len(str(no_html))
|
text_size = text_size + len(str(no_html))
|
||||||
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
||||||
print(" ### nb_pave_a_afficher , OBJECTIF ")
|
|
||||||
|
|
||||||
|
|
||||||
if (len(retVal['objectif']) > MYSY_GV.MAX_CARACT_DETAIL):
|
if (len(retVal['objectif']) > MYSY_GV.MAX_CARACT_DETAIL):
|
||||||
|
@ -1895,7 +1914,7 @@ def get_class(diction):
|
||||||
|
|
||||||
if ("pourqui" in retVal.keys() and retVal['pourqui']):
|
if ("pourqui" in retVal.keys() and retVal['pourqui']):
|
||||||
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
||||||
print(" ### nb_pave_a_afficher , POURQUI ")
|
|
||||||
|
|
||||||
|
|
||||||
if ("programme" in retVal.keys()):
|
if ("programme" in retVal.keys()):
|
||||||
|
@ -1903,7 +1922,7 @@ def get_class(diction):
|
||||||
no_html = mycommon.cleanhtml( retVal['programme'])
|
no_html = mycommon.cleanhtml( retVal['programme'])
|
||||||
text_size = text_size + len(str(no_html))
|
text_size = text_size + len(str(no_html))
|
||||||
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
||||||
print(" ### nb_pave_a_afficher , PROGRAMME ")
|
|
||||||
|
|
||||||
if (len(retVal['programme']) > MYSY_GV.MAX_CARACT_DETAIL):
|
if (len(retVal['programme']) > MYSY_GV.MAX_CARACT_DETAIL):
|
||||||
retVal['programme'] = tmp_str[:MYSY_GV.MAX_CARACT_DETAIL] + " ..."
|
retVal['programme'] = tmp_str[:MYSY_GV.MAX_CARACT_DETAIL] + " ..."
|
||||||
|
@ -1932,7 +1951,7 @@ def get_class(diction):
|
||||||
|
|
||||||
retVal["nb_pave_a_afficher"] = str(nb_pave_a_afficher)
|
retVal["nb_pave_a_afficher"] = str(nb_pave_a_afficher)
|
||||||
|
|
||||||
print(" #### Pour la formation :",internal_url, " text_size = ", str(text_size))
|
#print(" #### Pour la formation :",internal_url, " text_size = ", str(text_size))
|
||||||
#mycommon.myprint(" #### "+str(retVal))
|
#mycommon.myprint(" #### "+str(retVal))
|
||||||
user = retVal
|
user = retVal
|
||||||
RetObject.append(JSONEncoder().encode(user))
|
RetObject.append(JSONEncoder().encode(user))
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
,index,mots,occurence,moyenne,id_formation,source_field
|
,index,mots,occurence,moyenne,id_formation,source_field
|
||||||
0,0,electrique,1,0.17,MYSY_0001,title
|
0,0,aromatherapie,1,0.33,MYSY_0004,title
|
||||||
1,1,b,2,0.33,MYSY_0001,title
|
1,1,integrative,1,0.33,MYSY_0004,title
|
||||||
2,2,v,2,0.33,MYSY_0001,title
|
2,2,praticien,1,0.33,MYSY_0004,title
|
||||||
3,3,habilitation,1,0.17,MYSY_0001,title
|
|
||||||
|
|
|
|
@ -1,3 +1,4 @@
|
||||||
Empty DataFrame
|
mots occurence moyenne id_formation source_field
|
||||||
Columns: [mots, occurence, moyenne, id_formation, source_field]
|
0 aromatherapie 1 0.33 MYSY_0004 title
|
||||||
Index: []
|
1 integrative 1 0.33 MYSY_0004 title
|
||||||
|
2 praticien 1 0.33 MYSY_0004 title
|
64
email_mgt.py
64
email_mgt.py
|
@ -1992,3 +1992,67 @@ def EmailStopAbonnement( partners_email, partners_pack_service, partners_date_ar
|
||||||
exc_type, exc_obj, exc_tb = sys.exc_info()
|
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||||
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
|
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
|
||||||
return False, " Impossible d'envoyer l'email de notification "
|
return False, " Impossible d'envoyer l'email de notification "
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
Cette fonction envoie la notification d'evaluation à un institut de formation
|
||||||
|
"""
|
||||||
|
def EmailNotifEvaluation_Done():
|
||||||
|
try:
|
||||||
|
tomorrow = datetime.date.today() + datetime.timedelta(days=1)
|
||||||
|
tomorrow_day = tomorrow.strftime("%A")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
smtpserver = smtplib.SMTP(MYSY_GV.O365_SMTP_COUNT_smtpsrv, MYSY_GV.O365_SMTP_COUNT_port)
|
||||||
|
|
||||||
|
# msg = MIMEMultipart("alternative")
|
||||||
|
msg = EmailMessage()
|
||||||
|
|
||||||
|
# JINJA2
|
||||||
|
templateLoader = jinja2.FileSystemLoader(searchpath="./")
|
||||||
|
templateEnv = jinja2.Environment(loader=templateLoader)
|
||||||
|
TEMPLATE_FILE = "Template/MySy_Evaluation_Class_done_Notif_tpl.html"
|
||||||
|
template = templateEnv.get_template(TEMPLATE_FILE)
|
||||||
|
# This data can come from database query
|
||||||
|
body = {
|
||||||
|
"params":{"partenaire_name": "Mysy",
|
||||||
|
"prenom": "sekou",
|
||||||
|
"nom": "balde",
|
||||||
|
"date_du": "10/01/22",
|
||||||
|
"date_fin": "12/01/22",
|
||||||
|
"eval_note":"5",
|
||||||
|
"eval_pedagogie": "6",
|
||||||
|
"eval_eval": "topppp cool",
|
||||||
|
"eval_date": "09/02/23",
|
||||||
|
"aaa": 3,
|
||||||
|
"aab": "3",
|
||||||
|
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceHtml = template.render(params=body["params"])
|
||||||
|
|
||||||
|
msg.set_content(sourceHtml, subtype='html')
|
||||||
|
msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||||
|
|
||||||
|
msg['Bcc'] = 'contact@mysy-training.com'
|
||||||
|
|
||||||
|
msg['Subject'] = "[MySy Training Technology] : Evaluation de votre formation "
|
||||||
|
msg['To'] = "billardman1@gmail.com"
|
||||||
|
|
||||||
|
smtpserver.ehlo()
|
||||||
|
smtpserver.starttls()
|
||||||
|
smtpserver.login(MYSY_GV.O365_SMTP_COUNT_user, MYSY_GV.O365_SMTP_COUNT_password)
|
||||||
|
val = smtpserver.send_message(msg)
|
||||||
|
smtpserver.close()
|
||||||
|
print(" Email envoyé " + str(val))
|
||||||
|
return True, "ok"
|
||||||
|
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||||
|
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
|
||||||
|
return False, " Impossible d'envoyer l'email de notification "
|
||||||
|
|
||||||
|
|
||||||
|
|
12
main.py
12
main.py
|
@ -2375,6 +2375,18 @@ def SendAttestion_to_attendee_by_email_standalone():
|
||||||
return jsonify(status=localStatus, message=message )
|
return jsonify(status=localStatus, message=message )
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
API de test pour envoyer la notif d'evaluation
|
||||||
|
"""
|
||||||
|
@app.route('/myclass/api/EmailNotifEvaluation_Done/', methods=['POST','GET'])
|
||||||
|
@crossdomain(origin='*')
|
||||||
|
def EmailNotifEvaluation_Done():
|
||||||
|
# On recupere le corps (payload) de la requete
|
||||||
|
payload = request.form.to_dict()
|
||||||
|
print(" ### EmailNotifEvaluation_Done : payload = ",payload)
|
||||||
|
localStatus, message = emails.EmailNotifEvaluation_Done()
|
||||||
|
return jsonify(status=localStatus, message=message )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -519,7 +519,7 @@ def update_partner_account(diction):
|
||||||
'contact_mail', 'token', 'link_facebook', 'link_twitter', 'invoice_vat_num',
|
'contact_mail', 'token', 'link_facebook', 'link_twitter', 'invoice_vat_num',
|
||||||
'invoice_nom', 'invoice_adr_street', 'invoice_adr_city', 'invoice_adr_zip',
|
'invoice_nom', 'invoice_adr_street', 'invoice_adr_city', 'invoice_adr_zip',
|
||||||
'invoice_adr_country', 'invoice_email', 'invoice_telephone', 'invoice_vat_num',
|
'invoice_adr_country', 'invoice_email', 'invoice_telephone', 'invoice_vat_num',
|
||||||
'siren', 'num_nda', 'iscertitrace', 'isdatadock', 'isqualiopi', 'website']
|
'siren', 'num_nda', 'iscertitrace', 'isdatadock', 'isqualiopi', 'website', 'isbureaucertitrace']
|
||||||
incom_keys = diction.keys()
|
incom_keys = diction.keys()
|
||||||
|
|
||||||
|
|
||||||
|
@ -585,6 +585,9 @@ def update_partner_account(diction):
|
||||||
if ("iscertitrace" in diction.keys()):
|
if ("iscertitrace" in diction.keys()):
|
||||||
mydata['iscertitrace'] = diction['iscertitrace']
|
mydata['iscertitrace'] = diction['iscertitrace']
|
||||||
|
|
||||||
|
if ("isbureaucertitrace" in diction.keys()):
|
||||||
|
mydata['isbureaucertitrace'] = diction['isbureaucertitrace']
|
||||||
|
|
||||||
if ("isdatadock" in diction.keys()):
|
if ("isdatadock" in diction.keys()):
|
||||||
mydata['isdatadock'] = diction['isdatadock']
|
mydata['isdatadock'] = diction['isdatadock']
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue