diff --git a/sapl/legacy/migration.py b/sapl/legacy/migration.py index 0d2f5be10..baf105e74 100644 --- a/sapl/legacy/migration.py +++ b/sapl/legacy/migration.py @@ -28,7 +28,7 @@ from sapl.norma.models import (AssuntoNorma, NormaJuridica, TipoVinculoNormaJuridica, NormaRelacionada) from sapl.parlamentares.models import Parlamentar from sapl.protocoloadm.models import Protocolo, StatusTramitacaoAdministrativo -from sapl.sessao.models import ExpedienteMateria, OrdemDia +from sapl.sessao.models import ExpedienteMateria, OrdemDia, RegistroVotacao from sapl.settings import PROJECT_DIR from sapl.utils import delete_texto, normalize, save_texto @@ -411,26 +411,6 @@ class DataMigrator: if field_type == 'CharField' or field_type == 'TextField': if value is None or value == 'None': value = '' - if field.model._meta.label == 'sessao.RegistroVotacao' and \ - field.name == 'ordem' and \ - not isinstance(value, OrdemDia): - try: - new_value = ExpedienteMateria.objects.get(pk=value) - setattr(new, 'expediente', new_value) - setattr(new, field.name, None) - continue - except ObjectDoesNotExist: - msg = 'FK [%s] não encontrada para valor %s ' \ - '(em %s %s)' % ( - field.name, value, - field.model.__name__, label or '---') - with reversion.create_revision(): - value = make_stub(field.related_model, value) - descricao = 'stub criado para entrada orfã!' - warn(msg + ' => ' + descricao) - save_relation(value, [field.name], msg, descricao, - eh_stub=True) - reversion.set_comment('Stub criado pela migração') setattr(new, field.name, value) elif field.model.__name__ == 'TipoAutor' and \ field.name == 'content_type': @@ -655,6 +635,31 @@ def adjust_protocolo(new, old): new.numero = p['numero__max'] + 1 +def adjust_registrovotacao_antes_salvar(new, old): + ordem_dia = OrdemDia.objects.filter( + pk=old.cod_ordem, materia=old.cod_materia) + expediente_materia = ExpedienteMateria.objects.filter( + pk=old.cod_ordem, materia=old.cod_materia) + + if ordem_dia and not expediente_materia: + new.ordem = ordem_dia[0] + if not ordem_dia and expediente_materia: + new.expediente = expediente_materia[0] + + +def adjust_registrovotacao_depois_salvar(new, old): + if not new.ordem and not new.expediente: + with reversion.create_revision(): + problema = 'RegistroVotacao de PK %s não possui nenhuma OrdemDia'\ + ' ou ExpedienteMateria.' % old.pk + descricao = 'RevistroVotacao deve ter no mínimo uma ordem do dia'\ + ' ou expediente vinculado.' + warn(problema + ' => ' + descricao) + save_relation(obj=new, problema=problema, + descricao=descricao, eh_stub=False) + reversion.set_comment('RegistroVotacao sem ordem ou expediente') + + def adjust_tipoproposicao(new, old): if old.ind_mat_ou_doc == 'M': new.tipo_conteudo_related = TipoMateriaLegislativa.objects.get( @@ -752,6 +757,7 @@ AJUSTE_ANTES_SALVAR = { Parlamentar: adjust_parlamentar, Participacao: adjust_participacao, Protocolo: adjust_protocolo, + RegistroVotacao: adjust_registrovotacao_antes_salvar, TipoProposicao: adjust_tipoproposicao, StatusTramitacao: adjust_statustramitacao, StatusTramitacaoAdministrativo: adjust_statustramitacaoadm, @@ -761,6 +767,7 @@ AJUSTE_ANTES_SALVAR = { AJUSTE_DEPOIS_SALVAR = { NormaJuridica: adjust_normajuridica_depois_salvar, Protocolo: adjust_protocolo_depois_salvar, + RegistroVotacao: adjust_registrovotacao_depois_salvar, } # CHECKS #################################################################### diff --git a/sapl/sessao/legacy.yaml b/sapl/sessao/legacy.yaml index 6e2cc2428..90188a76c 100644 --- a/sapl/sessao/legacy.yaml +++ b/sapl/sessao/legacy.yaml @@ -65,7 +65,6 @@ RegistroVotacao: numero_votos_nao: num_votos_nao numero_votos_sim: num_votos_sim observacao: txt_observacao - ordem: cod_ordem tipo_resultado_votacao: tip_resultado_votacao VotoParlamentar (RegistroVotacaoParlamentar):