Files
backend/api/customs/signals/procesamiento.py
2025-09-22 18:43:29 -06:00

59 lines
2.6 KiB
Python

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)])