From 59e12276bd8c394e4d4912595955d780d662e771 Mon Sep 17 00:00:00 2001 From: Luis Rendon Date: Wed, 13 Sep 2023 18:56:33 -0500 Subject: [PATCH] se agrego el codigo del store procedure del query, ademas de la fecha de la forma automatica. --- NotificacionCruce/VigenciaDoda.py | 182 ++++++++++++ NotificacionCruce/notificacionn.py | 442 ----------------------------- 2 files changed, 182 insertions(+), 442 deletions(-) create mode 100644 NotificacionCruce/VigenciaDoda.py delete mode 100644 NotificacionCruce/notificacionn.py diff --git a/NotificacionCruce/VigenciaDoda.py b/NotificacionCruce/VigenciaDoda.py new file mode 100644 index 0000000..5fe6ae5 --- /dev/null +++ b/NotificacionCruce/VigenciaDoda.py @@ -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"" + message += f"

Factura {invoice}

" + message += f"" + message += f"" + message += f"
Fecha ActualInvoiceCajaVigenciaDODANotificacion
{fechaActual}{invoice}{caja}{vigenciaDoda}{notificacion}

" + + + message += "" + 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 + + + + + + + + + + diff --git a/NotificacionCruce/notificacionn.py b/NotificacionCruce/notificacionn.py deleted file mode 100644 index 73903bb..0000000 --- a/NotificacionCruce/notificacionn.py +++ /dev/null @@ -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"" -# message += f"

Factura {invoice}

" -# message += f"" -# message += f"" -# message += f"
Fecha ActualInvoiceCajaVigenciaDODANotificacion
{fechaActual}{invoice}{caja}{vigenciaDoda}{notificacion}

" - -# # message += f"

CorreosResponsables:

" -# # message += "" - -# # message += f"

NotificacionAA:

" -# # message += "" - -# message += "" -# 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"" -# message += f"

Factura {invoice}

" -# message += f"" -# message += f"" -# message += f"
Fecha ActualInvoiceCajaVigenciaDODANotificacion
{fechaActual}{invoice}{caja}{vigenciaDoda}{notificacion}

" - -# message += f"

CorreosResponsables:

" -# message += "" - -# message += "" -# 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"" -# message_all_invoices += "

Información de todas las facturas

" - -# for invoice, rows in factura_data.items(): -# message_all_invoices += f"

Factura {invoice}

" -# message_all_invoices += "" - -# for row in rows: -# fechaActual = row.FechaActual -# caja = row.Caja -# vigenciaDoda = row.VigenciaDODA -# notificacion = row.Notificacion - -# message_all_invoices += f"" - -# message_all_invoices += "
Fecha ActualInvoiceCajaVigenciaDODANotificacion
{fechaActual}{invoice}{caja}{vigenciaDoda}{notificacion}

" - -# message_all_invoices += "" -# 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"" - message += f"

Factura {invoice}

" - message += f"" - message += f"" - message += f"
Fecha ActualInvoiceCajaVigenciaDODANotificacion
{fechaActual}{invoice}{caja}{vigenciaDoda}{notificacion}

" - - # # Agregar correos de CorreosResponsables, NotificacionAA y CorreosTipoViaje al mensaje - # message += "

CorreosResponsables:

" - # message += "" - - # message += f"

NotificacionAA:

" - # message += "" - - # message += f"

CorreosTipoViaje:

" - # message += "" - - message += "" - 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) - - - - - - - - - - - -