Se agregaron cambios y estats para reportes
This commit is contained in:
@@ -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.'))
|
||||
Reference in New Issue
Block a user