221 lines
9.5 KiB
Python
221 lines
9.5 KiB
Python
from celery import shared_task, group
|
|
from api.customs.models import ProcesamientoPedimento, Pedimento, Cove, EDocument
|
|
from core.utils import xml_controller
|
|
|
|
@shared_task
|
|
def crear_procesamiento_remesa(pedimento_id):
|
|
import logging
|
|
logger = logging.getLogger('api.customs.async_operations')
|
|
pedimento = Pedimento.objects.get(id=pedimento_id)
|
|
logger.info(f"[TAREA] crear_procesamiento_remesa para pedimento {pedimento_id}")
|
|
if pedimento.remesas:
|
|
existe = ProcesamientoPedimento.objects.filter(
|
|
pedimento=pedimento,
|
|
servicio_id=5, # ID del servicio de remesas
|
|
organizacion=pedimento.organizacion,
|
|
estado_id__in=[1, 2, 3, 4]
|
|
).exists()
|
|
if not existe:
|
|
logger.info(f"[TAREA] ProcesamientoPedimento remesa creado para pedimento {pedimento_id}")
|
|
ProcesamientoPedimento.objects.create(
|
|
pedimento=pedimento,
|
|
estado_id=1, # Estado "pendiente"
|
|
servicio_id=5,
|
|
organizacion=pedimento.organizacion
|
|
)
|
|
|
|
@shared_task
|
|
def crear_procesamiento_partida(pedimento_id):
|
|
import logging
|
|
logger = logging.getLogger('api.customs.async_operations')
|
|
pedimento = Pedimento.objects.get(id=pedimento_id)
|
|
logger.info(f"[TAREA] crear_procesamiento_partida para pedimento {pedimento_id}")
|
|
existe = ProcesamientoPedimento.objects.filter(
|
|
pedimento=pedimento,
|
|
servicio_id=4, # ID del servicio de partidas
|
|
organizacion=pedimento.organizacion,
|
|
estado_id__in=[1, 2, 3, 4]
|
|
).exists()
|
|
if not existe:
|
|
logger.info(f"[TAREA] ProcesamientoPedimento partida creado para pedimento {pedimento_id}")
|
|
ProcesamientoPedimento.objects.create(
|
|
pedimento=pedimento,
|
|
estado_id=1, # Estado "pendiente"
|
|
servicio_id=4,
|
|
organizacion=pedimento.organizacion
|
|
)
|
|
|
|
@shared_task
|
|
def crear_procesamiento_cove(pedimento_id):
|
|
import logging
|
|
logger = logging.getLogger('api.customs.async_operations')
|
|
pedimento = Pedimento.objects.get(id=pedimento_id)
|
|
logger.info(f"[TAREA] crear_procesamiento_cove para pedimento {pedimento_id}")
|
|
if pedimento.coves.exists():
|
|
existe = ProcesamientoPedimento.objects.filter(
|
|
pedimento=pedimento,
|
|
servicio_id=8, # ID del servicio de Coves
|
|
organizacion=pedimento.organizacion,
|
|
estado_id__in=[1, 2, 3, 4]
|
|
).exists()
|
|
if not existe:
|
|
logger.info(f"[TAREA] ProcesamientoPedimento cove creado para pedimento {pedimento_id}")
|
|
ProcesamientoPedimento.objects.create(
|
|
pedimento=pedimento,
|
|
estado_id=1, # Estado "pendiente"
|
|
servicio_id=8,
|
|
organizacion=pedimento.organizacion
|
|
)
|
|
|
|
@shared_task
|
|
def crear_procesamiento_acuse(pedimento_id):
|
|
import logging
|
|
logger = logging.getLogger('api.customs.async_operations')
|
|
pedimento = Pedimento.objects.get(id=pedimento_id)
|
|
logger.info(f"[TAREA] crear_procesamiento_acuse para pedimento {pedimento_id}")
|
|
if pedimento.coves.exists():
|
|
existe = ProcesamientoPedimento.objects.filter(
|
|
pedimento=pedimento,
|
|
servicio_id=6, # ID del servicio de Acuse Cove
|
|
organizacion=pedimento.organizacion,
|
|
estado_id__in=[1, 2, 3, 4]
|
|
).exists()
|
|
if not existe:
|
|
logger.info(f"[TAREA] ProcesamientoPedimento acuse creado para pedimento {pedimento_id}")
|
|
ProcesamientoPedimento.objects.create(
|
|
pedimento=pedimento,
|
|
estado_id=1, # Estado "pendiente"
|
|
servicio_id=6,
|
|
organizacion=pedimento.organizacion
|
|
)
|
|
|
|
@shared_task
|
|
def crear_procesamiento_acuse_cove(pedimento_id):
|
|
import logging
|
|
logger = logging.getLogger('api.customs.async_operations')
|
|
pedimento = Pedimento.objects.get(id=pedimento_id)
|
|
logger.info(f"[TAREA] crear_procesamiento_acuse_cove para pedimento {pedimento_id}")
|
|
if pedimento.coves.exists():
|
|
existe = ProcesamientoPedimento.objects.filter(
|
|
pedimento=pedimento,
|
|
servicio_id=9, # ID del servicio de Acuse Cove
|
|
organizacion=pedimento.organizacion,
|
|
estado_id__in=[1, 2, 3, 4]
|
|
).exists()
|
|
if not existe:
|
|
logger.info(f"[TAREA] ProcesamientoPedimento acuse_cove creado para pedimento {pedimento_id}")
|
|
ProcesamientoPedimento.objects.create(
|
|
pedimento=pedimento,
|
|
estado_id=1, # Estado "pendiente"
|
|
servicio_id=9,
|
|
organizacion=pedimento.organizacion
|
|
)
|
|
|
|
@shared_task
|
|
def crear_procesamiento_edocument(pedimento_id):
|
|
import logging
|
|
logger = logging.getLogger('api.customs.async_operations')
|
|
pedimento = Pedimento.objects.get(id=pedimento_id)
|
|
logger.info(f"[TAREA] crear_procesamiento_edocument para pedimento {pedimento_id}")
|
|
if pedimento.documentos.exists():
|
|
existe = ProcesamientoPedimento.objects.filter(
|
|
pedimento=pedimento,
|
|
servicio_id=7, # ID del servicio de EDocument
|
|
organizacion=pedimento.organizacion,
|
|
estado_id__in=[1, 2, 3, 4]
|
|
).exists()
|
|
if not existe:
|
|
logger.info(f"[TAREA] ProcesamientoPedimento edocument creado para pedimento {pedimento_id}")
|
|
ProcesamientoPedimento.objects.create(
|
|
pedimento=pedimento,
|
|
estado_id=1, # Estado "pendiente"
|
|
servicio_id=7,
|
|
organizacion=pedimento.organizacion
|
|
)
|
|
|
|
@shared_task
|
|
def crear_procesamiento_pedimento_completo(organizacion_id):
|
|
import logging
|
|
logger = logging.getLogger('api.customs.async_operations')
|
|
pedimentos = Pedimento.objects.filter(organizacion_id=organizacion_id)
|
|
for pedimento in pedimentos:
|
|
logger.info(f"[TAREA] crear_procesamiento_pedimento_completo para pedimento {pedimento.id}")
|
|
existe = ProcesamientoPedimento.objects.filter(
|
|
pedimento=pedimento,
|
|
servicio_id=3, # ID del servicio de Pedimento Completo
|
|
organizacion=pedimento.organizacion,
|
|
estado_id__in=[1, 2, 3, 4]
|
|
).exists()
|
|
if not existe:
|
|
logger.info(f"[TAREA] ProcesamientoPedimento pedimento_completo creado para pedimento {pedimento.id}")
|
|
ProcesamientoPedimento.objects.create(
|
|
pedimento=pedimento,
|
|
estado_id=1, # Estado "pendiente"
|
|
servicio_id=3,
|
|
organizacion=pedimento.organizacion
|
|
)
|
|
|
|
@shared_task
|
|
def crear_servicios(organizacion_id):
|
|
pedimentos = Pedimento.objects.filter(organizacion=organizacion_id)
|
|
for pedimento in pedimentos:
|
|
crear_procesamiento_remesa.apply_async(args=[str(pedimento.id)])
|
|
crear_procesamiento_partida.apply_async(args=[str(pedimento.id)])
|
|
crear_procesamiento_cove.apply_async(args=[str(pedimento.id)])
|
|
crear_procesamiento_acuse.apply_async(args=[str(pedimento.id)])
|
|
crear_procesamiento_acuse_cove.apply_async(args=[str(pedimento.id)])
|
|
crear_procesamiento_edocument.apply_async(args=[str(pedimento.id)])
|
|
|
|
@shared_task
|
|
def auditar_pedimentos(organizacion_id):
|
|
|
|
pedimentos = Pedimento.objects.filter(organizacion_id=organizacion_id)
|
|
for pedimento in pedimentos:
|
|
pc = pedimento.documents.filter(document_type__id=2).first()
|
|
if pc:
|
|
with open(f'./media/{pc.archivo}', 'r') as f:
|
|
xml_content = f.read()
|
|
|
|
xml_data = xml_controller.extract_data(xml_content)
|
|
|
|
pedimento.numero_operacion = xml_data.get('numero_operacion')
|
|
pedimento.curp_apoderado = xml_data.get('curp_apoderado')
|
|
pedimento.agente_aduanal = xml_data.get('agente_aduanal')
|
|
pedimento.numero_partidas = xml_data.get('numero_partidas')
|
|
pedimento.remesas = xml_data.get('remesas')
|
|
pedimento.tipo_operacion__id = xml_data.get('tipo_operacion')
|
|
pedimento.fecha_pago = xml_data.get('fecha_pago')
|
|
pedimento.pedimento_app = xml_data.get('fecha_pago')[2:4] + "-" + pedimento.aduana[:2] + "-" + pedimento.patente + "-" + pedimento.pedimentodd
|
|
|
|
for edoc in xml_data.get('edocuments', []):
|
|
EDocument.objects.get_or_create(
|
|
pedimento=pedimento,
|
|
organizacion=pedimento.organizacion,
|
|
clave=edoc.get('clave'),
|
|
descripcion=edoc.get('descripcion'),
|
|
numero_edocument=edoc.get('complemento1')
|
|
)
|
|
|
|
from django.db import IntegrityError
|
|
try:
|
|
for cove in xml_data.get('coves', []):
|
|
try:
|
|
Cove.objects.get_or_create(
|
|
pedimento=pedimento,
|
|
organizacion=pedimento.organizacion,
|
|
numero_cove=cove
|
|
)
|
|
except IntegrityError:
|
|
# Si ya existe por unique, recupera el objeto existente
|
|
Cove.objects.get(numero_cove=cove)
|
|
except:
|
|
# Si ya existe por unique, recupera el objeto existente
|
|
pass
|
|
|
|
@shared_task
|
|
def crear_todos_los_servicios():
|
|
from organization.models import Organizacion
|
|
organizaciones = Organizacion.objects.all()
|
|
for org in organizaciones:
|
|
crear_procesamiento_pedimento_completo.apply_async(args=[str(org.id)])
|
|
crear_servicios.apply_async(args=[str(org.id)]) |