Se modifico task de partidas
This commit is contained in:
95
tasks.py
95
tasks.py
@@ -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:
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
Reference in New Issue
Block a user