Repository: interlegis/sapl

Issue:
Ajustar migração de TipoProposicao
Durante a migração de `TipoProposicao`, o campo `materia_ou_documento` deve ser analisado para saber qual das duas FKs (`TipoMateriaLegislativa` ou `TipoDocumento`) serão referenciadas pelo valor da coluna `tip_mat_ou_doc` da tabela `tipo_proposicao`.



Discussion:

Resolving patch:
diff --git a/sapl/legacy/migration.py b/sapl/legacy/migration.py
--- a/sapl/legacy/migration.py
+++ b/sapl/legacy/migration.py
@@ -13,7 +13,7 @@
 
 from sapl.base.models import ProblemaMigracao
 from sapl.comissoes.models import Composicao, Participacao
-from sapl.materia.models import StatusTramitacao, Tramitacao
+from sapl.materia.models import StatusTramitacao, TipoProposicao, Tramitacao
 from sapl.norma.models import AssuntoNormaRelationship, NormaJuridica
 from sapl.parlamentares.models import Parlamentar
 from sapl.protocoloadm.models import StatusTramitacaoAdministrativo
@@ -377,7 +377,24 @@ def migrate(obj=appconfs):
 
 # MIGRATION_ADJUSTMENTS #####################################################
 
-def adjust_participacao(new_participacao, old):
+def adjust_ordemdia(new, old):
+    # Prestar atenção
+    if not old.tip_votacao:
+        new.tipo_votacao = 1
+
+
+def adjust_parlamentar(new, old):
+    if old.ind_unid_deliberativa:
+        value = new.unidade_deliberativa
+        # Field is defined as not null in legacy db,
+        # but data includes null values
+        #  => transform None to False
+        if value is None:
+            warn('nulo convertido para falso')
+            new.unidade_deliberativa = False
+
+
+def adjust_participacao(new, old):
     composicao = Composicao()
     composicao.comissao, composicao.periodo = [
         get_fk_related(Composicao._meta.get_field(name), value)
@@ -391,33 +408,21 @@ def adjust_participacao(new_participacao, old):
         [composicao] = already_created
     else:
         composicao.save()
-    new_participacao.composicao = composicao
-
-
-def adjust_parlamentar(new_parlamentar, old):
-    if old.ind_unid_deliberativa:
-        value = new_parlamentar.unidade_deliberativa
-        # Field is defined as not null in legacy db,
-        # but data includes null values
-        #  => transform None to False
-        if value is None:
-            warn('nulo convertido para falso')
-            new_parlamentar.unidade_deliberativa = False
+    new.composicao = composicao
 
 
-def adjust_normajuridica(new, old):
-    # O 'S' vem de 'Selecionar'. Na versão antiga do SAPL, quando uma opção do
-    # combobox era selecionada, o sistema pegava a primeira letra da seleção,
-    # sendo F para Federal, E para Estadual, M para Municipal e o S para
-    # Selecionar, que era a primeira opção quando nada era selecionado.
-    if old.tip_esfera_federacao == 'S':
-        new.esfera_federacao = ''
+def adjust_sessaoplenaria(new, old):
+    assert not old.tip_expediente
 
 
-def adjust_ordemdia(new, old):
-    # Prestar atenção
-    if not old.tip_votacao:
-        new.tipo_votacao = 1
+def adjust_tipoproposicao(new, old):
+    if new.materia_ou_documento == 'M':
+        field = TipoProposicao.tipo_materia.field
+        value = get_fk_related(field=field, value=old.tip_mat_ou_doc)
+    elif new.materia_ou_documento == 'D':
+        field = TipoProposicao.tipo_documento.field
+        value = get_fk_related(field=field, value=old.tip_mat_ou_doc)
+    setattr(new, field.name, value)
 
 
 def adjust_statustramitacao(new, old):
@@ -438,11 +443,18 @@ def adjust_tramitacao(new, old):
         new.turno = 'U'
 
 
-def adjust_sessaoplenaria(new, old):
-    assert not old.tip_expediente
+def adjust_normajuridica_antes_salvar(new, old):
+    # Ajusta choice de esfera_federacao
+    # O 'S' vem de 'Selecionar'. Na versão antiga do SAPL, quando uma opção do
+    # combobox era selecionada, o sistema pegava a primeira letra da seleção,
+    # sendo F para Federal, E para Estadual, M para Municipal e o S para
+    # Selecionar, que era a primeira opção quando nada era selecionado.
+    if old.tip_esfera_federacao == 'S':
+        new.esfera_federacao = ''
 
 
-def adjust_normajuridica(new, old):
+def adjust_normajuridica_depois_salvar(new, old):
+    # Ajusta relação M2M
     lista_ids_assunto = old.cod_assunto.split(',')
     for id_assunto in lista_ids_assunto:
         relacao = AssuntoNormaRelationship()
@@ -452,17 +464,19 @@ def adjust_normajuridica(new, old):
 
 
 AJUSTE_ANTES_SALVAR = {
+    NormaJuridica: adjust_normajuridica_antes_salvar,
     OrdemDia: adjust_ordemdia,
-    Participacao: adjust_participacao,
     Parlamentar: adjust_parlamentar,
+    Participacao: adjust_participacao,
     SessaoPlenaria: adjust_sessaoplenaria,
+    TipoProposicao: adjust_tipoproposicao,
     StatusTramitacao: adjust_statustramitacao,
     StatusTramitacaoAdministrativo: adjust_statustramitacaoadm,
     Tramitacao: adjust_tramitacao,
 }
 
 AJUSTE_DEPOIS_SALVAR = {
-    NormaJuridica: adjust_normajuridica,
+    NormaJuridica: adjust_normajuridica_depois_salvar,
 }
 
 # CHECKS ####################################################################
diff --git a/sapl/legacy_migration_settings.py b/sapl/legacy_migration_settings.py
--- a/sapl/legacy_migration_settings.py
+++ b/sapl/legacy_migration_settings.py
@@ -3,7 +3,7 @@
 from .settings import *  # flake8: noqa
 
 INSTALLED_APPS += (
-    'legacy',  # legacy reversed model definitions
+    'sapl.legacy',  # legacy reversed model definitions
 )
 
 DATABASES['legacy'] = {


Test patch: