diff --git a/controllers/XMLController.py b/controllers/XMLController.py index 87bcfcc..3a60f36 100644 --- a/controllers/XMLController.py +++ b/controllers/XMLController.py @@ -1,5 +1,6 @@ import xml.etree.ElementTree as ET from dataclasses import dataclass +from typing import List, Dict # Pedimento Completo @dataclass @@ -247,9 +248,51 @@ class XMLScraper: # Clase me extrae datos de Pedimento return extract_xml_data(xml_content) - class XMLControllerRemesas: - pass + """ + Controlador para scrapear XML de consultar remesas. + Extrae todos los comprobantesVE, junto con remesaAgente y remesaSA. + """ + + namespaces = { + "S": "http://schemas.xmlsoap.org/soap/envelope/", + "ns2": "http://www.ventanillaunica.gob.mx/common/ws/oxml/respuesta", + "ns3": "http://www.ventanillaunica.gob.mx/pedimentos/ws/oxml/consultarremesas", + } + + def extract_remesas(self, xml_content: str) -> List[Dict[str, str]]: + """ + Extrae todos los comprobanteVE de un XML de remesas. + + Args: + xml_content: Contenido del XML en string. + + Returns: + Lista de diccionarios con comprobanteVE, remesaAgente y remesaSA. + """ + try: + root = ET.fromstring(xml_content) + + remesas = [] + for remesa in root.findall(".//ns3:remesas", self.namespaces): + comprobante = remesa.find("ns3:comprobanteVE", self.namespaces) + agente = remesa.find("ns3:remesaAgente", self.namespaces) + sa = remesa.find("ns3:remesaSA", self.namespaces) + + remesas.append({ + "comprobanteVE": comprobante.text if comprobante is not None else None, + "remesaAgente": agente.text if agente is not None else None, + "remesaSA": sa.text if sa is not None else None + }) + + return remesas + + except ET.ParseError as e: + print(f"Error al parsear XML: {e}") + return [] + except Exception as e: + print(f"Error inesperado: {e}") + return [] class XMLControllerPartidas: pass diff --git a/tasks.py b/tasks.py index 0175e5c..6ad5e63 100644 --- a/tasks.py +++ b/tasks.py @@ -38,7 +38,6 @@ def run_async_task(async_func, *args, **kwargs): finally: loop.close() - @celery_app.task(bind=True, name='tasks.pedimento_completo_task') def pedimento_completo_task(self, request_data: Dict[str, Any]): """ @@ -159,7 +158,6 @@ def pedimento_completo_task(self, request_data: Dict[str, Any]): return run_async_task(_execute_pedimento_completo) - @celery_app.task(bind=True) def partidas_task(self, **kwargs): """Tarea asíncrona para obtener partidas""" @@ -278,7 +276,6 @@ def partidas_task(self, **kwargs): return run_async_task(_execute_partidas) - @celery_app.task(bind=True) def remesas_task(self, **kwargs): """Tarea asíncrona para obtener remesas""" @@ -365,7 +362,6 @@ def remesas_task(self, **kwargs): return run_async_task(_execute_remesas) - @celery_app.task(bind=True) def acuse_task(self, **kwargs): """Tarea asíncrona para obtener acuse""" @@ -504,7 +500,6 @@ def acuse_task(self, **kwargs): return run_async_task(_execute_acuse) - # Tarea asíncrona para consultar el estado de un pedimento @celery_app.task(bind=True, name='tasks.estado_pedimento_task') def estado_pedimento_task(self, request_data: Dict[str, Any]): @@ -573,7 +568,6 @@ def estado_pedimento_task(self, request_data: Dict[str, Any]): raise e return run_async_task(_execute_estado_pedimento) - @celery_app.task(bind=True) def edocument_task(self, **kwargs): """Tarea asíncrona para obtener edocument""" @@ -734,7 +728,6 @@ def edocument_task(self, **kwargs): return run_async_task(_execute_edocument) - @celery_app.task(bind=True) def coves_task(self, **kwargs): """Tarea asíncrona para obtener coves""" @@ -1006,4 +999,3 @@ def acuse_cove_task(self, **kwargs): raise e return run_async_task(_execute_acuse_cove) -