diff --git a/sapl/legacy/migration.py b/sapl/legacy/migration.py index 002df9a6a..58d75994a 100644 --- a/sapl/legacy/migration.py +++ b/sapl/legacy/migration.py @@ -4,8 +4,9 @@ from functools import lru_cache from subprocess import PIPE, call import pkg_resources -import reversion import yaml + +import reversion from django.apps import apps from django.apps.config import AppConfig from django.contrib.auth import get_user_model @@ -15,7 +16,6 @@ from django.core.exceptions import ObjectDoesNotExist from django.db import connections, transaction from django.db.models import Count, Max from django.db.models.base import ModelBase - from sapl.base.models import AppConfig as AppConf from sapl.base.models import (Autor, CasaLegislativa, ProblemaMigracao, TipoAutor) @@ -28,7 +28,7 @@ from sapl.materia.models import (AcompanhamentoMateria, Proposicao, from sapl.norma.models import (AssuntoNorma, NormaJuridica, NormaRelacionada, TipoVinculoNormaJuridica) from sapl.parlamentares.models import (Legislatura, Mandato, Parlamentar, - TipoAfastamento) + Partido, TipoAfastamento) from sapl.protocoloadm.models import (DocumentoAdministrativo, Protocolo, StatusTramitacaoAdministrativo) from sapl.sessao.models import ExpedienteMateria, OrdemDia, RegistroVotacao @@ -687,24 +687,28 @@ def adjust_normajuridica_depois_salvar(new, old): pass # ignora assuntos inexistentes -def adjust_autor(new, old): - if old.cod_parlamentar: +def vincula_autor(new, old, model_relacionado, campo_relacionado, campo_nome): + pk_rel = getattr(old, campo_relacionado) + if pk_rel: try: - new.autor_related = Parlamentar.objects.get(pk=old.cod_parlamentar) + new.autor_related = model_relacionado.objects.get(pk=pk_rel) except ObjectDoesNotExist: # ignoramos o autor órfão - raise ForeignKeyFaltando('Parlamentar inexiste para autor') + raise ForeignKeyFaltando('{} inexiste para autor'.format( + model_relacionado._meta.verbose_name)) else: - new.nome = new.autor_related.nome_parlamentar + new.nome = getattr(new.autor_related, campo_nome) + return True - elif old.cod_comissao: - try: - new.autor_related = Comissao.objects.get(pk=old.cod_comissao) - except ObjectDoesNotExist: - # ignoramos o autor órfão - raise ForeignKeyFaltando('Comissao inexiste para autor') - else: - new.nome = new.autor_related.nome + +def adjust_autor(new, old): + for args in [ + # essa ordem é importante + (Parlamentar, 'cod_parlamentar', 'nome_parlamentar'), + (Comissao, 'cod_comissao', 'nome'), + (Partido, 'cod_partido', 'nome')]: + if vincula_autor(new, old, *args): + break if old.col_username: user_model = get_user_model()