mirror of https://github.com/interlegis/sapl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
5.5 KiB
179 lines
5.5 KiB
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,
|
|
Frente,
|
|
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,
|
|
):
|
|
if not autor_principal:
|
|
print("Ajustando autor de %s" % parlamentar)
|
|
a.object_id = parlamentar_principal.id
|
|
try:
|
|
a.save()
|
|
except Exception as e:
|
|
print(
|
|
f"Erro ao mover referencia de autor do model {ma} para {autor_principal[0]}"
|
|
)
|
|
print(e)
|
|
else:
|
|
print("Movendo referencias de autor")
|
|
for ma in models_autor:
|
|
for ra in ma.objects.filter(autor=a):
|
|
ra.autor = autor_principal[0]
|
|
try:
|
|
ra.save()
|
|
except Exception as e:
|
|
print(
|
|
f"Erro ao mover referencia de autor do model {ma} para {autor_principal[0]}"
|
|
)
|
|
print(e)
|
|
a.delete()
|
|
|
|
# Muda apontamento de models que referenciam parlamentar
|
|
for model in models:
|
|
print(f"Mudando apontamento de model {model}...")
|
|
for obj in model.objects.filter(parlamentar_id=clone.id):
|
|
obj.parlamentar = parlamentar_principal
|
|
try:
|
|
obj.save()
|
|
except Exception as e:
|
|
print(
|
|
f"Erro ao alterar parlamentar do model {model} para a instancia {obj}"
|
|
)
|
|
print(e)
|
|
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()
|
|
|