From 3a6c34f72374be07d345ca412e1a372bff873897 Mon Sep 17 00:00:00 2001 From: Luis Rendon Date: Tue, 19 Mar 2024 16:09:44 -0500 Subject: [PATCH] Se subio el codigo del desarollo de la notificacion en python de los Reportes automaticos Facturas Pagadas y segregados. --- .../ReporteMensualAmazon.py | 134 ++++++++++++++++++ RptSegregadosFacPagadas/config.json | 18 +++ SyncReferences2IONOS/SyncReferences2IONOS.py | 13 +- 3 files changed, 161 insertions(+), 4 deletions(-) create mode 100644 RptSegregadosFacPagadas/ReporteMensualAmazon.py create mode 100644 RptSegregadosFacPagadas/config.json diff --git a/RptSegregadosFacPagadas/ReporteMensualAmazon.py b/RptSegregadosFacPagadas/ReporteMensualAmazon.py new file mode 100644 index 0000000..da7595a --- /dev/null +++ b/RptSegregadosFacPagadas/ReporteMensualAmazon.py @@ -0,0 +1,134 @@ +import smtplib +from email.mime.multipart import MIMEMultipart +from email.mime.base import MIMEBase +from email.mime.text import MIMEText +from email import encoders +import pyodbc +import pandas as pd +import json +import datetime +import os +# Obtiene la ruta del directorio donde se encuentra el script +directorio_script = os.path.dirname(os.path.abspath(__file__)) + +# Establece el directorio de trabajo actual +os.chdir(directorio_script) + + +# Cargar la configuración del correo electrónico desde el archivo JSON +with open('config.json', 'r') as config_file: + config = json.load(config_file) + +smtp_server = config['EmailServer'] +smtp_port = config['EmailPort'] + +# Tus credenciales de correo electrónico desde el archivo JSON +sender_email = config['EmailUser'] +sender_password = config['EmailPassword'] + +# Obtener la fecha de inicio y fin del mes anterior +today = datetime.date.today() +first_day_of_month = today.replace(day=1) +last_day_of_previous_month = first_day_of_month - datetime.timedelta(days=1) +first_day_of_previous_month = last_day_of_previous_month.replace(day=1) + +# Convertir las fechas a formato de cadena YYYY-MM-DD +start_date = first_day_of_previous_month.strftime("%Y-%m-%d") +end_date = last_day_of_previous_month.strftime("%Y-%m-%d") + +# Obtener el nombre del mes que se está reportando en español +mes = last_day_of_previous_month.strftime("%B").capitalize() + +# Cargar la configuración de la base de datos desde el archivo JSON +with open('config.json', 'r') as config_file: + config = json.load(config_file) + +conn_str = ( + f"DRIVER=ODBC Driver 17 for SQL Server;" + f"SERVER={config['server']};" + f"DATABASE={config['database']};" + f"UID={config['username']};" + f"PWD={config['password']};" +) + +# Conectar a la base de datos +conn = pyodbc.connect(conn_str) + +try: + cursor = conn.cursor() + + # Ejecutar la consulta SQL para obtener los correos electrónicos de la tabla + cursor.execute("SELECT CorreoElectronico FROM [dbo].[Clientes.Amazon.Reporte.Notificaciones] Where Activo = 1 ") + rows = cursor.fetchall() + + # Obtener una lista de correos electrónicos + recipients = [row.CorreoElectronico for row in rows] + + # Ejecutar el primer procedimiento almacenado y guardar los resultados en un DataFrame + cursor.execute("{CALL [Reportes.Web.Clientes.Amazon.Segregacion.Get] (?, ?)}", (start_date, end_date)) + rows = cursor.fetchall() + df1 = pd.DataFrame([tuple(row) for row in rows], columns=[desc[0] for desc in cursor.description]) + + # Guardar el DataFrame en un archivo Excel con el mes en el nombre del archivo + excel_file_1 = f'ReporteMensualSegregacion_{mes}.xlsx' + df1.to_excel(excel_file_1, index=False) + + # Ejecutar el segundo procedimiento almacenado y guardar los resultados en otro DataFrame + cursor.execute("{CALL [Clientes.Amazon.Invoice.FacturasPagadas.Get] (?, ?)}", (start_date, end_date)) + rows = cursor.fetchall() + df2 = pd.DataFrame([tuple(row) for row in rows], columns=[desc[0] for desc in cursor.description]) + + # Guardar el segundo DataFrame en otro archivo Excel con el mes en el nombre del archivo + excel_file_2 = f'ReporteMensualFacturasPagadas_{mes}.xlsx' + df2.to_excel(excel_file_2, index=False) + + # Configurar el correo electrónico + msg = MIMEMultipart() + msg['From'] = sender_email + msg['To'] = ', '.join(recipients) # Lista de destinatarios separados por comas + msg['Subject'] = f'Reportes Mensuales GEMCO - {mes}' + # Agregar el cuerpo del mensaje + # body = """ Se anexan reportes mensual de segregados y reporte de factura pagadas correspodientes al mes inmediato anterior. + # En caso de dudas o aclaraciones conctactar a Viviana Jara: (vjara@gemcousa.com) o Susana Sánchez: (ssanchez@gemcousa.com) + + # Saludos. """ + + body ="""Se anexan reportes mensual de segregados y reporte de factura pagadas correspodientes al mes inmediato anterior. +En caso de dudas o aclaraciones conctactar a Viviana Jara:(vjara@gemcousa.com) o Susana Sánchez:(ssanchez@gemcousa.com) + +Saludos. """ + centered_body = body.strip().center(70) + msg.attach(MIMEText(body, 'plain')) + + # Adjuntar los archivos Excel al correo electrónico + for excel_file in [excel_file_1, excel_file_2]: + with open(excel_file, 'rb') as attachment: + part = MIMEBase('application', 'octet-stream') + part.set_payload(attachment.read()) + encoders.encode_base64(part) + part.add_header('Content-Disposition', f'attachment; filename= {excel_file}') + msg.attach(part) + + # Establecer la conexión al servidor SMTP + server = smtplib.SMTP(smtp_server, smtp_port) + server.starttls() + server.login(sender_email, sender_password) + + # Enviar el correo + server.sendmail(sender_email, recipients, msg.as_string()) + print("Reportes mensuales enviados exitosamente por correo electrónico.") + + # Eliminar los archivos Excel después de enviar el correo electrónico + for excel_file in [excel_file_1, excel_file_2]: + os.remove(excel_file) + +except Exception as e: + print(f"Error al enviar los reportes mensuales por correo: {e}") + +finally: + # Cerrar la conexión SMTP y la conexión con la base de datos + if 'server' in locals(): + server.quit() + conn.close() + + diff --git a/RptSegregadosFacPagadas/config.json b/RptSegregadosFacPagadas/config.json new file mode 100644 index 0000000..2bc7628 --- /dev/null +++ b/RptSegregadosFacPagadas/config.json @@ -0,0 +1,18 @@ +{ + "server": ".", + "database": "GEMCO", + "username": "sa", + "password": "Chispa10", + "EmailUser": "noreply@gemcousa.mx", + "EmailPassword": "Mx77lf%02", + "EmailServer": "smtp.ionos.com", + "EmailPort": 587, + "recipients": ["lrendon@gemcousa.com", "destinatario2@example.com", "destinatario3@example.com"] +} + + + + + + + \ No newline at end of file diff --git a/SyncReferences2IONOS/SyncReferences2IONOS.py b/SyncReferences2IONOS/SyncReferences2IONOS.py index fac9116..e2076f1 100644 --- a/SyncReferences2IONOS/SyncReferences2IONOS.py +++ b/SyncReferences2IONOS/SyncReferences2IONOS.py @@ -98,7 +98,7 @@ def CreateFolderContent(): INNER JOIN SIR.SIR.SIR_216_ARCHIVOS_PEDIMENTO A ON A.nIdArchM3216=Peds.nIdArchM3216 INNER JOIN SIR.SIR.SIR_217_PEDIMENTO_ARCHIVOM3 Rel on A.nIdArchM3216 = Rel.nIdArchM3216 INNER JOIN SIR.SIR.SIR_218_RESPUESTA_VALIDACION Res on Res.nIdArchM3216 = Rel.nIdArchM3216 AND Res.sDescripcion LIKE '%.err' - WHERE P.ClienteClave=2096 and p.[Pedimento FechaPago]>=CAST( GETDATE()-2 AS Date ) """) + WHERE P.ClienteClave=2096 and p.[Pedimento FechaPago]>=CAST( GETDATE()-3 AS Date) """) for row in cursor: referencia = row[0] archivoM = row[1] @@ -134,7 +134,7 @@ def CreateFolderContent(): # Procesar archivo if WriteToLog(referencia): processed_references.append(referencia) - URL = 'https://www.gemcousa.mx/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\ + URL = 'https://www.gemcousa.solutions/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\ archivoM+'&aduana='+aduana+'&patente='+patente + \ '&pedimento='+pedimento+'&fPago=' + \ str(fPago)+'&TipoCambio='+str(tipoCambio)+'&clave='+clave @@ -150,7 +150,7 @@ def CreateFolderContent(): 'clave': clave } print( f"la referencia {referencia} ya ha sido posteada." ) - r = requests.post(url=URL,files=multiple_files, verify=False, timeout=1000) + r = requests.post(url=URL,files=multiple_files, verify=False, timeout=300) except Exception as e: print("Error: %s" % e) # WriteToLog(r.text) @@ -161,6 +161,11 @@ CreateFolderContent() - #URL = 'https://www.gemcousa.mx/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\ + + + + + #URL = 'https://www.gemcousa.mx/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\ +# URL = 'http://localhost:5000/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\ # URL = 'http://localhost:5000/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\ # URL 'https://www.gemcousa.solutions/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\ \ No newline at end of file