SyncUpdate2IONOS
parent
a97df23785
commit
59e12276bd
@ -0,0 +1,182 @@ |
|||||||
|
import smtplib |
||||||
|
from email.mime.multipart import MIMEMultipart |
||||||
|
from email.mime.text import MIMEText |
||||||
|
import pyodbc |
||||||
|
import json |
||||||
|
import datetime |
||||||
|
|
||||||
|
# Cargar la información de conexión desde el archivo JSON |
||||||
|
with open('config.json', 'r') as config_file: |
||||||
|
config = json.load(config_file) |
||||||
|
|
||||||
|
# Crear una cadena de conexión usando la información del archivo JSON en este momento esta la conexion a DB local |
||||||
|
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() |
||||||
|
# fecha = '2023-09-13' # Ejemplo de fecha |
||||||
|
fecha = datetime.date.today() |
||||||
|
cursor.execute("{CALL NotiVigenciaDoda(?)}", fecha) |
||||||
|
|
||||||
|
# Recuperar los resultados del procedimiento almacenado |
||||||
|
rows = cursor.fetchall() |
||||||
|
|
||||||
|
# Configurar el servidor de correo electrónico saliente (SMTP) desde el archivo JSON |
||||||
|
with open('config.json', 'r') as email_config_file: |
||||||
|
email_config = json.load(email_config_file) |
||||||
|
|
||||||
|
smtp_server = email_config['EmailServer'] |
||||||
|
smtp_port = email_config['EmailPort'] |
||||||
|
|
||||||
|
# Tus credenciales de correo electrónico desde el archivo JSON |
||||||
|
sender_email = email_config['EmailUser'] |
||||||
|
sender_password = email_config['EmailPassword'] |
||||||
|
|
||||||
|
factura_data = {} |
||||||
|
|
||||||
|
# Iterar a través de los resultados y agruparlos por factura |
||||||
|
for row in rows: |
||||||
|
invoice = row.Invoice |
||||||
|
if invoice not in factura_data: |
||||||
|
factura_data[invoice] = [] |
||||||
|
factura_data[invoice].append(row) |
||||||
|
|
||||||
|
# Crear un diccionario para almacenar los correos de CorreosResponsables, NotificacionAA y CorreosTipoViaje por factura |
||||||
|
correos_por_factura = {} |
||||||
|
|
||||||
|
# Iterar a través de los resultados y agrupar los correos por factura |
||||||
|
for row in rows: |
||||||
|
invoice = row.Invoice |
||||||
|
if invoice not in correos_por_factura: |
||||||
|
correos_por_factura[invoice] = {'CorreosResponsables': [], 'NotificacionAA': [], 'CorreoTipoViaje': []} |
||||||
|
|
||||||
|
correos_responsables = row.CorreosResponsables.split(',') if row.CorreosResponsables else [] |
||||||
|
notificacion_aa = row.NotificacionAA.split(',') if row.NotificacionAA else [] |
||||||
|
correos_tipo_viaje = row.CorreoTipoViaje.split(',') if row.CorreoTipoViaje else [] |
||||||
|
|
||||||
|
correos_por_factura[invoice]['CorreosResponsables'].extend(correos_responsables) |
||||||
|
correos_por_factura[invoice]['NotificacionAA'].extend(notificacion_aa) |
||||||
|
correos_por_factura[invoice]['CorreoTipoViaje'].extend(correos_tipo_viaje) |
||||||
|
|
||||||
|
# Iterar a través de las facturas y enviar correos |
||||||
|
for invoice, correos_en_factura in correos_por_factura.items(): |
||||||
|
correos_responsables = correos_en_factura['CorreosResponsables'] |
||||||
|
notificacion_aa = correos_en_factura['NotificacionAA'] |
||||||
|
correos_tipo_viaje = correos_en_factura['CorreoTipoViaje'] |
||||||
|
|
||||||
|
# Obtener los datos comunes para la factura (fecha, invoice, caja, vigenciaDoda, notificacion) |
||||||
|
first_row = factura_data[invoice][0] |
||||||
|
fechaActual = first_row.FechaActual |
||||||
|
caja = first_row.Caja |
||||||
|
vigenciaDoda = first_row.VigenciaDODA |
||||||
|
notificacion = first_row.Notificacion |
||||||
|
|
||||||
|
# Crear el mensaje de correo electrónico |
||||||
|
msg = MIMEMultipart() |
||||||
|
msg['From'] = sender_email |
||||||
|
msg['Subject'] = f"Información de factura {invoice}" |
||||||
|
|
||||||
|
# Crear el cuerpo del mensaje con los datos de la factura en una tabla |
||||||
|
message = f"<html><body>" |
||||||
|
message += f"<h2>Factura {invoice}</h2>" |
||||||
|
message += f"<table border='1'><tr><th>Fecha Actual</th><th>Invoice</th><th>Caja</th><th>VigenciaDODA</th><th>Notificacion</th></tr>" |
||||||
|
message += f"<tr><td>{fechaActual}</td><td>{invoice}</td><td>{caja}</td><td>{vigenciaDoda}</td><td>{notificacion}</td></tr>" |
||||||
|
message += f"</table><br>" |
||||||
|
|
||||||
|
|
||||||
|
message += "</body></html>" |
||||||
|
msg.attach(MIMEText(message, 'html')) |
||||||
|
|
||||||
|
try: |
||||||
|
# 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 a todos los destinatarios de CorreosResponsables, NotificacionAA y CorreosTipoViaje |
||||||
|
destinatarios = correos_responsables + notificacion_aa + correos_tipo_viaje |
||||||
|
server.sendmail(sender_email, destinatarios, msg.as_string()) |
||||||
|
print(f"Correo enviado a CorreosResponsables, NotificacionAA y CorreosTipoViaje de factura {invoice}") |
||||||
|
|
||||||
|
# Cerrar la conexión SMTP |
||||||
|
server.quit() |
||||||
|
except Exception as e: |
||||||
|
print(f"Error al enviar correo de factura {invoice}: {e}") |
||||||
|
|
||||||
|
except Exception as e: |
||||||
|
print("Error al conectarse:", e) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Procedimiento almacenado de sql server. |
||||||
|
|
||||||
|
|
||||||
|
# Create procedure [dbo].[NotiVigenciaDoda] |
||||||
|
# ( |
||||||
|
# @Fecha Date |
||||||
|
# ) |
||||||
|
# as |
||||||
|
# begin |
||||||
|
|
||||||
|
|
||||||
|
# SELECT |
||||||
|
# @Fecha AS FechaActual, |
||||||
|
# f.[Invoice], |
||||||
|
# f.[Ruta] AS Caja, |
||||||
|
# f.[VigenciaDODA], |
||||||
|
# -- f.[TipoViaje], |
||||||
|
# CorreosResponsables, |
||||||
|
# ce.NotificacionAA, |
||||||
|
|
||||||
|
# CASE |
||||||
|
# WHEN DATEDIFF(DAY, @Fecha, f.[VigenciaDODA]) = 1 THEN 'Vigencia Documentos 1 Dia.' |
||||||
|
# WHEN DATEDIFF(DAY, @Fecha, f.[VigenciaDODA]) = 0 THEN 'Vigencia Documentos 0 Dias.' |
||||||
|
# WHEN @Fecha > f.VigenciaDODA THEN 'Documentos Vencidos' |
||||||
|
# END AS Notificacion, |
||||||
|
|
||||||
|
# (SELECT |
||||||
|
# CASE |
||||||
|
# WHEN f.[TipoViaje] = 1 THEN ce.NotificacionZINCDirectos |
||||||
|
# WHEN f.[TipoViaje] = 2 THEN ce.NotificacionZINCTransbordos |
||||||
|
# ELSE NULL |
||||||
|
# END |
||||||
|
# ) AS CorreoTipoViaje |
||||||
|
|
||||||
|
# FROM dbo.Facturas f |
||||||
|
# LEFT JOIN dbo.CatResponsables cr ON f.ResponsableCruce = cr.Responsable |
||||||
|
# CROSS JOIN [Config.Emails] ce |
||||||
|
# OUTER APPLY ( |
||||||
|
# SELECT STRING_AGG(cc.Correo, ', ') AS CorreosResponsables |
||||||
|
# FROM dbo.[CatResponsables.Correos] cc |
||||||
|
# WHERE cr.id = cc.IdResponsable |
||||||
|
# ) CorreosSubquery |
||||||
|
# WHERE ( |
||||||
|
# DATEDIFF(DAY, @Fecha, f.[VigenciaDODA]) = 1 |
||||||
|
# OR DATEDIFF(DAY, @Fecha, f.[VigenciaDODA]) = 0 |
||||||
|
# OR @Fecha > f.VigenciaDODA ) |
||||||
|
# AND f.Activo = 1 |
||||||
|
# GROUP BY f.[Invoice], f.[Ruta], f.[VigenciaDODA] , f.[TipoViaje] , ce.NotificacionZINCDirectos , ce.NotificacionZINCTransbordos, ce.NotificacionAA, CorreosResponsables |
||||||
|
|
||||||
|
# ORDER BY VigenciaDODA; |
||||||
|
|
||||||
|
# end |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,442 +0,0 @@ |
|||||||
|
|
||||||
# import smtplib |
|
||||||
# from email.mime.multipart import MIMEMultipart |
|
||||||
# from email.mime.text import MIMEText |
|
||||||
# import pyodbc |
|
||||||
# import json |
|
||||||
# import datetime |
|
||||||
|
|
||||||
# # Cargar la información de conexión desde el archivo JSON |
|
||||||
# with open('config.json', 'r') as config_file: |
|
||||||
# config = json.load(config_file) |
|
||||||
|
|
||||||
# # Crear una cadena de conexión usando la información del archivo JSON |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 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() |
|
||||||
# fecha = '2023-09-11' # Ejemplo de fecha |
|
||||||
# # fecha = datetime.date.today() |
|
||||||
# cursor.execute("{CALL NotificacionCruze(?)}", fecha) |
|
||||||
|
|
||||||
# # Recuperar los resultados del procedimiento almacenado |
|
||||||
# rows = cursor.fetchall() |
|
||||||
|
|
||||||
# # Configurar el servidor de correo electrónico saliente (SMTP) desde el archivo JSON |
|
||||||
# with open('config.json', 'r') as email_config_file: |
|
||||||
# email_config = json.load(email_config_file) |
|
||||||
|
|
||||||
# smtp_server = email_config['EmailServer'] |
|
||||||
# smtp_port = email_config['EmailPort'] |
|
||||||
|
|
||||||
# # Tus credenciales de correo electrónico desde el archivo JSON |
|
||||||
# sender_email = email_config['EmailUser'] |
|
||||||
# sender_password = email_config['EmailPassword'] |
|
||||||
|
|
||||||
# factura_data = {} |
|
||||||
|
|
||||||
# # Iterar a través de los resultados y agruparlos por factura |
|
||||||
# for row in rows: |
|
||||||
# invoice = row.Invoice |
|
||||||
# if invoice not in factura_data: |
|
||||||
# factura_data[invoice] = [] |
|
||||||
# factura_data[invoice].append(row) |
|
||||||
|
|
||||||
# # Crear un diccionario para almacenar los correos de CorreosResponsables y NotificacionAA por factura |
|
||||||
# correos_por_factura = {} |
|
||||||
|
|
||||||
# # Iterar a través de los resultados y agrupar los correos por factura |
|
||||||
# for row in rows: |
|
||||||
# invoice = row.Invoice |
|
||||||
# if invoice not in correos_por_factura: |
|
||||||
# correos_por_factura[invoice] = {'CorreosResponsables': [], 'NotificacionAA': []} |
|
||||||
|
|
||||||
# correos_responsables = row.CorreosResponsables.split(',') if row.CorreosResponsables else [] |
|
||||||
# notificacion_aa = row.NotificacionAA.split(',') if row.NotificacionAA else [] |
|
||||||
|
|
||||||
# correos_por_factura[invoice]['CorreosResponsables'].extend(correos_responsables) |
|
||||||
# correos_por_factura[invoice]['NotificacionAA'].extend(notificacion_aa) |
|
||||||
|
|
||||||
# # Iterar a través de las facturas y enviar correos |
|
||||||
# for invoice, correos_en_factura in correos_por_factura.items(): |
|
||||||
# correos_responsables = correos_en_factura['CorreosResponsables'] |
|
||||||
# notificacion_aa = correos_en_factura['NotificacionAA'] |
|
||||||
|
|
||||||
# # Obtener los datos comunes para la factura (fecha, invoice, caja, vigenciaDoda, notificacion) |
|
||||||
# first_row = factura_data[invoice][0] |
|
||||||
# fechaActual = first_row.FechaActual |
|
||||||
# caja = first_row.Caja |
|
||||||
# vigenciaDoda = first_row.VigenciaDODA |
|
||||||
# notificacion = first_row.Notificacion |
|
||||||
|
|
||||||
# # Crear el mensaje de correo electrónico |
|
||||||
# msg = MIMEMultipart() |
|
||||||
# msg['From'] = sender_email |
|
||||||
# msg['Subject'] = f"Información de factura {invoice}" |
|
||||||
|
|
||||||
# # Crear el cuerpo del mensaje con los datos de la factura en una tabla |
|
||||||
# message = f"<html><body>" |
|
||||||
# message += f"<h2>Factura {invoice}</h2>" |
|
||||||
# message += f"<table border='1'><tr><th>Fecha Actual</th><th>Invoice</th><th>Caja</th><th>VigenciaDODA</th><th>Notificacion</th></tr>" |
|
||||||
# message += f"<tr><td>{fechaActual}</td><td>{invoice}</td><td>{caja}</td><td>{vigenciaDoda}</td><td>{notificacion}</td></tr>" |
|
||||||
# message += f"</table><br>" |
|
||||||
|
|
||||||
# # message += f"<h3>CorreosResponsables:</h3>" |
|
||||||
# # message += "<ul>" |
|
||||||
# # for destinatario in correos_responsables: |
|
||||||
# # message += f"<li>{destinatario}</li>" |
|
||||||
# # message += "</ul>" |
|
||||||
|
|
||||||
# # message += f"<h3>NotificacionAA:</h3>" |
|
||||||
# # message += "<ul>" |
|
||||||
# # for destinatario in notificacion_aa: |
|
||||||
# # message += f"<li>{destinatario}</li>" |
|
||||||
# # message += "</ul>" |
|
||||||
|
|
||||||
# message += "</body></html>" |
|
||||||
# msg.attach(MIMEText(message, 'html')) |
|
||||||
|
|
||||||
# try: |
|
||||||
# # 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 a todos los destinatarios de CorreosResponsables y NotificacionAA |
|
||||||
# destinatarios = correos_responsables + notificacion_aa |
|
||||||
# server.sendmail(sender_email, destinatarios, msg.as_string()) |
|
||||||
# print(f"Correo enviado a CorreosResponsables y NotificacionAA de factura {invoice}") |
|
||||||
|
|
||||||
# # Cerrar la conexión SMTP |
|
||||||
# server.quit() |
|
||||||
# except Exception as e: |
|
||||||
# print(f"Error al enviar correo de factura {invoice}: {e}") |
|
||||||
|
|
||||||
# except Exception as e: |
|
||||||
# print("Error al conectarse:", e) |
|
||||||
|
|
||||||
|
|
||||||
# Codigo doode se mejora el envio de las notificaciones AA en ves de una por una un resumen de las Facturas Mejora a futuro. |
|
||||||
|
|
||||||
# import smtplib |
|
||||||
# from email.mime.multipart import MIMEMultipart |
|
||||||
# from email.mime.text import MIMEText |
|
||||||
# import pyodbc |
|
||||||
# import json |
|
||||||
|
|
||||||
# # Cargar la información de conexión desde el archivo JSON |
|
||||||
# with open('config.json', 'r') as config_file: |
|
||||||
# config = json.load(config_file) |
|
||||||
|
|
||||||
# # Crear una cadena de conexión usando la información del archivo JSON |
|
||||||
# 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() |
|
||||||
# fecha = '2023-09-05' # Ejemplo de fecha |
|
||||||
# fecha = datetime.date.today() |
|
||||||
# cursor.execute("{CALL NotificacionCruze(?)}", fecha) |
|
||||||
|
|
||||||
# # Recuperar los resultados del procedimiento almacenado |
|
||||||
# rows = cursor.fetchall() |
|
||||||
|
|
||||||
# # Configurar el servidor de correo electrónico saliente (SMTP) desde el archivo JSON |
|
||||||
# with open('config.json', 'r') as email_config_file: |
|
||||||
# email_config = json.load(email_config_file) |
|
||||||
|
|
||||||
# smtp_server = email_config['EmailServer'] |
|
||||||
# smtp_port = email_config['EmailPort'] |
|
||||||
|
|
||||||
# # Tus credenciales de correo electrónico desde el archivo JSON |
|
||||||
# sender_email = email_config['EmailUser'] |
|
||||||
# sender_password = email_config['EmailPassword'] |
|
||||||
|
|
||||||
# # Crear un diccionario para almacenar la información de todas las facturas |
|
||||||
# factura_data = {} |
|
||||||
|
|
||||||
# # Crear un diccionario para almacenar los correos de CorreosResponsables por factura |
|
||||||
# correos_por_factura = {} |
|
||||||
|
|
||||||
# # Agrupar la información de todas las facturas y correos de CorreosResponsables |
|
||||||
# for row in rows: |
|
||||||
# invoice = row.Invoice |
|
||||||
|
|
||||||
# # Agregar la información de la factura |
|
||||||
# if invoice not in factura_data: |
|
||||||
# factura_data[invoice] = [] |
|
||||||
|
|
||||||
# factura_data[invoice].append(row) |
|
||||||
|
|
||||||
# # Agregar los correos de CorreosResponsables |
|
||||||
# correos_responsables = row.CorreosResponsables.split(',') if row.CorreosResponsables else [] |
|
||||||
|
|
||||||
# if invoice not in correos_por_factura: |
|
||||||
# correos_por_factura[invoice] = [] |
|
||||||
|
|
||||||
# correos_por_factura[invoice].extend(correos_responsables) |
|
||||||
|
|
||||||
# # Iterar a través de las facturas y enviar correos a CorreosResponsables |
|
||||||
# for invoice, correos_responsables in correos_por_factura.items(): |
|
||||||
# # Obtener la información común para la factura |
|
||||||
# first_row = factura_data[invoice][0] |
|
||||||
# fechaActual = first_row.FechaActual |
|
||||||
# caja = first_row.Caja |
|
||||||
# vigenciaDoda = first_row.VigenciaDODA |
|
||||||
# notificacion = first_row.Notificacion |
|
||||||
|
|
||||||
# # Crear el mensaje de correo electrónico |
|
||||||
# msg = MIMEMultipart() |
|
||||||
# msg['From'] = sender_email |
|
||||||
# msg['Subject'] = f"Información de factura {invoice}" |
|
||||||
|
|
||||||
# # Crear el cuerpo del mensaje con los datos de la factura en una tabla |
|
||||||
# message = f"<html><body>" |
|
||||||
# message += f"<h2>Factura {invoice}</h2>" |
|
||||||
# message += f"<table border='1'><tr><th>Fecha Actual</th><th>Invoice</th><th>Caja</th><th>VigenciaDODA</th><th>Notificacion</th></tr>" |
|
||||||
# message += f"<tr><td>{fechaActual}</td><td>{invoice}</td><td>{caja}</td><td>{vigenciaDoda}</td><td>{notificacion}</td></tr>" |
|
||||||
# message += f"</table><br>" |
|
||||||
|
|
||||||
# message += f"<h3>CorreosResponsables:</h3>" |
|
||||||
# message += "<ul>" |
|
||||||
# for destinatario in correos_responsables: |
|
||||||
# message += f"<li>{destinatario}</li>" |
|
||||||
# message += "</ul>" |
|
||||||
|
|
||||||
# message += "</body></html>" |
|
||||||
# msg.attach(MIMEText(message, 'html')) |
|
||||||
|
|
||||||
# try: |
|
||||||
# # 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 a los destinatarios de CorreosResponsables |
|
||||||
# server.sendmail(sender_email, correos_responsables, msg.as_string()) |
|
||||||
# print(f"Correo enviado a CorreosResponsables de factura {invoice}") |
|
||||||
|
|
||||||
# # Cerrar la conexión SMTP |
|
||||||
# server.quit() |
|
||||||
# except Exception as e: |
|
||||||
# print(f"Error al enviar correo de factura {invoice}: {e}") |
|
||||||
|
|
||||||
# # Obtener todos los destinatarios de NotificacionAA |
|
||||||
# destinatarios_notificacion_aa = [] |
|
||||||
|
|
||||||
# for row in rows: |
|
||||||
# notificacion_aa = row.NotificacionAA.split(',') if row.NotificacionAA else [] |
|
||||||
# destinatarios_notificacion_aa.extend(notificacion_aa) |
|
||||||
|
|
||||||
# # Crear un mensaje único con la información de todas las facturas |
|
||||||
# msg_all_invoices = MIMEMultipart() |
|
||||||
# msg_all_invoices['From'] = sender_email |
|
||||||
# msg_all_invoices['Subject'] = "Información de todas las facturas" |
|
||||||
|
|
||||||
# # Crear el cuerpo del mensaje con la información de todas las facturas en una tabla |
|
||||||
# message_all_invoices = f"<html><body>" |
|
||||||
# message_all_invoices += "<h2>Información de todas las facturas</h2>" |
|
||||||
|
|
||||||
# for invoice, rows in factura_data.items(): |
|
||||||
# message_all_invoices += f"<h3>Factura {invoice}</h3>" |
|
||||||
# message_all_invoices += "<table border='1'><tr><th>Fecha Actual</th><th>Invoice</th><th>Caja</th><th>VigenciaDODA</th><th>Notificacion</th></tr>" |
|
||||||
|
|
||||||
# for row in rows: |
|
||||||
# fechaActual = row.FechaActual |
|
||||||
# caja = row.Caja |
|
||||||
# vigenciaDoda = row.VigenciaDODA |
|
||||||
# notificacion = row.Notificacion |
|
||||||
|
|
||||||
# message_all_invoices += f"<tr><td>{fechaActual}</td><td>{invoice}</td><td>{caja}</td><td>{vigenciaDoda}</td><td>{notificacion}</td></tr>" |
|
||||||
|
|
||||||
# message_all_invoices += "</table><br>" |
|
||||||
|
|
||||||
# message_all_invoices += "</body></html>" |
|
||||||
# msg_all_invoices.attach(MIMEText(message_all_invoices, 'html')) |
|
||||||
|
|
||||||
# try: |
|
||||||
# # 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 a todos los destinatarios de NotificacionAA |
|
||||||
# server.sendmail(sender_email, destinatarios_notificacion_aa, msg_all_invoices.as_string()) |
|
||||||
# print("Correo enviado a todos los destinatarios de NotificacionAA con la información de las facturas") |
|
||||||
|
|
||||||
# # Cerrar la conexión SMTP |
|
||||||
# server.quit() |
|
||||||
# except Exception as e: |
|
||||||
# print(f"Error al enviar correo de factura {invoice}: {e}") |
|
||||||
|
|
||||||
|
|
||||||
# except Exception as e: |
|
||||||
# print("Error al conectarse:", e) |
|
||||||
|
|
||||||
#codigo de se le agrego correo tipos viaje . |
|
||||||
|
|
||||||
import smtplib |
|
||||||
from email.mime.multipart import MIMEMultipart |
|
||||||
from email.mime.text import MIMEText |
|
||||||
import pyodbc |
|
||||||
import json |
|
||||||
import datetime |
|
||||||
|
|
||||||
# Cargar la información de conexión desde el archivo JSON |
|
||||||
with open('config.json', 'r') as config_file: |
|
||||||
config = json.load(config_file) |
|
||||||
|
|
||||||
# Crear una cadena de conexión usando la información del archivo JSON |
|
||||||
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() |
|
||||||
fecha = '2023-09-13' # Ejemplo de fecha |
|
||||||
cursor.execute("{CALL NotificacionCruze(?)}", fecha) |
|
||||||
|
|
||||||
# Recuperar los resultados del procedimiento almacenado |
|
||||||
rows = cursor.fetchall() |
|
||||||
|
|
||||||
# Configurar el servidor de correo electrónico saliente (SMTP) desde el archivo JSON |
|
||||||
with open('config.json', 'r') as email_config_file: |
|
||||||
email_config = json.load(email_config_file) |
|
||||||
|
|
||||||
smtp_server = email_config['EmailServer'] |
|
||||||
smtp_port = email_config['EmailPort'] |
|
||||||
|
|
||||||
# Tus credenciales de correo electrónico desde el archivo JSON |
|
||||||
sender_email = email_config['EmailUser'] |
|
||||||
sender_password = email_config['EmailPassword'] |
|
||||||
|
|
||||||
factura_data = {} |
|
||||||
|
|
||||||
# Iterar a través de los resultados y agruparlos por factura |
|
||||||
for row in rows: |
|
||||||
invoice = row.Invoice |
|
||||||
if invoice not in factura_data: |
|
||||||
factura_data[invoice] = [] |
|
||||||
factura_data[invoice].append(row) |
|
||||||
|
|
||||||
# Crear un diccionario para almacenar los correos de CorreosResponsables, NotificacionAA y CorreosTipoViaje por factura |
|
||||||
correos_por_factura = {} |
|
||||||
|
|
||||||
# Iterar a través de los resultados y agrupar los correos por factura |
|
||||||
for row in rows: |
|
||||||
invoice = row.Invoice |
|
||||||
if invoice not in correos_por_factura: |
|
||||||
correos_por_factura[invoice] = {'CorreosResponsables': [], 'NotificacionAA': [], 'CorreoTipoViaje': []} |
|
||||||
|
|
||||||
correos_responsables = row.CorreosResponsables.split(',') if row.CorreosResponsables else [] |
|
||||||
notificacion_aa = row.NotificacionAA.split(',') if row.NotificacionAA else [] |
|
||||||
correos_tipo_viaje = row.CorreoTipoViaje.split(',') if row.CorreoTipoViaje else [] |
|
||||||
|
|
||||||
correos_por_factura[invoice]['CorreosResponsables'].extend(correos_responsables) |
|
||||||
correos_por_factura[invoice]['NotificacionAA'].extend(notificacion_aa) |
|
||||||
correos_por_factura[invoice]['CorreoTipoViaje'].extend(correos_tipo_viaje) |
|
||||||
|
|
||||||
# Iterar a través de las facturas y enviar correos |
|
||||||
for invoice, correos_en_factura in correos_por_factura.items(): |
|
||||||
correos_responsables = correos_en_factura['CorreosResponsables'] |
|
||||||
notificacion_aa = correos_en_factura['NotificacionAA'] |
|
||||||
correos_tipo_viaje = correos_en_factura['CorreoTipoViaje'] |
|
||||||
|
|
||||||
# Obtener los datos comunes para la factura (fecha, invoice, caja, vigenciaDoda, notificacion) |
|
||||||
first_row = factura_data[invoice][0] |
|
||||||
fechaActual = first_row.FechaActual |
|
||||||
caja = first_row.Caja |
|
||||||
vigenciaDoda = first_row.VigenciaDODA |
|
||||||
notificacion = first_row.Notificacion |
|
||||||
|
|
||||||
# Crear el mensaje de correo electrónico |
|
||||||
msg = MIMEMultipart() |
|
||||||
msg['From'] = sender_email |
|
||||||
msg['Subject'] = f"Información de factura {invoice}" |
|
||||||
|
|
||||||
# Crear el cuerpo del mensaje con los datos de la factura en una tabla |
|
||||||
message = f"<html><body>" |
|
||||||
message += f"<h2>Factura {invoice}</h2>" |
|
||||||
message += f"<table border='1'><tr><th>Fecha Actual</th><th>Invoice</th><th>Caja</th><th>VigenciaDODA</th><th>Notificacion</th></tr>" |
|
||||||
message += f"<tr><td>{fechaActual}</td><td>{invoice}</td><td>{caja}</td><td>{vigenciaDoda}</td><td>{notificacion}</td></tr>" |
|
||||||
message += f"</table><br>" |
|
||||||
|
|
||||||
# # Agregar correos de CorreosResponsables, NotificacionAA y CorreosTipoViaje al mensaje |
|
||||||
# message += "<h3>CorreosResponsables:</h3>" |
|
||||||
# message += "<ul>" |
|
||||||
# for destinatario in correos_responsables: |
|
||||||
# message += f"<li>{destinatario}</li>" |
|
||||||
# message += "</ul>" |
|
||||||
|
|
||||||
# message += f"<h3>NotificacionAA:</h3>" |
|
||||||
# message += "<ul>"s |
|
||||||
# for destinatario in notificacion_aa: |
|
||||||
# message += f"<li>{destinatario}</li>" |
|
||||||
# message += "</ul>" |
|
||||||
|
|
||||||
# message += f"<h3>CorreosTipoViaje:</h3>" |
|
||||||
# message += "<ul>" |
|
||||||
# for destinatario in correos_tipo_viaje: |
|
||||||
# message += f"<li>{destinatario}</li>" |
|
||||||
# message += "</ul>" |
|
||||||
|
|
||||||
message += "</body></html>" |
|
||||||
msg.attach(MIMEText(message, 'html')) |
|
||||||
|
|
||||||
try: |
|
||||||
# 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 a todos los destinatarios de CorreosResponsables, NotificacionAA y CorreosTipoViaje |
|
||||||
destinatarios = correos_responsables + notificacion_aa + correos_tipo_viaje |
|
||||||
server.sendmail(sender_email, destinatarios, msg.as_string()) |
|
||||||
print(f"Correo enviado a CorreosResponsables, NotificacionAA y CorreosTipoViaje de factura {invoice}") |
|
||||||
|
|
||||||
# Cerrar la conexión SMTP |
|
||||||
server.quit() |
|
||||||
except Exception as e: |
|
||||||
print(f"Error al enviar correo de factura {invoice}: {e}") |
|
||||||
|
|
||||||
except Exception as e: |
|
||||||
print("Error al conectarse:", e) |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in new issue