136 lines
4.2 KiB
Python
136 lines
4.2 KiB
Python
import os
|
|
import json
|
|
from pathlib import Path
|
|
from dotenv import load_dotenv
|
|
|
|
# ============================================================================
|
|
load_dotenv()
|
|
|
|
HANA_HOST = os.getenv("HANA_HOST", "")
|
|
HANA_PORT = int(os.getenv("HANA_PORT", 30015))
|
|
HANA_USER = os.getenv("HANA_USER", "")
|
|
HANA_PASSWORD = os.getenv("HANA_PASSWORD", "")
|
|
HANA_SCHEMA = os.getenv("HANA_SCHEMA", "")
|
|
|
|
_conn = None
|
|
|
|
# ============================================================================
|
|
def get_connection():
|
|
global _conn
|
|
if _conn is None:
|
|
try:
|
|
from hdbcli import dbapi
|
|
_conn = dbapi.connect(
|
|
address=HANA_HOST,
|
|
port=HANA_PORT,
|
|
user=HANA_USER,
|
|
password=HANA_PASSWORD
|
|
)
|
|
except Exception as e:
|
|
print(f" ❌ Error conectando a HANA: {e}")
|
|
return None
|
|
return _conn
|
|
|
|
# ============================================================================
|
|
def obtener_pendientes() -> list[dict]:
|
|
|
|
conn = get_connection()
|
|
if not conn:
|
|
return []
|
|
|
|
try:
|
|
query = f"""
|
|
SELECT
|
|
"DocEntry",
|
|
"DocNum",
|
|
"DocDate",
|
|
EXTRACT(MONTH FROM "DocDate") "Mes",
|
|
"Indicator",
|
|
"LicTradNum",
|
|
"FolioPref",
|
|
"FolioNum",
|
|
"U_PGX_REPIMP" "urlPDF",
|
|
"U_PGX_PDF" "tienePDF",
|
|
"U_PGX_REPIMPXML" "urlXML",
|
|
"U_PGX_XML" "tieneXML"
|
|
FROM "{HANA_SCHEMA}".OPCH
|
|
WHERE ("U_PGX_PDF" = 'N' OR "U_PGX_XML" = 'N')
|
|
AND EXTRACT(YEAR FROM "DocDate") = 2026
|
|
AND "Indicator" IN ('01', '02','08')
|
|
AND "CANCELED" = 'N'
|
|
ORDER BY EXTRACT(MONTH FROM "DocDate") DESC
|
|
"""
|
|
cursor = conn.cursor()
|
|
cursor.execute(query)
|
|
columns = [desc[0] for desc in cursor.description]
|
|
rows = cursor.fetchall()
|
|
cursor.close()
|
|
result = [dict(zip(columns, row)) for row in rows]
|
|
return result
|
|
except Exception as e:
|
|
print(f" ❌ Error en query HANA: {e}")
|
|
return []
|
|
|
|
# ============================================================================
|
|
def marcar_pdf_descargado(docentry: int, url: str, ruta: str):
|
|
conn = get_connection()
|
|
if not conn:
|
|
return False
|
|
try:
|
|
cursor = conn.cursor()
|
|
cursor.execute(f"""
|
|
UPDATE "{HANA_SCHEMA}".OPCH
|
|
SET "U_PGX_PDF" = 'Y'
|
|
WHERE "DocEntry" = ?
|
|
""", (docentry))
|
|
conn.commit()
|
|
cursor.close()
|
|
return True
|
|
except Exception as e:
|
|
print(f" ❌ Error actualizando PDF HANA: {e}")
|
|
return False
|
|
|
|
# ============================================================================
|
|
def marcar_xml_descargado(docentry: int, url: str, ruta: str):
|
|
conn = get_connection()
|
|
if not conn:
|
|
return False
|
|
try:
|
|
cursor = conn.cursor()
|
|
cursor.execute(f"""
|
|
UPDATE "{HANA_SCHEMA}".OPCH
|
|
SET "U_PGX_XML" = 'Y'
|
|
WHERE "DocEntry" = ?
|
|
""", (docentry))
|
|
conn.commit()
|
|
cursor.close()
|
|
return True
|
|
except Exception as e:
|
|
print(f" ❌ Error actualizando XML HANA: {e}")
|
|
return False
|
|
|
|
# ============================================================================
|
|
def cerrar_conexion():
|
|
global _conn
|
|
if _conn:
|
|
try:
|
|
_conn.close()
|
|
except:
|
|
pass
|
|
_conn = None
|
|
|
|
# ============================================================================
|
|
if __name__ == "__main__":
|
|
print("=" * 60)
|
|
print("📋 HANA MANAGER - Prueba")
|
|
print("=" * 60)
|
|
docs = obtener_pendientes()
|
|
print(f"\n📄 Documentos pendientes: {len(docs)}")
|
|
for d in docs[:5]:
|
|
print(f" DocEntry={d['DocEntry']} DocNum={d['DocNum']} "
|
|
f"DocDate={d['DocDate']} Indicator={d['Indicator']} "
|
|
f"Folio={d['FolioPref']}-{d['FolioNum']} "
|
|
f"PDF={d['tienePDF']} XML={d['tieneXML']}")
|
|
if len(docs) > 5:
|
|
print(f" ... y {len(docs) - 5} más")
|
|
# ============================================================================ |