Proceso para subir referencias y documentos de Amazon, a servidor IONOS.
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.
SyncReference2IONOS/SyncReferences2IONOS.py

147 lines
5.6 KiB

import pyodbc as po
import json
import shutil
import os
import datetime
import zipfile
import requests
import urllib3
import os.path
import sys
import datetime as dt
CurrentPath = os.path.dirname(os.path.realpath(__file__))
log_file = "./log/Referencias.txt"
if not os.path.isfile(CurrentPath + log_file):
with open(CurrentPath + log_file, 'w') as f:
f.write("")
CurrentPath = os.path.dirname(os.path.realpath(__file__))
log_file1 = "./log/fechayHora.txt"
if not os.path.isfile(CurrentPath + log_file1):
with open(CurrentPath + log_file1, 'w') as f:
f.write("")
urllib3.disable_warnings()
CurrentPath = os.path.dirname(os.path.realpath(__file__))
with open(CurrentPath+"/config/config.json") as json_data_file:
config = json.load(json_data_file)
ServerSIR = config['ServerSIR']
DatabaseSIR = config['DatabaseSIR']
UsernameSIR = config['DBUserSIR']
PasswordSIR = config['DBPasswordSIR']
RepositoryArchivoElectronicoOficial = config['RepositoryArchivoElectronicoOficial']
'''RepositoryArchivoElectronicoOficial = 'c:/data/temp/'''
TempFolder= 'c:/tmp/'
today = datetime.date.today()
YEAR = today.year
def ZipReference(foldername, TempFolder, Cliente):
zipobj = zipfile.ZipFile(TempFolder+ '_____'+ Cliente + '.zip', 'w', zipfile.ZIP_DEFLATED)
rootlen = len(TempFolder) + 1
for base, dirs, files in os.walk(TempFolder):
for file in files:
fn = os.path.join(base, file)
zipobj.write(fn, fn[rootlen:])
def WriteToLogDate(log_file, referencia):
fecha = dt.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with open(log_file, 'a') as f:
f.write(f"{fecha} - {referencia}\n")
f.flush()
def WriteToLog(referencia):
processed_files = []
with open('./log/Referencias.txt', 'r') as f:
for line in f:
processed_files.append(line.strip())
referencia = referencia.replace('[', '')
referencia = referencia.replace(']', '')
if referencia in processed_files:
print(f"El archivo {referencia} ya ha sido procesado.")
return False
with open('./log/Referencias.txt', 'a') as f:
f.write(f"{referencia}\n")
f.flush()
log_file = "./log/fechayHora.txt"
WriteToLogDate(log_file, referencia)
print(f"El archivo {referencia} ha sido registrado.")
return True
def CreateFolderContent():
try:
# Leer archivo de registro y obtener lista de referencias procesadas
processed_references = []
with open('./log/Referencias.txt', 'r') as f:
for line in f:
reference = line.strip()
processed_references.append(reference)
# Obtener archivos a procesar
files2process = []
cnxn = po.connect(
"DRIVER={SQL Server};SERVER=" + ServerSIR
+ ";DATABASE=" + DatabaseSIR
+ ";UID=" + UsernameSIR
+ ";PWD=" + PasswordSIR
)
cursor = cnxn.cursor()
cursor.execute("""SELECT P.sReferencia, p.Archivo, P.Aduana, P.Patente, P.Pedimento, P.[Pedimento Fecha Pago], Peds.nTipoCambio,
P.Clave, P.Cliente FROM SIR.Admin.SIR_VT_PedimPagados P
INNER JOIN SIR.SIR.SIR_149_PEDIMENTO AS Peds ON Peds.nIdPedimento149=ID
WHERE P.ClienteClave=2096 and p.[Pedimento FechaPago]>=CAST( GETDATE()-5 AS Date ) """)
for row in cursor:
referencia = row[0]
archivoM = row[1]
aduana = row[2]
patente = row[3]
pedimento = row[4]
fPago = row[5]
tipoCambio = row[6]
clave = row[7]
cliente = row [8]
referenceFolder = TempFolder + referencia
if referencia in processed_references:
print(f"La referencia {referencia} ya ha sido procesada.")
continue
if os.path.exists(referenceFolder):
shutil.rmtree(referenceFolder)
shutil.copytree(RepositoryArchivoElectronicoOficial + str(YEAR) + '/' + referencia, referenceFolder)
zip_file = referenceFolder+'_____'+cliente+'.zip'
if os.path.exists(zip_file) == False:
ZipReference(referencia, referenceFolder, cliente)
# Procesar archivo
if WriteToLog(referencia):
processed_references.append(referencia)
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
multiple_files = []
multiple_files.append(('files', (zip_file.replace(TempFolder,''), open(zip_file, 'rb'), 'application/zip')))
data = {
"ArchivoM": archivoM,
'aduana': aduana,
'patente': patente,
'pedimento': pedimento,
'fPago' : str(fPago),
'tipoCambio' : str(tipoCambio),
'clave': clave
}
print( f"la referencia {referencia} ya ha sido posteada." )
r = requests.post(url=URL,files=multiple_files, verify=False, timeout=30)
except Exception as e:
print("Error: %s" % e)
# WriteToLog(r.text)
''' contents = [os.path.join(TempFolder, i) for i in os.listdir(TempFolder)]
[shutil.rmtree(i) if os.path.isdir(i) and not os.path.islink(i) else os.remove(i) for i in contents] '''
CreateFolderContent()