05/05/23 - 21h

master
cherif 2023-05-05 22:08:29 +02:00
parent 6ea0aa617e
commit 27216cd57b
6 changed files with 3076 additions and 29 deletions

View File

@ -1,10 +1,13 @@
<?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="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="28/04/23 - 21h"> <list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="29/04/23 - 21h">
<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$/GlobalVariable.py" beforeDir="false" afterPath="$PROJECT_DIR$/GlobalVariable.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$/email_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/email_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/lms_chamilo/mysy_lms.py" beforeDir="false" afterPath="$PROJECT_DIR$/lms_chamilo/mysy_lms.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/lms_chamilo/mysy_lms.py" beforeDir="false" afterPath="$PROJECT_DIR$/lms_chamilo/mysy_lms.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.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" />
@ -166,7 +169,14 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1682714699263</updated> <updated>1682714699263</updated>
</task> </task>
<option name="localTasksCounter" value="16" /> <task id="LOCAL-00016" summary="29/04/23 - 21h">
<created>1682792543419</created>
<option name="number" value="00016" />
<option name="presentableId" value="LOCAL-00016" />
<option name="project" value="LOCAL" />
<updated>1682792543419</updated>
</task>
<option name="localTasksCounter" value="17" />
<servers /> <servers />
</component> </component>
<component name="Vcs.Log.Tabs.Properties"> <component name="Vcs.Log.Tabs.Properties">
@ -194,6 +204,7 @@
<MESSAGE value="24/04/23 - 21h" /> <MESSAGE value="24/04/23 - 21h" />
<MESSAGE value="25/04/23 - 21h" /> <MESSAGE value="25/04/23 - 21h" />
<MESSAGE value="28/04/23 - 21h" /> <MESSAGE value="28/04/23 - 21h" />
<option name="LAST_COMMIT_MESSAGE" value="28/04/23 - 21h" /> <MESSAGE value="29/04/23 - 21h" />
<option name="LAST_COMMIT_MESSAGE" value="29/04/23 - 21h" />
</component> </component>
</project> </project>

View File

@ -316,30 +316,38 @@ if (MYSY_ENV == "PROD"):
MYSY_LMS_BASE_DIRECTORY = "/var/www/html/chamilo_mysy_prod/" MYSY_LMS_BASE_DIRECTORY = "/var/www/html/chamilo_mysy_prod/"
LMS_BAS_URL = "mysy-training.fr/" LMS_BAS_URL = "mysy-training.fr/"
""" DEV on localHost
elif (MYSY_ENV == "DEV"): elif (MYSY_ENV == "DEV"):
MYSY_MARIADB_USER = "mysy_mariadb_user"
MYSY_MARIADB_USER_PASS = "fB5z%M)GG&g!n2c"
MYSY_MARIADB_HOST = "192.168.1.21"
#MYSY_MARIADB_HOST = "88.170.110.220"
MYSY_MARIADB_PORT = 3306
MYSY_LMS_BDD = "chamilo_dev2"
MYSY_LMS_URL = "https://lms.mysy-training.com/"
MYSY_LMS_BASE_DIRECTORY = "/var/www/html/chamilo_mysy/"
LMS_BAS_URL = "mysy-training.fr/"
""" DEV OUTSIDE network
elif (MYSY_ENV == "DEV"):
MYSY_MARIADB_USER = "mysy_mariadb_user" MYSY_MARIADB_USER = "mysy_mariadb_user"
MYSY_MARIADB_USER_PASS = "fB5z%M)GG&g!n2c" MYSY_MARIADB_USER_PASS = "fB5z%M)GG&g!n2c"
MYSY_MARIADB_HOST = "88.170.110.220" MYSY_MARIADB_HOST = "127.0.0.1"
MYSY_MARIADB_PORT = 3306 MYSY_MARIADB_PORT = 3306
MYSY_LMS_BDD = "mysy_db_chamilo_rec" MYSY_LMS_BDD = "chamilo"
MYSY_LMS_URL = "https://reclms.mysy-training.com/" MYSY_LMS_URL = "http://localhost/mysylms/lmsdev/"
MYSY_LMS_BASE_DIRECTORY = "/var/www/html/chamilo_mysy_rec/" MYSY_LMS_BASE_DIRECTORY = "/var/www/html/chamilo_mysy/"
LMS_BAS_URL = "rec.mysy-training.fr/" LMS_BAS_URL = "mysy-training.fr/"
"""
elif (MYSY_ENV == "DEV"):
MYSY_MARIADB_USER = "mysy_mariadb_user"
MYSY_MARIADB_USER_PASS = "fB5z%M)GG&g!n2c"
MYSY_MARIADB_HOST = "192.168.1.21"
#MYSY_MARIADB_HOST = "88.170.110.220"
MYSY_MARIADB_PORT = 3306
MYSY_LMS_BDD = "chamilo_dev2"
MYSY_LMS_URL = "https://lms.mysy-training.com/"
MYSY_LMS_BASE_DIRECTORY = "/var/www/html/chamilo_mysy/"
LMS_BAS_URL = "mysy-training.fr/"
"""
elif (MYSY_ENV == "DEV"):
MYSY_MARIADB_USER = "mysy_mariadb_user"
MYSY_MARIADB_USER_PASS = "fB5z%M)GG&g!n2c"
MYSY_MARIADB_HOST = "88.170.110.220"
MYSY_MARIADB_PORT = 3306
MYSY_LMS_BDD = "chamilo_dev2"
MYSY_LMS_URL = "https://lms.mysy-training.com/"
MYSY_LMS_BASE_DIRECTORY = "/var/www/html/chamilo_mysy/"
LMS_BAS_URL = "mysy-training.fr/"
elif (MYSY_ENV == "REC"): elif (MYSY_ENV == "REC"):
@ -350,7 +358,7 @@ elif (MYSY_ENV == "REC"):
MYSY_LMS_BDD = "mysy_db_chamilo_rec" MYSY_LMS_BDD = "mysy_db_chamilo_rec"
MYSY_LMS_URL = "https://reclms.mysy-training.com/" MYSY_LMS_URL = "https://reclms.mysy-training.com/"
MYSY_LMS_BASE_DIRECTORY = "/var/www/html/chamilo_mysy_rec/" MYSY_LMS_BASE_DIRECTORY = "/var/www/html/chamilo_mysy_rec/"
LMS_BAS_URL = "rec.mysy-training.fr/" LMS_BAS_URL = "mysy-hosting.fr/"

File diff suppressed because one or more lines are too long

View File

@ -1940,6 +1940,117 @@ def ManualSendInvoiceEmailRIB(diction):
return False, " impossible d'envoyer la facure" return False, " impossible d'envoyer la facure"
"""
Creation manuelle d'une facture avec RIB pour Port Cities
"""
def ManualSendInvoiceEmailRIB_PortCities(diction):
try:
'''
Verification des données obligatoires
'''
'''
Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente,
On controle que les champs obligatoires sont presents dans la liste
'''
tomorrow = datetime.date.today() + datetime.timedelta(days=1)
tomorrow_day = tomorrow.strftime("%A")
print("debut envoi mail de test ")
# on rentre les renseignements pris sur le site du fournisseur
#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_Invoice_RIB_PortCities_tpl.html"
template = templateEnv.get_template(TEMPLATE_FILE)
body = {
"params": {"order_id": "ST-230405001",
"date_order": ": 11/04/2023",
"total_ht": "7 750",
"tva": "1 550",
"total_ttc": "9 300",
"client_name": "Freelance Informatique",
"client_address": "34 rue Laffitte",
"client_zip_ville": "75009 Paris",
"client_pays": "France",
"packs": "Chef de projet Odoo - Sur site",
"detail_packs": "Avignon - Siège CAPL ",
"qty": "6 jrs",
"unit_price": "750 €",
"montant": "4 500 €",
"packs2": "Chef de projet Odoo - A distance",
"detail_packs2": "Roissy en brie - Siège MTT ",
"qty2": "5 jrs",
"unit_price2": "650 €",
"montant2": "3 200 €",
"invoice_id": "FACT_230500030",
"invoice_date": "01/05/2023",
"due_date": "01/05/2022",
"orign_order": "Contrat ST-230405001",
}
}
#print(" ### body 1 = ", body)
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] : Votre facture N° FACT_230500030"
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))
### CREATION DE LA FACTION PDF
templateLoader = jinja2.FileSystemLoader(searchpath="./")
templateEnv = jinja2.Environment(loader=templateLoader)
#TEMPLATE_FILE = "Template/MySy_Invoice_RIB_tpl.html"
TEMPLATE_FILE = "Template/invoice_RIB_PortCities_tpl.html"
template = templateEnv.get_template(TEMPLATE_FILE)
# This data can come from database query
#print(" ### body 22 = ", body)
sourceHtml = template.render(json_data=body["params"])
orig_file_name = "invoice_FACT_230400030.pdf"
outputFilename = str(MYSY_GV.INVOICE_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()
return True, " facture envoyée"
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
print(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, " impossible d'envoyer la facure"
""" """
Cette fonction envoie un email pour notifier a un partenaire l'arrete d'un abonnement Cette fonction envoie un email pour notifier a un partenaire l'arrete d'un abonnement
""" """

View File

@ -28,6 +28,33 @@ import bcrypt
from pymongo import ReturnDocument from pymongo import ReturnDocument
import paramiko import paramiko
"""
Test connexion SQL sur localhost Phpmyadmin
"""
def test_connexion_php_myadmin():
try:
conn = mariadb.connect(
user=MYSY_GV.MYSY_MARIADB_USER,
password=MYSY_GV.MYSY_MARIADB_USER_PASS,
host=MYSY_GV.MYSY_MARIADB_HOST,
port=MYSY_GV.MYSY_MARIADB_PORT,
database=MYSY_GV.MYSY_LMS_BDD
)
cur = conn.cursor()
conn.close()
return True, " Connexion 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, " Impossible de se connecter"
""" """
Cette fonction créer un utilisateur (editeur de formation) lms mysy, donc dans chamilo Cette fonction créer un utilisateur (editeur de formation) lms mysy, donc dans chamilo
""" """
@ -132,11 +159,18 @@ def Create_MySy_LMS_User(diction):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le nom du partenaire est vide ") mycommon.myprint(str(inspect.stack()[0][3]) + " - Le nom du partenaire est vide ")
return False, str(inspect.stack()[0][3]) + " - Le nom du partenaire est vide " return False, str(inspect.stack()[0][3]) + " - Le nom du partenaire est vide "
nom_partner = mycommon.remove_non_ascii( str(my_partner['nom']) )
nom_partner = mycommon.local_Remove_Ponct_Special_Caractere( nom_partner ) nom_partner = mycommon.remove_non_ascii(str(my_partner['nom']) )
local_status, nom_partner = mycommon.local_Remove_Ponct_Special_Caractere( nom_partner )
if (local_status is False ):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le nom du partenaire : local_Remove_Ponct_Special_Caractere ")
return False, str(inspect.stack()[0][3]) + " - Le nom du partenaire : local_Remove_Ponct_Special_Caractere "
suffix_nom_partner = str(nom_partner)[0:3] suffix_nom_partner = str(nom_partner)[0:3]
username = str(username)+"_"+str(suffix_nom_partner)
username = str(str(username)+"_"+str(suffix_nom_partner)).lower()
registration_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S") registration_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
@ -2176,7 +2210,7 @@ def LMS_Create_VirtualHost(diction):
print(" #### le prefixe d'url : '"+str(lms_prefixe_url)+"' N'EXISTE PAS. On va créer l'url") print(" #### le prefixe d'url : '"+str(lms_prefixe_url)+"' N'EXISTE PAS. On va créer l'url")
registration_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S") registration_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
full_url = str("http://"+str(lms_prefixe_url)+"."+str(MYSY_GV.LMS_BAS_URL)).lower() full_url = str("https://"+str(lms_prefixe_url)+"."+str(MYSY_GV.LMS_BAS_URL)).lower()
virtualHost_url = full_url virtualHost_url = full_url
my_query = " INSERT INTO access_url (url, description, active, created_by, tms, url_type) "\ my_query = " INSERT INTO access_url (url, description, active, created_by, tms, url_type) "\

32
main.py
View File

@ -2073,6 +2073,21 @@ def ManualSendInvoiceEmailRIB():
localStatus, message= emails.ManualSendInvoiceEmailRIB(payload) localStatus, message= emails.ManualSendInvoiceEmailRIB(payload)
return jsonify(status=localStatus, message=message ) return jsonify(status=localStatus, message=message )
"""
API d'envoi d'une facture manuelle avec RIB pour port cities
"""
@app.route('/myclass/api/ManualSendInvoiceEmailRIB_PortCities/', methods=['POST','GET'])
@crossdomain(origin='*')
def ManualSendInvoiceEmailRIB_PortCities():
# On recupere le corps (payload) de la requete
payload = request.form.to_dict()
print(" ### EmargementMail : payload = ",str(payload))
localStatus, message= emails.ManualSendInvoiceEmailRIB_PortCities(payload)
return jsonify(status=localStatus, message=message )
""" """
API de recuperation au formation CSV de la liste des inscrits à une formation API de recuperation au formation CSV de la liste des inscrits à une formation
avec les statuts (validé ou pas) avec les statuts (validé ou pas)
@ -2907,6 +2922,23 @@ def Lms_Add_BG_File():
localStatus, message = mysy_lms.Lms_Add_BG_File(f, app.config['UPLOAD_FOLDER'], payload) localStatus, message = mysy_lms.Lms_Add_BG_File(f, app.config['UPLOAD_FOLDER'], payload)
return jsonify(status=localStatus, message=message) return jsonify(status=localStatus, message=message)
"""
Test connexion localhost phpmyadmin
"""
@app.route('/myclass/api/test_connexion_php_myadmin/', methods=['POST','GET'])
@crossdomain(origin='*')
def test_connexion_php_myadmin():
# On recupere le corps (payload) de la requete
payload = request.form.to_dict()
print(" ### test_connexion_php_myadmin : payload = ",payload)
localStatus, message = mysy_lms.test_connexion_php_myadmin()
return jsonify(status=localStatus, message=message)
if __name__ == '__main__': if __name__ == '__main__':
print(" debut api") print(" debut api")
context = SSL.Context(SSL.SSLv23_METHOD) context = SSL.Context(SSL.SSLv23_METHOD)