Compare commits
No commits in common. 'master' and 'SyncUpdate2IONOS' have entirely different histories.
@ -1,161 +0,0 @@ |
|||||||
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"] |
|
||||||
# } |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,13 +0,0 @@ |
|||||||
{ |
|
||||||
"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"] |
|
||||||
} |
|
||||||
|
|
||||||
|
|
@ -1,162 +0,0 @@ |
|||||||
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 * from [Clientes.Reporte.Notificaciones] where id = 1 or id = 5 OR TipoReporte = 'RptFacturasPagadas,RptSegregacion' ") |
|
||||||
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() |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 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"] |
|
||||||
# } |
|
@ -1,18 +0,0 @@ |
|||||||
{ |
|
||||||
"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"] |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in new issue