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.
106 lines
3.9 KiB
106 lines
3.9 KiB
import re
|
|
|
|
from sapl.base.models import Autor
|
|
from sapl.comissoes.models import Participacao
|
|
from sapl.materia.models import Relatoria, UnidadeTramitacao, Autoria
|
|
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_multiples():
|
|
models = [Autor, Parlamentar]
|
|
multiples = {}
|
|
|
|
for model in models:
|
|
model_name = re.findall(r'\w+', str(model))[-1]
|
|
multiples[model_name] = {
|
|
'kwargs': {},
|
|
'pks': []
|
|
}
|
|
|
|
objs = model.objects.all()
|
|
for obj in objs:
|
|
if model_name == 'Autor':
|
|
multiples[model_name]['kwargs']['nome'] = obj.nome
|
|
elif model_name == 'Parlamentar':
|
|
multiples[model_name]['kwargs']['nome_parlamentar'] = obj.nome_parlamentar
|
|
|
|
pesquisa_obj = model.objects.filter(**multiples[model_name]['kwargs'])
|
|
if pesquisa_obj.count() > 1:
|
|
multiplos_objs = [o.pk for o in pesquisa_obj]
|
|
multiplos_objs.sort()
|
|
|
|
if multiplos_objs not in multiples[model_name]['pks']:
|
|
multiples[model_name]['pks'].append(multiplos_objs)
|
|
|
|
if not multiples[model_name]['pks']:
|
|
multiples.pop(model_name)
|
|
else:
|
|
multiples[model_name].pop('kwargs')
|
|
|
|
return multiples
|
|
|
|
|
|
def transfer_purge_author(author_lists):
|
|
for author_list in author_lists:
|
|
for pk in author_list[1:]:
|
|
autor_clonado = Autor.objects.get(pk=pk)
|
|
|
|
for autoria in autor_clonado.autoria_set.all():
|
|
autoria.autor_id = author_list[0]
|
|
autoria.save()
|
|
|
|
for proposicao in autor_clonado.proposicao_set.all():
|
|
proposicao.autor_id = author_list[0]
|
|
proposicao.save()
|
|
|
|
for autorianorma in autor_clonado.autorianorma_set.all():
|
|
autorianorma.autor_id = author_list[0]
|
|
autorianorma.save()
|
|
|
|
for documentoadministrativo in autor_clonado.documentoadministrativo_set.all():
|
|
documentoadministrativo.autor_id = author_list[0]
|
|
documentoadministrativo.save()
|
|
|
|
for protocolo in autor_clonado.protocolo_set.all():
|
|
protocolo.autor_id = author_list[0]
|
|
protocolo.save()
|
|
|
|
autor_clonado.delete()
|
|
|
|
|
|
def transfer_purge_congressman(congressman_lists):
|
|
models = [ComposicaoMesa, Dependente, Filiacao, IntegranteMesa, JustificativaAusencia, Mandato, Orador,
|
|
OradorExpediente, Participacao, PresencaOrdemDia, Relatoria, RetiradaPauta, SessaoPlenariaPresenca,
|
|
UnidadeTramitacao, VotoParlamentar]
|
|
|
|
for congressman_list in congressman_lists:
|
|
parlamentar_principal = Parlamentar.objects.get(pk=congressman_list[0])
|
|
for pk in congressman_list[1:]:
|
|
for model in models:
|
|
for obj in model.objects.filter(parlamentar_id=pk):
|
|
# TODO: Validar objeto para não repeti-lo no parlamentar principal
|
|
obj.parlamentar_id = congressman_list[0]
|
|
obj.save()
|
|
parlamentar_clonado = Parlamentar.objects.get(pk=pk)
|
|
for autoria in Autoria.objects.filter(autor=parlamentar_clonado.id):
|
|
autoria.autor = parlamentar_principal.id
|
|
autoria.save()
|
|
# import ipdb; ipdb.set_trace()
|
|
# autor.save()
|
|
parlamentar_clonado.delete()
|
|
|
|
|
|
def main():
|
|
multiples = get_multiples()
|
|
|
|
if multiples.get('Autor'):
|
|
transfer_purge_author(multiples['Autor']['pks'])
|
|
|
|
if multiples.get('Parlamentar'):
|
|
transfer_purge_congressman(multiples['Parlamentar']['pks'])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
|