mirror of https://github.com/interlegis/sapl.git
Edward Ribeiro
6 years ago
1 changed files with 193 additions and 0 deletions
@ -0,0 +1,193 @@ |
|||
from django.contrib.contenttypes.models import ContentType |
|||
from django.core.exceptions import ObjectDoesNotExist |
|||
from django.db import IntegrityError, transaction |
|||
from django.db.models import Count |
|||
|
|||
from sapl.base.models import TipoAutor, Autor |
|||
from sapl.comissoes.models import Composicao, Comissao, Reuniao |
|||
from sapl.materia.models import DespachoInicial, Autoria, Proposicao, Relatoria, UnidadeTramitacao, Tramitacao, \ |
|||
MateriaLegislativa |
|||
from sapl.norma.models import AutoriaNorma |
|||
from sapl.protocoloadm.models import Protocolo, DocumentoAdministrativo, TramitacaoAdministrativo |
|||
|
|||
models_comissoes = [Composicao, DespachoInicial, Relatoria, Reuniao, Relatoria] |
|||
|
|||
models_autor = [Autoria, AutoriaNorma, Proposicao, Protocolo, DocumentoAdministrativo] |
|||
|
|||
|
|||
def move_comissao(from_id, to_id): |
|||
# TODO: verificar se content type é o mesmo para todos os BD |
|||
content_type = ContentType.objects.get(id=37) |
|||
tipo = TipoAutor.objects.get(id=2) |
|||
|
|||
_from_comissao = Comissao.objects.get(id=from_id) |
|||
_to_comissao = Comissao.objects.get(id=to_id) |
|||
|
|||
## TRATA TRAMITACAO |
|||
try: |
|||
_to_unidade_tramitacao = UnidadeTramitacao.objects.get(comissao=_to_comissao) |
|||
except ObjectDoesNotExist: |
|||
_to_unidade_tramitacao = UnidadeTramitacao.objects.create(comissao=_to_comissao) |
|||
|
|||
models_tramitacao = [Tramitacao, TramitacaoAdministrativo] |
|||
|
|||
for m in models_tramitacao: |
|||
for t1 in m.objects.filter(unidade_tramitacao_local__comissao=_from_comissao): |
|||
t1.unidade_tramitacao_local = _to_unidade_tramitacao |
|||
t1.save() |
|||
|
|||
for t1 in m.objects.filter(unidade_tramitacao_destino__comissao=_from_comissao): |
|||
t1.unidade_tramitacao_destino = _to_unidade_tramitacao |
|||
t1.save() |
|||
|
|||
UnidadeTramitacao.objects.filter(comissao=_from_comissao).delete() |
|||
|
|||
for m in models_comissoes: |
|||
print('atualizando model {}'.format(m)) |
|||
objects = m.objects.filter(comissao=_from_comissao) |
|||
for o in objects: |
|||
try: |
|||
o.comissao = _to_comissao |
|||
o.save() |
|||
except IntegrityError as e: |
|||
print(e) |
|||
o.delete() |
|||
|
|||
|
|||
|
|||
autor_from = Autor.objects.filter(content_type=content_type, |
|||
tipo=tipo, |
|||
object_id=_from_comissao.id).values_list('id') |
|||
if not autor_from: |
|||
return |
|||
|
|||
try: |
|||
autor_to = Autor.objects.get(content_type=content_type, |
|||
tipo=tipo, |
|||
object_id=_to_comissao.id) |
|||
except ObjectDoesNotExist: |
|||
print('criando autor para {}-{}'.format(_to_comissao.id, _to_comissao.nome)) |
|||
autor_to = Autor.objects.create(nome=_to_comissao.nome, |
|||
tipo=tipo, |
|||
content_type=content_type, |
|||
object_id=_to_comissao.id) |
|||
|
|||
to_delete = [] |
|||
|
|||
for m in models_autor: |
|||
print('atualizando autoria para {}'.format(m)) |
|||
objects = m.objects.filter(autor_id__in=autor_from) |
|||
for o in objects: |
|||
try: |
|||
original_autor = o.autor |
|||
o.autor = autor_to |
|||
o.save() |
|||
except IntegrityError as e: |
|||
o.autor = original_autor |
|||
o.save() |
|||
to_delete.append(o) |
|||
|
|||
for d in to_delete: |
|||
d.delete() |
|||
|
|||
# REMOVE AUTORES DUPLICADOS |
|||
Autor.objects.filter(id__in=autor_from).delete() |
|||
|
|||
|
|||
def estatisticas(): |
|||
# TODO: verificar se content type é o mesmo para todos os BD |
|||
content_type = ContentType.objects.get(id=37) |
|||
tipo = TipoAutor.objects.get(id=2) |
|||
|
|||
for c in Comissao.objects.all().order_by('nome'): |
|||
print('-------------------------------------------------------------------') |
|||
print(c) |
|||
|
|||
for m in models_comissoes + [UnidadeTramitacao]: |
|||
model_name = m.__name__ |
|||
total = m.objects.filter(comissao=c).count() |
|||
print(model_name, total) |
|||
|
|||
try: |
|||
autor = Autor.objects.get(content_type=content_type, tipo=tipo, object_id=c.id) |
|||
for a in models_autor: |
|||
model_name = a.__name__ |
|||
total = a.objects.filter(autor=autor).count() |
|||
print(model_name, total) |
|||
except Exception as e: |
|||
print(e) |
|||
pass |
|||
print('-------------------------------------------------------------------') |
|||
|
|||
|
|||
def delete_comissao(id): |
|||
# TODO: verificar se content type é o mesmo para todos os BD |
|||
content_type = ContentType.objects.get(id=37) |
|||
tipo = TipoAutor.objects.get(id=2) |
|||
comissao = Comissao.objects.get(id=id) |
|||
|
|||
for m in models_comissoes: |
|||
m.objects.filter(comissao=comissao).delete() |
|||
|
|||
try: |
|||
autor = Autor.objects.get(content_type=content_type, tipo=tipo, object_id=comissao.id) |
|||
for a in models_autor: |
|||
a.objects.filter(autor=autor).delete() |
|||
autor.delete() |
|||
except Exception as e: |
|||
print(e) |
|||
|
|||
try: |
|||
unidate_tramitacao = UnidadeTramitacao.objects.get(comissao=comissao) |
|||
models_tramitacao = [Tramitacao, TramitacaoAdministrativo] |
|||
for m in models_tramitacao: |
|||
m.objects.filter(unidade_tramitacao_local=unidate_tramitacao).delete() |
|||
m.objects.filter(unidade_tramitacao_destino=unidate_tramitacao).delete() |
|||
unidate_tramitacao.delete() |
|||
except Exception as e: |
|||
print(e) |
|||
|
|||
comissao.delete() |
|||
|
|||
|
|||
def deduplicate_comissao(): |
|||
# TODO: verificar se content type é o mesmo para todos os BD |
|||
content_type = ContentType.objects.get(id=37) |
|||
tipo = TipoAutor.objects.get(id=2) |
|||
comissoes_repetidas = [(c['nome'], c['total']) for c in |
|||
Comissao.objects.values('nome').annotate(total=Count('nome')).filter(total__gt=1)] |
|||
print(comissoes_repetidas) |
|||
for cr in comissoes_repetidas: |
|||
comissoes = list(Comissao.objects.filter(nome=cr[0]).order_by('id').values_list('id', flat=True)) |
|||
|
|||
print(cr) |
|||
print(comissoes) |
|||
|
|||
## TODO: PODEM EXISTIR CASOS DA COMISSAO DE DESTINO NAO TER AUTOR, TERIA QUE CRIAR |
|||
## TODO: POR ENQUANTO OPTEI POR PEGAR A ULTIMA COMISSAO COM AUTOR CRIADO |
|||
while True: |
|||
c = comissoes.pop() |
|||
try: |
|||
Autor.objects.get(content_type=content_type, tipo=tipo, object_id=c) |
|||
comissoes = [c] + comissoes |
|||
break |
|||
except ObjectDoesNotExist: |
|||
comissoes.append(c) |
|||
|
|||
print(comissoes) |
|||
|
|||
principal = comissoes[0] |
|||
repetidas = comissoes[1:] |
|||
|
|||
for r in repetidas: |
|||
move_comissao(r, principal) |
|||
print('apagando comissao {}'.format(r)) |
|||
Comissao.objects.get(id=r).delete() |
|||
|
|||
estatisticas() |
|||
deduplicate_comissao() |
|||
estatisticas() |
|||
|
|||
|
|||
|
|||
|
Loading…
Reference in new issue