se agrega integración con SAP HANA, manejo de errores en el demonio y actualización de documentación
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
fcc80d3c6e
commit
e6cde62e72
14 files changed
+1711
-237
No files matched your search
+121
@@ -0,0 +1,121 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
from datetime import datetime, date
|
||||
from hdbcli import dbapi
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# ============================================================================
|
||||
# CONFIGURACIÓN
|
||||
# ============================================================================
|
||||
|
||||
# Cargar variables de entorno desde .env
|
||||
load_dotenv(dotenv_path=".env")
|
||||
|
||||
# Configuración de la API
|
||||
HANA_HOST = os.getenv("HANA_SERVER", "")
|
||||
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", "")
|
||||
|
||||
# ============================================================================
|
||||
def get_connection():
|
||||
"""Crea y retorna una conexión a SAP HANA."""
|
||||
try:
|
||||
conn = dbapi.connect(
|
||||
address=HANA_HOST,
|
||||
port=HANA_PORT,
|
||||
user=HANA_USER,
|
||||
password=HANA_PASSWORD
|
||||
)
|
||||
return conn
|
||||
except Exception as e:
|
||||
print(f" ❌ Error conectando a HANA: {e}")
|
||||
return None
|
||||
|
||||
# ============================================================================
|
||||
def get_delivery(tipo: str, serie: str, numero: str) -> list:
|
||||
"""
|
||||
Consulta la tabla ODLN en SAP HANA para obtener DeliveryNotes.
|
||||
|
||||
Args:
|
||||
tipo: Código de serie/documento (U_BPP_MDSD).
|
||||
serie: Serie del documento (U_BPP_MDTD).
|
||||
numero: Número del documento (se busca con LIKE).
|
||||
|
||||
Returns:
|
||||
list[dict] — Lista con DocEntry, DocNum, CardCode, CardName.
|
||||
"""
|
||||
schema = HANA_SCHEMA
|
||||
query = f'''SELECT "DocEntry", "DocNum", "CardCode", "CardName"
|
||||
FROM "{schema}"."ODLN"
|
||||
WHERE "CANCELED" = 'N'
|
||||
AND "U_BPP_MDSD" = ?
|
||||
AND "U_BPP_MDTD" = ?
|
||||
AND "U_BPP_MDCD" LIKE ?'''
|
||||
|
||||
pattern = f"%{numero}%"
|
||||
|
||||
connection = get_connection()
|
||||
if not connection:
|
||||
return []
|
||||
|
||||
cursor = connection.cursor()
|
||||
try:
|
||||
cursor.execute(query, (tipo, serie, pattern))
|
||||
columns = [column[0] for column in cursor.description]
|
||||
results = []
|
||||
for row in cursor.fetchall():
|
||||
results.append(dict(zip(columns, row)))
|
||||
return results
|
||||
except Exception as e:
|
||||
print(f" ❌ Error en consulta HANA get_delivery: {e}")
|
||||
return []
|
||||
finally:
|
||||
if cursor:
|
||||
cursor.close()
|
||||
if connection:
|
||||
connection.close()
|
||||
|
||||
# ============================================================================
|
||||
def obtener_valor_referencial(serie: str, numero: str) -> float:
|
||||
"""
|
||||
Ejecuta el stored procedure Sp_ObtenerValorReferencial en SAP HANA para
|
||||
obtener el valor referencial de una guía de remisión (tipo 09).
|
||||
|
||||
Args:
|
||||
serie: Serie de la guía de remisión (ej. "T001").
|
||||
numero: Número de la guía de remisión (ej. "132800").
|
||||
|
||||
Returns:
|
||||
float — Columna ``ValorReferencial`` del primer registro devuelto
|
||||
por el SP, o 0.0 si no hay resultados o si ocurre un error.
|
||||
"""
|
||||
schema = HANA_SCHEMA
|
||||
query = f'CALL "{schema}"."Sp_ObtenerValorReferencial"(?, ?)'
|
||||
|
||||
connection = get_connection()
|
||||
if not connection:
|
||||
return 0.0
|
||||
|
||||
cursor = connection.cursor()
|
||||
try:
|
||||
cursor.execute(query, (serie, numero))
|
||||
columns = [column[0] for column in cursor.description]
|
||||
row = cursor.fetchone()
|
||||
if not row:
|
||||
return 0.0
|
||||
valor = dict(zip(columns, row)).get("ValorReferencial")
|
||||
return float(valor) if valor is not None else 0.0
|
||||
except Exception as e:
|
||||
print(f" ❌ Error en consulta HANA obtener_valor_referencial: {e}")
|
||||
return 0.0
|
||||
finally:
|
||||
if cursor:
|
||||
cursor.close()
|
||||
if connection:
|
||||
connection.close()
|
||||
|
||||
# ============================================================================
|
||||
Reference in new issue
Block a user