mirror of https://github.com/interlegis/sapl.git
Vinícius Cantuária
6 years ago
committed by
Leandro Roberto
2 changed files with 120 additions and 0 deletions
@ -0,0 +1,105 @@ |
|||
from django.db.models import Count |
|||
|
|||
from sapl.base.models import Autor |
|||
from sapl.comissoes.models import Participacao |
|||
from sapl.materia.models import Relatoria, UnidadeTramitacao, Autoria, Proposicao |
|||
from sapl.norma.models import AutoriaNorma |
|||
from sapl.parlamentares.models import Parlamentar, ComposicaoMesa, Dependente, Filiacao, Mandato, Frente, Votante |
|||
from sapl.protocoloadm.models import Protocolo, DocumentoAdministrativo |
|||
from sapl.sessao.models import IntegranteMesa, JustificativaAusencia, OradorExpediente, PresencaOrdemDia, \ |
|||
RetiradaPauta, SessaoPlenariaPresenca, VotoParlamentar, OradorOrdemDia |
|||
|
|||
|
|||
models = [ComposicaoMesa, Dependente, Filiacao, IntegranteMesa, JustificativaAusencia, Mandato, OradorOrdemDia, |
|||
OradorExpediente, Participacao, PresencaOrdemDia, Relatoria, RetiradaPauta, SessaoPlenariaPresenca, |
|||
UnidadeTramitacao, VotoParlamentar, Votante] |
|||
|
|||
# Tratar FRENTE pois ela é 1-to-many (campo parlamentares) com Parlamentar |
|||
|
|||
models_autor = [AutoriaNorma, Autoria, Proposicao, Protocolo, DocumentoAdministrativo] |
|||
|
|||
## Verificar se TipoAutor é sempre 1 para parlamentar e ContentType é sempre 26 para parlamentar. |
|||
TIPO_PARLAMENTAR = 1 |
|||
CONTENT_TYPE_PARLAMENTAR = 26 |
|||
|
|||
|
|||
def recupera_parlamentares(): |
|||
return [[parlamentar for parlamentar in Parlamentar.objects.filter(nome_parlamentar=nome_parlamentar).order_by('id')] |
|||
for nome_parlamentar in Parlamentar.objects.values_list('nome_parlamentar', flat=True) |
|||
.annotate(qntd=Count('nome_parlamentar')).filter(qntd__gt=1)] |
|||
|
|||
|
|||
def deduplica_parlamentares(parlamentares): |
|||
for parlamentar in parlamentares: |
|||
parlamentar_principal = parlamentar[0] |
|||
print('Corrigindo parlamentar {}'.format(parlamentar_principal)) |
|||
for clone in parlamentar[1:]: |
|||
if parlamentar_principal.biografia and clone.biografia: |
|||
parlamentar_principal.biografia += f'\n\n------------------------\n\n{clone.biografia}' |
|||
parlamentar_principal.save() |
|||
elif clone.biografia: |
|||
parlamentar_principal.biografia = clone.biografia |
|||
|
|||
autor_principal = Autor.objects.filter(tipo_id=TIPO_PARLAMENTAR, |
|||
content_type_id=CONTENT_TYPE_PARLAMENTAR, |
|||
object_id=parlamentar_principal.id) |
|||
|
|||
for a in Autor.objects.filter(tipo_id=TIPO_PARLAMENTAR, content_type_id=CONTENT_TYPE_PARLAMENTAR, object_id=clone.id): |
|||
print(a) |
|||
if not autor_principal: |
|||
print('Ajustando autor de %s' % parlamentar) |
|||
a.object_id = parlamentar_principal.id |
|||
a.save() |
|||
else: |
|||
print('Movendo referencias de autor') |
|||
for ma in models_autor: |
|||
for ra in ma.objects.filter(autor=a): |
|||
ra.autor = autor_principal[0] |
|||
ra.save() |
|||
a.delete() |
|||
|
|||
# Muda apontamento de models que referenciam parlamentar |
|||
for model in models: |
|||
for obj in model.objects.filter(parlamentar_id=clone.id): |
|||
obj.parlamentar = parlamentar_principal |
|||
obj.save() |
|||
|
|||
frentes = Frente.objects.filter(parlamentares=parlamentar_principal) |
|||
for frente in Frente.objects.select_related.filter(parlamentares=clone): |
|||
if frente not in frentes: |
|||
frente.parlamentares.add(parlamentar_principal) |
|||
|
|||
frente.parlamentares.remove(clone) |
|||
|
|||
clone.delete() |
|||
|
|||
|
|||
def estatisticas(parlamentares): |
|||
stats = [] |
|||
for ps in parlamentares: |
|||
for p in ps: |
|||
d = { |
|||
'id': p.id, |
|||
'nome': p.nome_parlamentar, |
|||
'stats': {m.__name__: m.objects.filter(parlamentar=p).count() for m in models} |
|||
} |
|||
for m in models_autor: |
|||
d['stats'].update({m.__name__:m.objects.filter(autor__object_id=p.id, |
|||
autor__content_type=CONTENT_TYPE_PARLAMENTAR, |
|||
autor__tipo_id=TIPO_PARLAMENTAR).count()}) |
|||
stats.append(d) |
|||
for s in stats: |
|||
print('---------------------------------------------------') |
|||
print(s['id'], s['nome']) |
|||
print(s['stats']) |
|||
|
|||
|
|||
def main(): |
|||
parlamentares = recupera_parlamentares() |
|||
estatisticas(parlamentares) |
|||
deduplica_parlamentares(parlamentares) |
|||
estatisticas(parlamentares) |
|||
|
|||
|
|||
if __name__ == '__main__': |
|||
main() |
Loading…
Reference in new issue