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