diff --git a/RptFacturasCruzadas/ReporteMensualFacturasCruzadas.py b/RptFacturasCruzadas/ReporteMensualFacturasCruzadas.py new file mode 100644 index 0000000..51c94bd --- /dev/null +++ b/RptFacturasCruzadas/ReporteMensualFacturasCruzadas.py @@ -0,0 +1,161 @@ +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 las fechas de los últimos dos meses +today = datetime.date.today() +last_month = today.replace(day=1) - datetime.timedelta(days=1) +two_months_ago = last_month.replace(day=1) - datetime.timedelta(days=1) + +# Convertir las fechas a formato de cadena YYYY-MM-DD +start_date = two_months_ago.replace(day=1).strftime("%Y-%m-%d") +end_date = last_month.strftime("%Y-%m-%d") +cliente = 1725; +tipoOperacion = 2 + +# Obtener el nombre de los últimos dos meses en español +mes = last_month.strftime("%B").capitalize() +mes_anterior = two_months_ago.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 * from [Clientes.Reporte.Notificaciones] where Id = 1 or Id = 5 or TipoReporte = 'RptFacturasCruzadas' ") + 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.Facturas.Cruzadas] (?, ?, ?,?)}", (start_date, end_date, tipoOperacion, cliente)) + # cursor.execute("{CALL [Reportes.Web.Clientes.Factura.Pedimentos.Pagados.Get] (?,?,?,?)}", (start_date, end_date, tipoOperacion, cliente)) + 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'ReporteMensualFacturasCruzadas_{mes_anterior}_{mes}.xlsx' + df1.to_excel(excel_file_1, 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_anterior} - {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 reporte mensual de Facturas Cruzadas correspodientes a los 2 meses inmediatos anteriores ({mes_anterior} and {mes}). +En caso de dudas o aclaraciones conctactar a : (jguel@gemcousa.com) + +Saludos. """.format(mes=mes, mes_anterior=mes_anterior) + 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]: + 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 mensual enviado exitosamente por correo electrónico.") + + # Eliminar los archivos Excel después de enviar el correo electrónico + for excel_file in [excel_file_1]: + 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() + +# Credenciales producion + #{ +# "server": "100.10.10.1", +# "database": "GEMCO", +# "username": "admin", +# "password": "DBAdmin1234$.", +# "EmailUser": "noreply@gemcousa.mx", +# "EmailPassword": "Mx77lf%02", +# "EmailServer": "smtp.ionos.com", +# "EmailPort": 587, +# "recipients": ["lrendon@gemcousa.com", "destinatario2@example.com", "destinatario3@example.com"] +# } + + +# { credenciales maquina local +# "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"] +# } + + + + + + + + diff --git a/RptFacturasCruzadas/config.json b/RptFacturasCruzadas/config.json new file mode 100644 index 0000000..6c6e902 --- /dev/null +++ b/RptFacturasCruzadas/config.json @@ -0,0 +1,13 @@ + { + "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