diff --git a/api/customs/management/commands/README_microservicios.md b/api/customs/management/commands/README_microservicios.md new file mode 100644 index 0000000..1c1423e --- /dev/null +++ b/api/customs/management/commands/README_microservicios.md @@ -0,0 +1,52 @@ +# Comando de Microservicios + +Este comando permite disparar tareas de procesamiento masivo por organización o por pedimento en el sistema EFC. + +## Uso básico + +```bash +python manage.py microservicios [--organizacion_id=] [--procesamiento=] [--todos] +``` + +## Opciones + +- `--organizacion_id `: Ejecuta los procesamientos solo para la organización indicada. Si se omite, se procesan todas las organizaciones. +- `--procesamiento `: Ejecuta solo el tipo de procesamiento indicado para la organización. Si se omite, se ejecutan todos los procesamientos. +- `--todos`: Ejecuta todos los procesos para todas las organizaciones. + +## Tipos de procesamiento disponibles + +- `coves`: Procesa COVEs por organización/pedimento +- `edocs`: Procesa E-Documents por organización/pedimento +- `acuses`: Procesa acuses por organización/pedimento +- `acuse_coves`: Procesa acuse de COVEs por organización/pedimento +- `partidas`: Procesa partidas por organización/pedimento +- `pedimentos_completos`: Procesa pedimentos completos por organización/pedimento +- `remesas`: Procesa remesas por organización/pedimento + +## Ejemplos + +### Procesar todos los tipos para todas las organizaciones +```bash +python manage.py microservicios --todos +``` + +### Procesar solo COVEs para una organización +```bash +python manage.py microservicios --organizacion_id=ID_ORG --procesamiento=coves +``` + +### Procesar todos los tipos para una organización +```bash +python manage.py microservicios --organizacion_id=ID_ORG +``` + +### Procesar todos los tipos para un pedimento específico +```bash +python manage.py microservicios --pedimento_id=ID_PEDIMENTO +``` + +## Notas +- El comando dispara las tareas de Celery de forma asíncrona. +- Revisa los logs y el estado de las tareas en el panel de administración de Celery o en los logs del sistema. +- Si agregas nuevos tipos de procesamiento, actualiza la función `ejecutar_procesamiento_por_organizacion` en `microservice_v2.py`. diff --git a/api/customs/management/commands/auditor.py b/api/customs/management/commands/auditor.py index f512234..3c2387f 100644 --- a/api/customs/management/commands/auditor.py +++ b/api/customs/management/commands/auditor.py @@ -1,6 +1,5 @@ from django.core.management.base import BaseCommand from api.customs.tasks.auditoria import ( - auditar_procesamiento_remesas, auditar_coves, auditar_acuse_cove, auditar_edocuments, diff --git a/api/customs/management/commands/microservicios.py b/api/customs/management/commands/microservicios.py new file mode 100644 index 0000000..17450b0 --- /dev/null +++ b/api/customs/management/commands/microservicios.py @@ -0,0 +1,44 @@ +from django.core.management.base import BaseCommand +from api.customs.models import Organizacion +from api.customs.tasks import microservice_v2 + +class Command(BaseCommand): + help = 'Ejecuta tareas de microservicio por organización y procesamiento.' + + def add_arguments(self, parser): + parser.add_argument( + '--organizacion_id', + type=str, + help='ID de la organización a procesar (opcional, si no se envía se procesan todas)' + ) + parser.add_argument( + '--procesamiento', + type=str, + help='Tipo de procesamiento a ejecutar (opcional, si no se envía se ejecutan todos)' + ) + parser.add_argument( + '--todos', + type=bool, + help='Ejecutar todos los procesos (opcional)' + ) + + def handle(self, *args, **options): + + todos = options.get('todos', False) + organizacion_id = options.get('organizacion_id') + procesamiento = options.get('procesamiento') + if todos: + organizaciones = Organizacion.objects.all() + for org in organizaciones: + microservice_v2.ejecutar_todos_por_organizacion(org.id) + self.stdout.write(self.style.SUCCESS('Se ejecutaron todos los procesos para todas las organizaciones.')) + return + + if organizacion_id: + if procesamiento: + microservice_v2.ejecutar_procesamiento_por_organizacion(organizacion_id, procesamiento) + self.stdout.write(self.style.SUCCESS(f'Se ejecutó el procesamiento {procesamiento} para la organización {organizacion_id}.')) + else: + microservice_v2.ejecutar_todos_por_organizacion(organizacion_id) + self.stdout.write(self.style.SUCCESS(f'Se ejecutaron todos los procesos para la organización {organizacion_id}.')) + \ No newline at end of file diff --git a/api/customs/tasks/microservice_v2.py b/api/customs/tasks/microservice_v2.py index ba0b846..e2a72c1 100644 --- a/api/customs/tasks/microservice_v2.py +++ b/api/customs/tasks/microservice_v2.py @@ -427,6 +427,35 @@ def documentos_con_errores(organizacion_id): print(f"Documento con error: {doc.id} en organización {organizacion_id}") # Aquí puedes agregar lógica adicional para manejar documentos con errores # como enviar notificaciones, registrar en un log, etc. -# documentos = Document.objects.all() --- IGNORE --- + + +def ejecutar_por_organizacion_y_procesamiento(organizacion_id, procesamiento): + if procesamiento == 'coves': + procesar_coves.delay(organizacion_id) + elif procesamiento == 'edocs': + procesar_edocs.delay(organizacion_id) + elif procesamiento == 'acuses': + procesar_acuses.delay(organizacion_id) + elif procesamiento == 'acuse_coves': + procesar_acuse_coves.delay(organizacion_id) + elif procesamiento == 'partidas': + procesar_partidas.delay(organizacion_id) + elif procesamiento == 'pedimentos_completos': + procesar_pedimentos_completos.delay(organizacion_id) + elif procesamiento == 'remesas': + procesar_remesas.delay(organizacion_id) + + else: + # Procesamiento no reconocido + pass + +def ejecutar_todos_por_organizacion(organizacion_id): + procesar_coves.delay(organizacion_id) + procesar_edocs.delay(organizacion_id) + procesar_acuses.delay(organizacion_id) + procesar_acuse_coves.delay(organizacion_id) + procesar_partidas.delay(organizacion_id) + procesar_pedimentos_completos.delay(organizacion_id) + procesar_remesas.delay(organizacion_id)