from django.db.models.signals import post_save from django.dispatch import receiver from django.db import transaction from time import sleep from api.customs.models import Pedimento, ProcesamientoPedimento, Cove, EDocument from api.customs.tasks.internal_services import ( crear_procesamiento_remesa, crear_procesamiento_partida, crear_procesamiento_cove, crear_procesamiento_acuse_cove, crear_procesamiento_acuse, crear_procesamiento_edocument ) from api.customs.tasks.microservice import ( ejecutar_pedimento_completo, procesar_pedimento_completo_individual ) @receiver(post_save, sender=Pedimento) def trigger_celery_task_on_create(sender, instance, created, **kwargs): if created: procesar_pedimento_completo_individual.apply_async(args=[instance.id, instance.organizacion.id]) @receiver(post_save, sender=Pedimento) def trigger_celery_task_on_update(sender, instance, created,**kwargs): if not created: import logging logger = logging.getLogger('api.customs.async_operations') logger.info(f"Pedimento actualizado: {instance.id}, verificando servicios a crear...") sleep(4) def enqueue_tasks(): if instance.remesas: logger.info(f"Creando proceso de remesas para pedimento {instance.id}") crear_procesamiento_remesa.apply_async(args=[str(instance.id)]) if hasattr(instance, 'numero_partidas') and instance.numero_partidas and instance.numero_partidas > 0: logger.info(f"Creando proceso de partida para pedimento {instance.id}") crear_procesamiento_partida.apply_async(args=[str(instance.id)]) transaction.on_commit(enqueue_tasks) @receiver(post_save, sender=Cove) def trigger_celery_task_on_cove_create(sender, instance, created, **kwargs): if created: import logging logger = logging.getLogger('api.customs.async_operations') logger.info(f"Cove creado: {instance.id}, creando procesamiento...") crear_procesamiento_cove.apply_async(args=[str(instance.pedimento.id)]) crear_procesamiento_acuse_cove.apply_async(args=[str(instance.pedimento.id)]) @receiver(post_save, sender=EDocument) def trigger_celery_task_on_edocument_create(sender, instance, created, **kwargs): if created: import logging logger = logging.getLogger('api.customs.async_operations') logger.info(f"EDocument creado: {instance.id}, creando procesamiento...") crear_procesamiento_edocument.apply_async(args=[str(instance.pedimento.id)]) crear_procesamiento_acuse.apply_async(args=[str(instance.pedimento.id)])