Compare commits

..

No commits in common. 'master' and 'SyncUpdate2IONOS' have entirely different histories.

  1. 161
      RptFacturasCruzadas/ReporteMensualFacturasCruzadas.py
  2. 13
      RptFacturasCruzadas/config.json
  3. 162
      RptSegregadosFacPagadas/ReporteMensualAmazon.py
  4. 18
      RptSegregadosFacPagadas/config.json
  5. 13
      SyncReferences2IONOS/SyncReferences2IONOS.py

@ -1,161 +0,0 @@
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 las fechas de los últimos dos meses
today = datetime.date.today()
last_month = today.replace(day=1) - datetime.timedelta(days=1)
two_months_ago = last_month.replace(day=1) - datetime.timedelta(days=1)
# Convertir las fechas a formato de cadena YYYY-MM-DD
start_date = two_months_ago.replace(day=1).strftime("%Y-%m-%d")
end_date = last_month.strftime("%Y-%m-%d")
cliente = 1725;
tipoOperacion = 2
# Obtener el nombre de los últimos dos meses en español
mes = last_month.strftime("%B").capitalize()
mes_anterior = two_months_ago.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 * from [Clientes.Reporte.Notificaciones] where Id = 1 or Id = 5 or TipoReporte = 'RptFacturasCruzadas' ")
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.Facturas.Cruzadas] (?, ?, ?,?)}", (start_date, end_date, tipoOperacion, cliente))
# cursor.execute("{CALL [Reportes.Web.Clientes.Factura.Pedimentos.Pagados.Get] (?,?,?,?)}", (start_date, end_date, tipoOperacion, cliente))
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'ReporteMensualFacturasCruzadas_{mes_anterior}_{mes}.xlsx'
df1.to_excel(excel_file_1, 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_anterior} - {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 reporte mensual de Facturas Cruzadas correspodientes a los 2 meses inmediatos anteriores ({mes_anterior} and {mes}).
En caso de dudas o aclaraciones conctactar a : (jguel@gemcousa.com)
Saludos. """.format(mes=mes, mes_anterior=mes_anterior)
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]:
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 mensual enviado exitosamente por correo electrónico.")
# Eliminar los archivos Excel después de enviar el correo electrónico
for excel_file in [excel_file_1]:
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()
# Credenciales producion
#{
# "server": "100.10.10.1",
# "database": "GEMCO",
# "username": "admin",
# "password": "DBAdmin1234$.",
# "EmailUser": "noreply@gemcousa.mx",
# "EmailPassword": "Mx77lf%02",
# "EmailServer": "smtp.ionos.com",
# "EmailPort": 587,
# "recipients": ["lrendon@gemcousa.com", "destinatario2@example.com", "destinatario3@example.com"]
# }
# { credenciales maquina local
# "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"]
# }

@ -1,13 +0,0 @@
{
"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"]
}

@ -1,162 +0,0 @@
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 * from [Clientes.Reporte.Notificaciones] where id = 1 or id = 5 OR TipoReporte = 'RptFacturasPagadas,RptSegregacion' ")
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()
# Credenciales producion
#{
# "server": "100.10.10.1",
# "database": "GEMCO",
# "username": "admin",
# "password": "DBAdmin1234$.",
# "EmailUser": "noreply@gemcousa.mx",
# "EmailPassword": "Mx77lf%02",
# "EmailServer": "smtp.ionos.com",
# "EmailPort": 587,
# "recipients": ["lrendon@gemcousa.com", "destinatario2@example.com", "destinatario3@example.com"]
# }
# { credenciales maquina local
# "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"]
# }

@ -1,18 +0,0 @@
{
"server": "100.10.10.1",
"database": "GEMCO",
"username": "admin",
"password": "DBAdmin1234$.",
"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_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'
WHERE P.ClienteClave=2096 and p.[Pedimento FechaPago]>=CAST( GETDATE()-3 AS Date) """)
WHERE P.ClienteClave=2096 and p.[Pedimento FechaPago]>=CAST( GETDATE()-2 AS Date ) """)
for row in cursor:
referencia = row[0]
archivoM = row[1]
@ -134,7 +134,7 @@ def CreateFolderContent():
# Procesar archivo
if WriteToLog(referencia):
processed_references.append(referencia)
URL = 'https://www.gemcousa.solutions/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\
URL = 'https://www.gemcousa.mx/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\
archivoM+'&aduana='+aduana+'&patente='+patente + \
'&pedimento='+pedimento+'&fPago=' + \
str(fPago)+'&TipoCambio='+str(tipoCambio)+'&clave='+clave
@ -150,7 +150,7 @@ def CreateFolderContent():
'clave': clave
}
print( f"la referencia {referencia} ya ha sido posteada." )
r = requests.post(url=URL,files=multiple_files, verify=False, timeout=300)
r = requests.post(url=URL,files=multiple_files, verify=False, timeout=1000)
except Exception as e:
print("Error: %s" % e)
# WriteToLog(r.text)
@ -161,11 +161,6 @@ CreateFolderContent()
#URL = 'https://www.gemcousa.mx/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\
# URL = 'http://localhost:5000/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\
#URL = 'https://www.gemcousa.mx/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\
# URL = 'http://localhost:5000/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\
# URL 'https://www.gemcousa.solutions/GEMCOBackend/api/AmazonInvoice/UploadSIRReference?ArchivoM=' +\
Loading…
Cancel
Save