Se modificaron endpoints
This commit is contained in:
@@ -13,8 +13,6 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@router.post("/async/services/pedimento_completo")
|
@router.post("/async/services/pedimento_completo")
|
||||||
async def async_get_pedimento_completo(request: ServiceRemesaSchema):
|
async def async_get_pedimento_completo(request: ServiceRemesaSchema):
|
||||||
"""
|
"""
|
||||||
@@ -204,7 +202,6 @@ async def cancel_task(task_id: str):
|
|||||||
detail=f"Error al cancelar la tarea: {str(e)}"
|
detail=f"Error al cancelar la tarea: {str(e)}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@router.post("/async/services/partidas")
|
@router.post("/async/services/partidas")
|
||||||
async def async_get_partidas(request: ServiceRemesaSchema):
|
async def async_get_partidas(request: ServiceRemesaSchema):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -34,255 +34,6 @@ ESTADO_ERROR = 4
|
|||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@router.post("/services/estado_pedimento")
|
|
||||||
async def get_estado_pedimento(request: ServiceRemesaSchema):
|
|
||||||
"""
|
|
||||||
Obtiene el estado actual de un pedimento mediante consulta SOAP a VUCEM.
|
|
||||||
|
|
||||||
Este endpoint:
|
|
||||||
1. Obtiene el servicio de estado de pedimento existente
|
|
||||||
2. Actualiza estado a "en proceso"
|
|
||||||
3. Obtiene credenciales VUCEM
|
|
||||||
4. Realiza petición SOAP para consultar estado
|
|
||||||
5. Procesa y retorna información del estado
|
|
||||||
|
|
||||||
Args:
|
|
||||||
request: ServiceBaseSchema con pedimento y organización
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
JSONResponse con estado actual del pedimento
|
|
||||||
|
|
||||||
Raises:
|
|
||||||
HTTPException: En caso de errores de validación o procesamiento
|
|
||||||
"""
|
|
||||||
operation_name = "estado_pedimento"
|
|
||||||
service_data = None
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Validar datos de entrada
|
|
||||||
request_data = request.model_dump()
|
|
||||||
await _validate_request_data(request_data)
|
|
||||||
|
|
||||||
logger.info(f"Iniciando consulta de estado de pedimento - Pedimento: {request_data['pedimento']}")
|
|
||||||
|
|
||||||
# Obtener servicio de estado de pedimento existente
|
|
||||||
service_data = await _get_pedimento_service(
|
|
||||||
pedimento_id=request_data['pedimento'],
|
|
||||||
service_type=1,
|
|
||||||
operation_name=operation_name
|
|
||||||
)
|
|
||||||
|
|
||||||
# Actualizar estado a "En proceso"
|
|
||||||
update_success = await _update_service_status(
|
|
||||||
service_data['id'], ESTADO_EN_PROCESO, service_data, operation_name
|
|
||||||
)
|
|
||||||
|
|
||||||
if not update_success:
|
|
||||||
raise HTTPException(status_code=500, detail="Error al actualizar estado del servicio")
|
|
||||||
|
|
||||||
# Obtener credenciales VUCEM
|
|
||||||
contribuyente_id = service_data.get('pedimento', {}).get('contribuyente', '')
|
|
||||||
if not contribuyente_id:
|
|
||||||
logger.error("No se encontró ID de contribuyente en los datos del servicio")
|
|
||||||
await _update_service_status(service_data['id'], ESTADO_ERROR, service_data, operation_name)
|
|
||||||
raise HTTPException(status_code=400, detail="ID de contribuyente no encontrado")
|
|
||||||
|
|
||||||
credentials = await _get_vucem_credentials(contribuyente_id, operation_name)
|
|
||||||
|
|
||||||
# Procesar petición SOAP para obtener estado del pedimento
|
|
||||||
logger.info("Realizando petición SOAP para estado del pedimento...")
|
|
||||||
try:
|
|
||||||
soap_response = await get_estado_pedimento(
|
|
||||||
credenciales=credentials,
|
|
||||||
response_service=service_data,
|
|
||||||
soap_controller=soap_controller
|
|
||||||
)
|
|
||||||
|
|
||||||
if not soap_response:
|
|
||||||
raise HTTPException(status_code=500, detail="Error en la petición SOAP para estado del pedimento")
|
|
||||||
|
|
||||||
logger.info("Petición SOAP para estado del pedimento completada exitosamente")
|
|
||||||
|
|
||||||
except HTTPException:
|
|
||||||
await _update_service_status(service_data['id'], ESTADO_ERROR, service_data, operation_name)
|
|
||||||
raise
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Error en petición SOAP para estado del pedimento: {e}")
|
|
||||||
await _update_service_status(service_data['id'], ESTADO_ERROR, service_data, operation_name)
|
|
||||||
raise HTTPException(status_code=500, detail="Error en la petición SOAP al servicio VUCEM")
|
|
||||||
|
|
||||||
# Finalizar servicio exitosamente
|
|
||||||
await _update_service_status(service_data['id'], ESTADO_FINALIZADO, service_data, operation_name)
|
|
||||||
|
|
||||||
# Crear respuesta estandarizada
|
|
||||||
response_data = await _create_response(
|
|
||||||
service_data=service_data,
|
|
||||||
additional_data={
|
|
||||||
"estado_pedimento": soap_response,
|
|
||||||
"documento": soap_response.get('documento', {}),
|
|
||||||
"xml_content": soap_response.get('xml_content', {})
|
|
||||||
},
|
|
||||||
success_message="Estado del pedimento consultado exitosamente"
|
|
||||||
)
|
|
||||||
|
|
||||||
logger.info(f"Consulta de estado de pedimento completada exitosamente - Servicio: {service_data['id']}")
|
|
||||||
return JSONResponse(content=response_data, status_code=200)
|
|
||||||
|
|
||||||
except HTTPException:
|
|
||||||
# Re-lanzar HTTPExceptions sin modificar
|
|
||||||
raise
|
|
||||||
except Exception as e:
|
|
||||||
pass
|
|
||||||
logger.error(f"Error inesperado en {operation_name}: {e}")
|
|
||||||
|
|
||||||
@router.post("/services/listar_pedimentos")
|
|
||||||
async def get_listar_pedimentos(request: ServiceRemesaSchema):
|
|
||||||
"""
|
|
||||||
Lista pedimentos disponibles en el sistema VUCEM para una organización.
|
|
||||||
|
|
||||||
Este endpoint:
|
|
||||||
1. Obtiene el servicio de listado de pedimentos existente
|
|
||||||
2. Actualiza estado a "en proceso"
|
|
||||||
3. Obtiene credenciales VUCEM
|
|
||||||
4. Consulta lista de pedimentos en VUCEM
|
|
||||||
5. Procesa y retorna la lista de pedimentos
|
|
||||||
|
|
||||||
Args:
|
|
||||||
request: ServiceBaseSchema con pedimento y organización
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
JSONResponse con lista de pedimentos disponibles
|
|
||||||
|
|
||||||
Raises:
|
|
||||||
HTTPException: En caso de errores de validación o procesamiento
|
|
||||||
"""
|
|
||||||
operation_name = "listar_pedimentos"
|
|
||||||
service_data = None
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Validar datos de entrada
|
|
||||||
request_data = request.model_dump()
|
|
||||||
await _validate_request_data(request_data)
|
|
||||||
|
|
||||||
logger.info(f"Iniciando listado de pedimentos - Organización: {request_data['organizacion']}")
|
|
||||||
|
|
||||||
# Obtener servicio de listado de pedimentos existente
|
|
||||||
# Nota: Asumiendo que existe un tipo de servicio para listado (tipo 8)
|
|
||||||
# Ajustar el tipo según la configuración del sistema
|
|
||||||
try:
|
|
||||||
services = await rest_controller.get_pedimento_services(
|
|
||||||
request_data['pedimento'],
|
|
||||||
service_type=8 # Tipo para listado de pedimentos
|
|
||||||
)
|
|
||||||
|
|
||||||
if not services or len(services) == 0:
|
|
||||||
logger.error(f"No se encontró servicio de listado de pedimentos")
|
|
||||||
raise HTTPException(status_code=404, detail="Servicio de listado no encontrado")
|
|
||||||
|
|
||||||
service_data = services[0]
|
|
||||||
logger.info(f"Servicio de listado obtenido: {service_data.get('id', 'N/A')}")
|
|
||||||
|
|
||||||
except HTTPException:
|
|
||||||
raise
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Error al obtener servicio de listado: {e}")
|
|
||||||
raise HTTPException(status_code=500, detail="Error al obtener servicio de listado")
|
|
||||||
|
|
||||||
# Actualizar estado a "En proceso"
|
|
||||||
update_success = await _update_service_status(
|
|
||||||
service_data['id'], ESTADO_EN_PROCESO, service_data, operation_name
|
|
||||||
)
|
|
||||||
if not update_success:
|
|
||||||
raise HTTPException(status_code=500, detail="Error al actualizar estado del servicio")
|
|
||||||
|
|
||||||
# Obtener credenciales VUCEM
|
|
||||||
contribuyente_id = service_data.get('pedimento', {}).get('contribuyente', '')
|
|
||||||
if not contribuyente_id:
|
|
||||||
logger.error("No se encontró ID de contribuyente en los datos del servicio")
|
|
||||||
await _update_service_status(service_data['id'], ESTADO_ERROR, service_data, operation_name)
|
|
||||||
raise HTTPException(status_code=400, detail="ID de contribuyente no encontrado")
|
|
||||||
|
|
||||||
credentials = await _get_vucem_credentials(contribuyente_id, operation_name)
|
|
||||||
|
|
||||||
# Consultar pedimentos en VUCEM
|
|
||||||
logger.info("Consultando pedimentos disponibles en VUCEM...")
|
|
||||||
try:
|
|
||||||
# Nota: Este endpoint requiere implementar la función específica en utils/peticiones.py
|
|
||||||
# Por ahora, simularemos la respuesta básica
|
|
||||||
|
|
||||||
# TODO: Implementar get_soap_lista_pedimentos en utils/peticiones.py
|
|
||||||
# soap_response = await get_soap_lista_pedimentos(
|
|
||||||
# credenciales=credentials,
|
|
||||||
# response_service=service_data,
|
|
||||||
# soap_controller=soap_controller
|
|
||||||
# )
|
|
||||||
|
|
||||||
# Respuesta simulada para demostrar la estructura
|
|
||||||
soap_response = {
|
|
||||||
"pedimentos": [
|
|
||||||
{
|
|
||||||
"id": "PED001",
|
|
||||||
"numero": "24 44 1234 5678901",
|
|
||||||
"fecha": "2024-12-19",
|
|
||||||
"estado": "Tramitado",
|
|
||||||
"patente": "1234",
|
|
||||||
"aduana": "44"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"total": 1,
|
|
||||||
"documento": {
|
|
||||||
"filename": "lista_pedimentos.xml",
|
|
||||||
"size": 1024
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.info(f"Se encontraron {soap_response.get('total', 0)} pedimentos")
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Error en consulta SOAP de pedimentos: {e}")
|
|
||||||
await _update_service_status(service_data['id'], ESTADO_ERROR, service_data, operation_name)
|
|
||||||
raise HTTPException(status_code=500, detail="Error en la consulta SOAP al servicio VUCEM")
|
|
||||||
|
|
||||||
# Finalizar servicio exitosamente
|
|
||||||
await _update_service_status(service_data['id'], ESTADO_FINALIZADO, service_data, operation_name)
|
|
||||||
|
|
||||||
# Crear respuesta estandarizada
|
|
||||||
response_data = await _create_response(
|
|
||||||
service_data=service_data,
|
|
||||||
additional_data={
|
|
||||||
"pedimentos": soap_response.get('pedimentos', []),
|
|
||||||
"total_pedimentos": soap_response.get('total', 0),
|
|
||||||
"documento": soap_response.get('documento', {}),
|
|
||||||
"fecha_consulta": "2024-12-19T12:00:00Z"
|
|
||||||
},
|
|
||||||
success_message=f"Se encontraron {soap_response.get('total', 0)} pedimentos disponibles"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Agregar advertencia si no se encontraron pedimentos
|
|
||||||
if soap_response.get('total', 0) == 0:
|
|
||||||
response_data["warnings"] = [
|
|
||||||
"No se encontraron pedimentos disponibles en el periodo consultado"
|
|
||||||
]
|
|
||||||
|
|
||||||
logger.info(f"Listado de pedimentos completado - Total: {soap_response.get('total', 0)}")
|
|
||||||
return JSONResponse(content=response_data, status_code=200)
|
|
||||||
|
|
||||||
except HTTPException:
|
|
||||||
# Re-lanzar HTTPExceptions sin modificar
|
|
||||||
raise
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Error inesperado en {operation_name}: {e}")
|
|
||||||
logger.error(f"Traceback: {traceback.format_exc()}")
|
|
||||||
|
|
||||||
# Actualizar estado a error si tenemos service_data
|
|
||||||
if service_data:
|
|
||||||
try:
|
|
||||||
await _update_service_status(service_data['id'], ESTADO_ERROR, service_data, operation_name)
|
|
||||||
except Exception as update_error:
|
|
||||||
logger.error(f"Error al actualizar estado del servicio tras fallo: {update_error}")
|
|
||||||
|
|
||||||
raise HTTPException(status_code=500, detail=f"Error interno en {operation_name}: {str(e)}")
|
|
||||||
|
|
||||||
@router.post("/services/pedimento")
|
@router.post("/services/pedimento")
|
||||||
async def get_pedimento(request: ServiceBaseSchema):
|
async def get_pedimento(request: ServiceBaseSchema):
|
||||||
"""
|
"""
|
||||||
@@ -350,7 +101,7 @@ async def get_pedimento_completo(request: ServiceRemesaSchema):
|
|||||||
|
|
||||||
logger.info(f"Iniciando procesamiento de pedimento completo - Pedimento: {request_data['pedimento']}")
|
logger.info(f"Iniciando procesamiento de pedimento completo - Pedimento: {request_data['pedimento']}")
|
||||||
|
|
||||||
# Obtener servicio de remesas existente
|
# Obtener servicio
|
||||||
service_data = await _get_pedimento_service(
|
service_data = await _get_pedimento_service(
|
||||||
pedimento_id=request_data['pedimento'],
|
pedimento_id=request_data['pedimento'],
|
||||||
service_type=3,
|
service_type=3,
|
||||||
@@ -1086,7 +837,7 @@ async def get_edocument(request: ServiceRemesaSchema):
|
|||||||
|
|
||||||
raise HTTPException(status_code=500, detail=f"Error interno en {operation_name}: {str(e)}")
|
raise HTTPException(status_code=500, detail=f"Error interno en {operation_name}: {str(e)}")
|
||||||
|
|
||||||
@router.post("/services/coves") # Sin Testear
|
@router.post("/services/coves")
|
||||||
async def get_cove(request: ServiceRemesaSchema):
|
async def get_cove(request: ServiceRemesaSchema):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -1253,7 +1004,7 @@ async def get_cove(request: ServiceRemesaSchema):
|
|||||||
|
|
||||||
raise HTTPException(status_code=500, detail=f"Error interno en {operation_name}: {str(e)}")
|
raise HTTPException(status_code=500, detail=f"Error interno en {operation_name}: {str(e)}")
|
||||||
|
|
||||||
@router.post("/services/acuseCove") # Sin Testear
|
@router.post("/services/acuseCove")
|
||||||
async def get_Acusecove(request: ServiceRemesaSchema):
|
async def get_Acusecove(request: ServiceRemesaSchema):
|
||||||
"""
|
"""
|
||||||
Obtiene los acuses de COVE de un pedimento mediante peticiones SOAP a VUCEM.
|
Obtiene los acuses de COVE de un pedimento mediante peticiones SOAP a VUCEM.
|
||||||
|
|||||||
Reference in New Issue
Block a user