Browse Source

Adiciona script para remover multiplos parlamentares

Organiza models schemes

Altera modo de pegar pk do autor primário

Altera __str__ de Autor

Corrige checagem de lista

Reverte alteração em Meta

Reorganiza ordem de transferência e exclusão

Altera modo de armazenamento de lista para dicionário

Adiciona validação para existência de parlamentar

Fix str erro

Concerta dicionário pks_objs

Co-authored-by: Edward Ribeiro <eribeiro@interlegis.leg.br>
Co-authored-by: Victor Fabre <victorfabre@me.com>
pull/2626/head
Vinícius Cantuária 7 years ago
parent
commit
7438336066
  1. 15
      sapl/parlamentares/forms.py
  2. 108
      scripts/remove_multiplos_parlamentares.py

15
sapl/parlamentares/forms.py

@ -255,6 +255,21 @@ class ParlamentarCreateForm(ParlamentarForm):
attrs={'id': 'texto-rico'}) attrs={'id': 'texto-rico'})
} }
def clean(self):
super().clean()
if not self.is_valid():
return self.cleaned_data
cleaned_data = self.cleaned_data
parlamentar = Parlamentar.objects.filter(nome_parlamentar=cleaned_data['nome_parlamentar'])
if parlamentar:
self.logger.error('Parlamentar já cadastrado.')
raise ValidationError('Parlamentar já cadastrado.')
return cleaned_data
@transaction.atomic @transaction.atomic
def save(self, commit=True): def save(self, commit=True):
parlamentar = super(ParlamentarCreateForm, self).save(commit) parlamentar = super(ParlamentarCreateForm, self).save(commit)

108
scripts/remove_multiplos_parlamentares.py

@ -0,0 +1,108 @@
import re
from sapl.base.models import Autor
from sapl.comissoes.models import Participacao
from sapl.materia.models import Relatoria, UnidadeTramitacao
from sapl.parlamentares.models import Parlamentar, ComposicaoMesa, Dependente, Filiacao, Mandato
from sapl.sessao.models import IntegranteMesa, JustificativaAusencia, Orador, OradorExpediente, PresencaOrdemDia, \
RetiradaPauta, SessaoPlenariaPresenca, VotoParlamentar
def get_multiple(top_models):
pks_objs = {}
for model in top_models:
model_name = re.findall(r'\w+', str(model))[-1]
pks_objs.update({model_name: []})
objs = model.objects.all()
for obj in objs:
if model_name == 'Autor':
kwargs = {'nome': obj.nome}
elif model_name == 'Parlamentar':
kwargs = {'nome_parlamentar': obj.nome_parlamentar}
else:
print('Model não reconhecida.')
return
pesquisa_obj = model.objects.filter(**kwargs)
if pesquisa_obj.count() > 1:
multiplos_objs = [p.pk for p in pesquisa_obj]
multiplos_objs.sort()
if multiplos_objs not in pks_objs.get(model_name):
pks_objs.get(model_name).append(multiplos_objs)
return pks_objs
def transfer_author(pks_list):
for pks in pks_list:
for pk in pks[1:]:
autor_clonado = Autor.objects.get(pk=pk)
for autoria in autor_clonado.autoria_set.all():
autoria.autor_id = pks[0]
autoria.save()
for proposicao in autor_clonado.proposicao_set.all():
proposicao.autor_id = pks[0]
proposicao.save()
for autorianorma in autor_clonado.autorianorma_set.all():
autorianorma.autor_id = pks[0]
autorianorma.save()
for documentoadministrativo in autor_clonado.documentoadministrativo_set.all():
documentoadministrativo.autor_id = pks[0]
documentoadministrativo.save()
for protocolo in autor_clonado.protocolo_set.all():
protocolo.autor_id = pks[0]
protocolo.save()
def transfer_congressman(models, pks_list):
for pks in pks_list:
for pk in pks[1:]:
for model in models:
for obj in model.objects.filter(parlamentar_id=pk):
obj.parlamentar_id = pks[0]
obj.save()
def purge(top_models, pks_dict):
for model in top_models:
model_name = re.findall(r'\w+', str(model))[-1]
lista = pks_dict.get(model_name)
if lista:
for pks in lista:
for pk in pks[1:]:
for obj in model.objects.filter(pk=pk):
obj.delete()
def main():
top_models = [Autor, Parlamentar]
models = [ComposicaoMesa, Dependente, Filiacao, IntegranteMesa, JustificativaAusencia, Mandato, Orador,
OradorExpediente, Participacao, PresencaOrdemDia, Relatoria, RetiradaPauta, SessaoPlenariaPresenca,
UnidadeTramitacao, VotoParlamentar]
pks_dict = get_multiple(top_models)
author_list = pks_dict.get('Autor')
if author_list:
transfer_author(author_list)
congressman_list = pks_dict.get('Parlamentar')
if congressman_list:
transfer_congressman(models, congressman_list)
purge(top_models, pks_dict)
if __name__ == '__main__':
main()
Loading…
Cancel
Save