From 6bb1fe3b2b94e10571cb1a1a993275cacdf872c4 Mon Sep 17 00:00:00 2001 From: Luis Rendon Date: Fri, 30 Jun 2023 17:24:30 -0500 Subject: [PATCH] Rpt Clientes 1725 se le agrego enviar correo electronico --- Nscripts/Scripts.py | 107 ++++++++++++++++++++++++++++---------------- 1 file changed, 69 insertions(+), 38 deletions(-) diff --git a/Nscripts/Scripts.py b/Nscripts/Scripts.py index 559daf6..f435392 100644 --- a/Nscripts/Scripts.py +++ b/Nscripts/Scripts.py @@ -3,54 +3,52 @@ import pyodbc import pandas as pd import datetime import calendar - +import smtplib +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText +from email.mime.application import MIMEApplication # Establecer la conexión a la base de datos conn = pyodbc.connect('DRIVER={SQL Server};SERVER=.;DATABASE=GEMCO;') # Crear el cursor cursor = conn.cursor() -# # Obtener la fecha actual -# fecha_actual = datetime.date.today() -# print(fecha_actual) - -# Obtener la fecha actual ingresada por el usuario -fecha_actual_str = input("Ingresa la fecha actual (YYYY-MM-DD): ") -fecha_actual = datetime.datetime.strptime(fecha_actual_str, "%Y-%m-%d").date() +# Obtener la fecha actual +FechaActual = datetime.date.today() -# Calcular el primer día del mes anterior -primer_dia_mes_anterior = datetime.date(fecha_actual.year, fecha_actual.month - 1, 1) -print( primer_dia_mes_anterior) +# FechaActual_str = input("Ingresa la fecha actual (YYYY-MM-DD): ") +# FechaActual = datetime.datetime.strptime(FechaActual_str, "%Y-%m-%d").date() -# Calcular el último día del mes anterior -ultimo_dia_mes_anterior = primer_dia_mes_anterior.replace(day=calendar.monthrange(primer_dia_mes_anterior.year, primer_dia_mes_anterior.month)[1]) +# Calcular el primer día y el último día del mes anterior según la fecha actual +if FechaActual.month == 1: # Si es el primer día del año, obtener el mes anterior del año anterior + PrimerDiaMesAnterior = datetime.date(FechaActual.year - 1, 12, 1) + UltimoDiaMesAnterior = datetime.date(FechaActual.year - 1, 12, 31) +else: # Si no es el primer día del año, obtener el mes anterior del mismo año + PrimerDiaMesAnterior = datetime.date(FechaActual.year, FechaActual.month - 1, 1) + UltimoDiaMesAnterior = PrimerDiaMesAnterior.replace(day=calendar.monthrange(PrimerDiaMesAnterior.year, PrimerDiaMesAnterior.month)[1]) -print(ultimo_dia_mes_anterior) # Convertir las fechas a formato de cadena (YYYY-MM-DD) -inicio = primer_dia_mes_anterior.strftime('%Y-%m-%d') - -fin = ultimo_dia_mes_anterior.strftime('%Y-%m-%d') +Inicio = PrimerDiaMesAnterior.strftime('%Y-%m-%d') +print(Inicio) +Fin = UltimoDiaMesAnterior.strftime('%Y-%m-%d') +print(Fin) -tipo_operacion = '2' -cliente = '1725' -print(inicio + " Esta fue el parametro que se envio al inicio ") -print(fin + " Esta es el paremetro que se envio en fin ") +TipoOperacion = '2' +Cliente = '1725' sql = "{CALL [dbo].[Reportes.Web.Clientes.Facturas.Cruzadas] (?, ?, ?, ?)}" -params = (inicio, fin, tipo_operacion, cliente) +params = (Inicio, Fin, TipoOperacion, Cliente) cursor.execute(sql, params) # Obtener los resultados -resultados = cursor.fetchall() +Resultados = cursor.fetchall() # Cerrar la conexión cursor.close() conn.close() -# Resto del código... - # Definir las columnas columnas = ['Referencia', 'Pedimento', 'Clave', 'FechaFirmaBanco', 'TipoCambio', 'PesoBruto', 'PaisVendedor', 'PaisOrigen', 'NumFacturas', 'Factura', 'ValorFactura', 'Fraccion', 'Descripcion', 'nClave', 'CantFacturas', 'ValorAduana', @@ -58,22 +56,55 @@ columnas = ['Referencia', 'Pedimento', 'Clave', 'FechaFirmaBanco', 'TipoCambio', 'ValorComercial', 'Incoterm'] # Modificar la estructura de los datos -datos_modificados = [list(item) for item in resultados] - +DatosModificados = [list(item) for item in Resultados] # Crear el DataFrame a partir de los datos -df = pd.DataFrame(datos_modificados, columns=columnas) - +df = pd.DataFrame(DatosModificados, columns=columnas) # Obtener la ruta de la carpeta de descargas del usuario -carpeta_descargas = os.path.expanduser("~") + "\\Downloads\\" - +CarpetaDescargas = os.path.expanduser("~") + "\\Downloads\\" # Definir el nombre del archivo -nombre_archivo = 'RptCliente1725InformeMensual.xlsx' - +NombreArchivo = 'RptCliente1725InformeMensual.xlsx' # Concatenar la ruta de la carpeta de descargas con el nombre del archivo -ruta_archivo = carpeta_descargas + nombre_archivo - +RutaArchivo = CarpetaDescargas + NombreArchivo # Guardar el DataFrame en un archivo Excel en la carpeta de descargas -df.to_excel(ruta_archivo, index=False) +df.to_excel(RutaArchivo, index=False) + +# Detalles del correo electrónico +remitente = 'noreply@gemcousa.mx' +destinatarios = ['agarcia@gemcousa.com', 'lrendon@gemcousa.com' ] +asunto = 'Adjunto: Informe Mensual Cliente 1725' +cuerpo = 'Hola, adjunto encontrarás el informe mensual.' + +# Configurar los detalles del servidor de correo saliente +servidor_smtp = 'smtp.ionos.com' +puerto_smtp = 587 +usuario_smtp = 'noreply@gemcousa.mx' +contraseña_smtp = 'Mx77lf%02' + +# Crear el mensaje de correo electrónico +mensaje = MIMEMultipart() +mensaje['From'] = remitente +mensaje['To'] = ', '.join(destinatarios) +mensaje['Subject'] = asunto + +# Agregar el cuerpo del mensaje +mensaje.attach(MIMEText(cuerpo, 'plain')) + +# Adjuntar el archivo Excel al mensaje +with open(RutaArchivo, 'rb') as archivo: + parte_adjunta = MIMEApplication(archivo.read(), Name=os.path.basename(RutaArchivo)) + parte_adjunta['Content-Disposition'] = f'attachment; filename="{os.path.basename(RutaArchivo)}"' + mensaje.attach(parte_adjunta) + +# Establecer la conexión con el servidor de correo saliente +conexion_smtp = smtplib.SMTP(servidor_smtp, puerto_smtp) +conexion_smtp.starttls() +conexion_smtp.login(usuario_smtp, contraseña_smtp) + +# Enviar el mensaje +texto_mensaje = mensaje.as_string() +conexion_smtp.sendmail(remitente, destinatarios, texto_mensaje) + +# Cerrar la conexión +conexion_smtp.quit() -print("El archivo se ha guardado en la carpeta de descargas.") - \ No newline at end of file +print("El archivo se ha enviado por correo electrónico.")