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")