import logging from typing import List, Optional from core.sap import forward_to_sapb1 logger = logging.getLogger(__name__) def get_default_series(document_type: str) -> Optional[int]: """ Consulta a Service Layer (SeriesService_GetDefaultSeries) la serie activa por defecto para un tipo de documento de SAP B1 (código BoObjectTypes, ej. "1250000001" para Solicitud de Transferencia). Si la llamada falla o la respuesta no trae el campo esperado, se registra en el log y se devuelve None; quien llama decide cómo seguir sin una serie por defecto. """ try: response = forward_to_sapb1( method="POST", endpoint_path="SeriesService_GetDefaultSeries", json_data={"DocumentTypeParams": {"Document": document_type}}, ) except Exception as exc: logger.warning( f"No se pudo obtener la serie por defecto de SAP (documento {document_type}): {exc}" ) return None data = response.json() series = data.get("Series") if series is None: logger.warning( f"SeriesService_GetDefaultSeries no devolvió 'Series' (documento {document_type}): {data}" ) return series def get_active_series(document_type: str) -> List[dict]: """ Lista las series no bloqueadas de un tipo de documento de SAP B1, vía SeriesService_GetDocumentSeries. Confirmado contra el HANA/Service Layer real de tagumedica: la respuesta viene en "value", cada item con "Series" (código) y "Name"; "Locked" en "tYES"/"tNO". """ response = forward_to_sapb1( method="POST", endpoint_path="SeriesService_GetDocumentSeries", json_data={"DocumentTypeParams": {"Document": document_type}}, ) series_list = response.json().get("value", []) return [s for s in series_list if str(s.get("Locked", "")).lower() != "tyes"]