Se modifico task de partidas

This commit is contained in:
2025-09-03 07:59:34 -06:00
parent c572d4beed
commit c58e9dd3b9
2 changed files with 64 additions and 33 deletions

View File

@@ -197,46 +197,77 @@ def partidas_task(self, **kwargs):
credentials = await _get_vucem_credentials(contribuyente_id, operation_name) credentials = await _get_vucem_credentials(contribuyente_id, operation_name)
self.update_state(state='PROGRESS', meta={'status': 'Realizando petición SOAP'}) # Obtener número de partidas
logger.info("[TASK] Realizando petición SOAP para partidas...") numero_partidas = service_data['pedimento'].get('numero_partidas', 0)
partidas_procesadas = []
logger.info(f"Procesando {numero_partidas} partidas...")
if numero_partidas <= 0:
logger.warning("El pedimento no tiene partidas para procesar")
await _update_service_status(service_data['id'], ESTADO_ERROR, service_data, operation_name)
raise Exception("No se encontraron partidas para el pedimento")
from utils.peticiones import get_soap_partidas from utils.peticiones import get_soap_partidas
soap_response = await get_soap_partidas( for partida_num in range(1, numero_partidas + 1):
credenciales=credentials, try:
response_service=service_data, logger.info(f"Procesando partida {partida_num}/{numero_partidas}")
soap_controller=soap_controller, soap_response = await get_soap_partidas(
partida=request_data.get('partida', '') credenciales=credentials,
) response_service=service_data,
soap_controller=soap_controller,
if not soap_response: partida=str(partida_num)
raise Exception("Error en la petición SOAP para partidas") )
if soap_response:
logger.info("[TASK] Petición SOAP para partidas completada exitosamente") partidas_procesadas.append({
# Subir documento de partidas si la petición fue exitosa "numero": partida_num,
try: "procesada": True,
upload_result = await _post_edocuments( "documento": soap_response.get('documento', {})
response_service=service_data, })
identificadores_ed=[soap_response.get('documento', {}).get('numero_edocument')] logger.info(f"Partida {partida_num} procesada exitosamente")
) else:
logger.info(f"Documento de partidas subido exitosamente: {upload_result}") logger.warning(f"No se pudo procesar la partida {partida_num}")
except Exception as upload_err: partidas_procesadas.append({
logger.error(f"Error al subir documento de partidas: {upload_err}") "numero": partida_num,
"procesada": False,
"error": "Error en petición SOAP"
})
except Exception as e:
logger.error(f"Error al procesar partida {partida_num}: {e}")
partidas_procesadas.append({
"numero": partida_num,
"procesada": False,
"error": str(e)
})
continue
partidas_exitosas = [p for p in partidas_procesadas if p.get('procesada', False)]
if not partidas_exitosas:
logger.error("No se pudo procesar ninguna partida")
await _update_service_status(service_data['id'], ESTADO_ERROR, service_data, operation_name)
raise Exception("No se pudo procesar ninguna partida")
self.update_state(state='PROGRESS', meta={'status': 'Finalizando proceso'}) self.update_state(state='PROGRESS', meta={'status': 'Finalizando proceso'})
await _update_service_status(service_data['id'], ESTADO_FINALIZADO, service_data, operation_name) await _update_service_status(service_data['id'], ESTADO_FINALIZADO, service_data, operation_name)
response_data = await _create_response( response_data = await _create_response(
service_data=service_data, service_data=service_data,
additional_data={ additional_data={
"partidas": soap_response, "partidas": partidas_procesadas,
"documento": soap_response.get('documento', {}), "total_partidas": numero_partidas,
"xml_content": soap_response.get('xml_content', {}) "partidas_exitosas": len(partidas_exitosas),
"partidas_fallidas": len(partidas_procesadas) - len(partidas_exitosas)
}, },
success_message="Partidas obtenidas exitosamente" success_message=f"Se procesaron {len(partidas_exitosas)}/{numero_partidas} partidas exitosamente"
) )
logger.info(f"[TASK] Consulta de partidas completada exitosamente - Servicio: {service_data['id']}") if len(partidas_exitosas) < numero_partidas:
response_data["warnings"] = [
f"Se procesaron solo {len(partidas_exitosas)} de {numero_partidas} partidas"
]
logger.info(f"Procesamiento de partidas completado - Exitosas: {len(partidas_exitosas)}/{numero_partidas}")
return response_data return response_data
except Exception as e: except Exception as e:

View File

@@ -276,7 +276,7 @@ async def get_soap_pedimento_completo(credenciales, response_service, soap_contr
# Realizar petición SOAP # Realizar petición SOAP
logger.info("Realizando petición SOAP...") logger.info("Realizando petición SOAP...")
print(f"XML SOAP generado: {soap_xml}") # 👈 Registra el XML completo
# Headers específicos para este servicio SOAP # Headers específicos para este servicio SOAP
soap_headers = { soap_headers = {
'Content-Type': 'text/xml; charset=utf-8' 'Content-Type': 'text/xml; charset=utf-8'