You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PythonCode/Rpt1725Script/Scripts.py

107 lines
4.0 KiB

import os
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
FechaActual = datetime.date.today()
# FechaActual_str = input("Ingresa la fecha actual (YYYY-MM-DD): ")
# FechaActual = datetime.datetime.strptime(FechaActual_str, "%Y-%m-%d").date()
# 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])
# Convertir las fechas a formato de cadena (YYYY-MM-DD)
Inicio = PrimerDiaMesAnterior.strftime('%Y-%m-%d')
print(Inicio)
Fin = UltimoDiaMesAnterior.strftime('%Y-%m-%d')
print(Fin)
TipoOperacion = '2'
Cliente = '1725'
sql = "{CALL [dbo].[Reportes.Web.Clientes.Facturas.Cruzadas] (?, ?, ?, ?)}"
params = (Inicio, Fin, TipoOperacion, Cliente)
cursor.execute(sql, params)
# Obtener los resultados
Resultados = cursor.fetchall()
# Cerrar la conexión
cursor.close()
conn.close()
# Definir las columnas
columnas = ['Referencia', 'Pedimento', 'Clave', 'FechaFirmaBanco', 'TipoCambio', 'PesoBruto', 'PaisVendedor', 'PaisOrigen',
'NumFacturas', 'Factura', 'ValorFactura', 'Fraccion', 'Descripcion', 'nClave', 'CantFacturas', 'ValorAduana',
'Incrementables', 'Advalorem', 'DTA', 'IVA', 'Efectivo', 'Total', 'Destino', 'Cruce', 'Remite', 'Caja',
'ValorComercial', 'Incoterm']
# Modificar la estructura de los datos
DatosModificados = [list(item) for item in Resultados]
# Crear el DataFrame a partir de los datos
df = pd.DataFrame(DatosModificados, columns=columnas)
# Obtener la ruta de la carpeta de descargas del usuario
CarpetaDescargas = os.path.expanduser("~") + "\\Downloads\\"
# Definir el nombre del archivo
NombreArchivo = 'RptCliente1725InformeMensual.xlsx'
# Concatenar la ruta de la carpeta de descargas con el nombre del archivo
RutaArchivo = CarpetaDescargas + NombreArchivo
# Guardar el DataFrame en un archivo Excel en la carpeta de descargas
df.to_excel(RutaArchivo, index=False)
# Detalles del correo electrónico
remitente = 'noreply@gemcousa.mx'
destinatarios = ['agarcia@gemcousa', '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 enviado por correo electrónico.")