|
|
|
@ -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) |
|
|
|
|
|
|
|
|
|
print("El archivo se ha guardado en la carpeta de descargas.") |
|
|
|
|
# Cerrar la conexión |
|
|
|
|
conexion_smtp.quit() |
|
|
|
|
|
|
|
|
|
print("El archivo se ha enviado por correo electrónico.") |
|
|
|
|