Se agregaron cambios y estats para reportes

This commit is contained in:
2025-10-04 22:16:16 -06:00
parent 0aa28b4394
commit 0c6dd348e7
6 changed files with 604 additions and 34 deletions

View File

@@ -0,0 +1,37 @@
from django.core.management.base import BaseCommand
from django.db.models import Count
from api.customs.models import Pedimento, Cove, EDocument, Partida
from api.record.models import Document
class Command(BaseCommand):
help = 'Elimina pedimentos duplicados dejando el que tiene más documentos, coves, edocs y partidas.'
def handle(self, *args, **options):
duplicados = (
Pedimento.objects
.values('pedimento_app')
.annotate(total=Count('id'))
.filter(total__gt=1)
)
for dup in duplicados:
pedimentos = (
Pedimento.objects
.filter(pedimento_app=dup['pedimento_app'])
.annotate(
num_docs=Count('documents'),
num_coves=Count('coves'),
num_edocs=Count('documentos'),
num_partidas=Count('partidas')
)
.order_by('-num_docs', '-num_coves', '-num_edocs', '-num_partidas')
)
# Mantener el primero, eliminar los demás
to_delete = pedimentos[1:]
for ped in to_delete:
self.stdout.write(f'Eliminando pedimento {ped.id} ({ped.pedimento_app})')
Cove.objects.filter(pedimento=ped).delete()
EDocument.objects.filter(pedimento=ped).delete()
Partida.objects.filter(pedimento=ped).delete()
Document.objects.filter(pedimento=ped).delete()
ped.delete()
self.stdout.write(self.style.SUCCESS('Eliminación de duplicados completada.'))

View File

@@ -1,8 +1,7 @@
from celery import group
from celery import shared_task, group
from api.customs.models import *
from api.record.models import *
from api.customs.serializers import PedimentoSerializer
from api.vucem.models import *
import requests
@@ -292,4 +291,15 @@ def procesar_partidas(organizacion_id):
)
# Aquí puedes continuar con el resto de tu lógica
print(f"Servicio enviado para pedimento {pedimento.pedimento}")
print(f"Servicio enviado para pedimento {pedimento.pedimento}")
@shared_task
def documentos_con_errores(organizacion_id):
documentos = Document.objects.filter(organizacion_id=organizacion_id)
for doc in documentos:
if doc.document_type is None or doc.size is None or doc.archivo is None:
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 ---