se agrego el codigo del store procedure del query, ademas de la fecha de la forma automatica.

SyncUpdate2IONOS
Luis Rendon 1 year ago
parent a97df23785
commit 59e12276bd
  1. 182
      NotificacionCruce/VigenciaDoda.py
  2. 442
      NotificacionCruce/notificacionn.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"<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…
Cancel
Save