Se subio el codigo del desarollo de la notificacion en python de los Reportes automaticos Facturas Pagadas y segregados.

master
Luis Rendon 6 months ago
parent 916181bc0b
commit 3a6c34f723
  1. 134
      RptSegregadosFacPagadas/ReporteMensualAmazon.py
  2. 18
      RptSegregadosFacPagadas/config.json
  3. 11
      SyncReferences2IONOS/SyncReferences2IONOS.py

@ -0,0 +1,134 @@
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import encoders
import pyodbc
import pandas as pd
import json
import datetime
import os
# Obtiene la ruta del directorio donde se encuentra el script
directorio_script = os.path.dirname(os.path.abspath(__file__))
# Establece el directorio de trabajo actual
os.chdir(directorio_script)
# Cargar la configuración del correo electrónico desde el archivo JSON
with open('config.json', 'r') as config_file:
config = json.load(config_file)
smtp_server = config['EmailServer']
smtp_port = config['EmailPort']
# Tus credenciales de correo electrónico desde el archivo JSON
sender_email = config['EmailUser']
sender_password = config['EmailPassword']
# Obtener la fecha de inicio y fin del mes anterior
today = datetime.date.today()
first_day_of_month = today.replace(day=1)
last_day_of_previous_month = first_day_of_month - datetime.timedelta(days=1)
first_day_of_previous_month = last_day_of_previous_month.replace(day=1)
# Convertir las fechas a formato de cadena YYYY-MM-DD
start_date = first_day_of_previous_month.strftime("%Y-%m-%d")
end_date = last_day_of_previous_month.strftime("%Y-%m-%d")
# Obtener el nombre del mes que se está reportando en español
mes = last_day_of_previous_month.strftime("%B").capitalize()
# Cargar la configuración de la base de datos desde el archivo JSON
with open('config.json', 'r') as config_file:
config = json.load(config_file)
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()
# Ejecutar la consulta SQL para obtener los correos electrónicos de la tabla
cursor.execute("SELECT CorreoElectronico FROM [dbo].[Clientes.Amazon.Reporte.Notificaciones] Where Activo = 1 ")
rows = cursor.fetchall()
# Obtener una lista de correos electrónicos
recipients = [row.CorreoElectronico for row in rows]
# Ejecutar el primer procedimiento almacenado y guardar los resultados en un DataFrame
cursor.execute("{CALL [Reportes.Web.Clientes.Amazon.Segregacion.Get] (?, ?)}", (start_date, end_date))
rows = cursor.fetchall()
df1 = pd.DataFrame([tuple(row) for row in rows], columns=[desc[0] for desc in cursor.description])
# Guardar el DataFrame en un archivo Excel con el mes en el nombre del archivo
excel_file_1 = f'ReporteMensualSegregacion_{mes}.xlsx'
df1.to_excel(excel_file_1, index=False)
# Ejecutar el segundo procedimiento almacenado y guardar los resultados en otro DataFrame
cursor.execute("{CALL [Clientes.Amazon.Invoice.FacturasPagadas.Get] (?, ?)}", (start_date, end_date))
rows = cursor.fetchall()
df2 = pd.DataFrame([tuple(row) for row in rows], columns=[desc[0] for desc in cursor.description])
# Guardar el segundo DataFrame en otro archivo Excel con el mes en el nombre del archivo
excel_file_2 = f'ReporteMensualFacturasPagadas_{mes}.xlsx'
df2.to_excel(excel_file_2, index=False)
# Configurar el correo electrónico
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = ', '.join(recipients) # Lista de destinatarios separados por comas
msg['Subject'] = f'Reportes Mensuales GEMCO - {mes}'
# Agregar el cuerpo del mensaje
# body = """ Se anexan reportes mensual de segregados y reporte de factura pagadas correspodientes al mes inmediato anterior.
# En caso de dudas o aclaraciones conctactar a Viviana Jara: (vjara@gemcousa.com) o Susana Sánchez: (ssanchez@gemcousa.com)
# Saludos. """
body ="""Se anexan reportes mensual de segregados y reporte de factura pagadas correspodientes al mes inmediato anterior.
En caso de dudas o aclaraciones conctactar a Viviana Jara:(vjara@gemcousa.com) o Susana Sánchez:(ssanchez@gemcousa.com)
Saludos. """
centered_body = body.strip().center(70)
msg.attach(MIMEText(body, 'plain'))
# Adjuntar los archivos Excel al correo electrónico
for excel_file in [excel_file_1, excel_file_2]:
with open(excel_file, 'rb') as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', f'attachment; filename= {excel_file}')
msg.attach(part)
# 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
server.sendmail(sender_email, recipients, msg.as_string())
print("Reportes mensuales enviados exitosamente por correo electrónico.")
# Eliminar los archivos Excel después de enviar el correo electrónico
for excel_file in [excel_file_1, excel_file_2]:
os.remove(excel_file)
except Exception as e:
print(f"Error al enviar los reportes mensuales por correo: {e}")
finally:
# Cerrar la conexión SMTP y la conexión con la base de datos
if 'server' in locals():
server.quit()
conn.close()

@ -0,0 +1,18 @@
{
"server": ".",
"database": "GEMCO",
"username": "sa",
"password": "Chispa10",
"EmailUser": "noreply@gemcousa.mx",
"EmailPassword": "Mx77lf%02",
"EmailServer": "smtp.ionos.com",
"EmailPort": 587,
"recipients": ["lrendon@gemcousa.com", "destinatario2@example.com", "destinatario3@example.com"]
}

@ -98,7 +98,7 @@ def CreateFolderContent():
INNER JOIN SIR.SIR.SIR_216_ARCHIVOS_PEDIMENTO A ON A.nIdArchM3216=Peds.nIdArchM3216 INNER JOIN SIR.SIR.SIR_216_ARCHIVOS_PEDIMENTO A ON A.nIdArchM3216=Peds.nIdArchM3216
INNER JOIN SIR.SIR.SIR_217_PEDIMENTO_ARCHIVOM3 Rel on A.nIdArchM3216 = Rel.nIdArchM3216 INNER JOIN SIR.SIR.SIR_217_PEDIMENTO_ARCHIVOM3 Rel on A.nIdArchM3216 = Rel.nIdArchM3216
INNER JOIN SIR.SIR.SIR_218_RESPUESTA_VALIDACION Res on Res.nIdArchM3216 = Rel.nIdArchM3216 AND Res.sDescripcion LIKE '%.err' INNER JOIN SIR.SIR.SIR_218_RESPUESTA_VALIDACION Res on Res.nIdArchM3216 = Rel.nIdArchM3216 AND Res.sDescripcion LIKE '%.err'
WHERE P.ClienteClave=2096 and p.[Pedimento FechaPago]>=CAST( GETDATE()-2 AS Date ) """) WHERE P.ClienteClave=2096 and p.[Pedimento FechaPago]>=CAST( GETDATE()-3 AS Date) """)
for row in cursor: for row in cursor:
referencia = row[0] referencia = row[0]
archivoM = row[1] archivoM = row[1]
@ -134,7 +134,7 @@ def CreateFolderContent():
# Procesar archivo # Procesar archivo
if WriteToLog(referencia): if WriteToLog(referencia):
processed_references.append(referencia) processed_references.append(referencia)
URL = 'https://www.gemcousa.mx/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\ URL = 'https://www.gemcousa.solutions/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\
archivoM+'&aduana='+aduana+'&patente='+patente + \ archivoM+'&aduana='+aduana+'&patente='+patente + \
'&pedimento='+pedimento+'&fPago=' + \ '&pedimento='+pedimento+'&fPago=' + \
str(fPago)+'&TipoCambio='+str(tipoCambio)+'&clave='+clave str(fPago)+'&TipoCambio='+str(tipoCambio)+'&clave='+clave
@ -150,7 +150,7 @@ def CreateFolderContent():
'clave': clave 'clave': clave
} }
print( f"la referencia {referencia} ya ha sido posteada." ) print( f"la referencia {referencia} ya ha sido posteada." )
r = requests.post(url=URL,files=multiple_files, verify=False, timeout=1000) r = requests.post(url=URL,files=multiple_files, verify=False, timeout=300)
except Exception as e: except Exception as e:
print("Error: %s" % e) print("Error: %s" % e)
# WriteToLog(r.text) # WriteToLog(r.text)
@ -161,6 +161,11 @@ CreateFolderContent()
#URL = 'https://www.gemcousa.mx/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\ #URL = 'https://www.gemcousa.mx/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\
# URL = 'http://localhost:5000/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\ # URL = 'http://localhost:5000/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\
# URL = 'http://localhost:5000/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\
# URL 'https://www.gemcousa.solutions/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\ # URL 'https://www.gemcousa.solutions/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\
Loading…
Cancel
Save