Repository: interlegis/sapl

Issue:
Migração - Vínculo Normas Jurídicas (Normas Relacionadas)
Os relacionamentos não estão sendo importados corretamente.
3.1 - tabela norma_vinculonormajuridica
1;"''";"''"
2;"''";"''"
3;"''";"''"
4;"''";"''"
5;"''";"''"
.......segue até id 5139
3.1 - tabela norma_normarelacionada
tabela vazia

2.5 - tabela vinulo_norma_juridica
'1', '452', '148', 'P', ''
'2', '3457', '1075', 'R', ''
.......segue até id 5139



Discussion:
houve mudança no modelo, @LucianoAlmeida está ciente?
Existe um modelo disponível para consulta? Se sim, qual o endereço?
Em relação ao vínculo, na consulta a uma Norma Jurídica, a referência à Matéria Legislativa respectiva não está com o link, somente com o texto "Projeto de Lei nº XXX de XXXX". Deve ter o link ou não?
Olá @cristian-longhi bem vindo por aqui,

o modelo que citei acima é com relação a modelagem de dados na programação...

mas existe um sapl em http://sapl31demo.interlegis.leg.br que é atualizado de hora em hora automaticamente...

sobre os vínculos estes que o @DTILegBG citou é sobre as normas relacionadas... não envolve matéria legislativa...

sobre o link... acredito que deva ter link sim, se não tem, precisa ser colocado... abra uma issue relatando essa questão... 

entre no telegram, se vc ainda não tiver... https://web.telegram.org/#/login....
e me passe seu usuário pra te colocar no grupo de discussão de testes e desenvolvimento...
Olá, @LeandroRoberto!
Criei o usuário no Telegram: @cristian_longhi
Estava mesmo querendo entrar nesse grupo. Obrigado!
Vou abrir essa issue nova
Te adicionei lá...
@LeandroRoberto, a mudança ocorrida na model foi qual?
O que entendi foi que o que antigamente era VinculoNormaJuridica agora é o tipo do vínculo e o NormaRelacionada que deve ser migrado da antiga tabela vinculo_norma_juridica. Estou certo?

Mais perguntas: na tabela vinculo_norma_juridica, no SAPL 2.5, havia o campo de tip_vinculo, mas ele é do tipo char. Havia antigamente alguma tabela que guardava o tipo e sua descrição ou não existe isso? Esse tipo e essa descrição são invariáveis?
@edwardoliveira Vc tb está por dentro dessas mudanças?
@LeandroRoberto Poderia explicar aqui?
Apesar do debate aqui... 
a solução foi efetuada em https://github.com/interlegis/sapl/commit/30f9ca5ec95ddd50410938ede7b0319b0105ae58
pelo @eduardoedson e @edwardoliveira atraves da issue #409 
eles estão a par e facilmente poderão debater ao vivo, aí, com a equipe de migração...
É importante conferir se o código de migração popula o `TipoVinculoNormaJuridica` com valores iniciais correspondentes ao código antigo do sapl 2.5 como mencionado em https://github.com/interlegis/sapl/issues/409#issuecomment-220385707
sem me ater ao algoritmo, presumo que a função `fill_vinculo_norma_juridica` em https://github.com/interlegis/sapl/blob/master/sapl/legacy/migration.py
não esteja adequada ao model TipoVinculoNormaJuridica

Resolving patch:
diff --git a/sapl/legacy/migration.py b/sapl/legacy/migration.py
--- a/sapl/legacy/migration.py
+++ b/sapl/legacy/migration.py
@@ -25,7 +25,7 @@
                                  TipoMateriaLegislativa, TipoProposicao,
                                  Tramitacao)
 from sapl.norma.models import (AssuntoNorma, NormaJuridica,
-                               TipoVinculoNormaJuridica)
+                               TipoVinculoNormaJuridica, NormaRelacionada)
 from sapl.parlamentares.models import Parlamentar
 from sapl.protocoloadm.models import Protocolo, StatusTramitacaoAdministrativo
 from sapl.sessao.models import ExpedienteMateria, OrdemDia
@@ -339,20 +339,34 @@ def get_fields_dict(model):
 
 
 def fill_vinculo_norma_juridica():
-    lista = [('A', 'Altera a norma'),
-             ('R', 'Revoga integralmente a norma'),
-             ('P', 'Revoga parcialmente a norma'),
-             ('T', 'Revoga integralmente por consolidação'),
-             ('C', 'Norma Correlata'),
-             ('S', 'Ressalva a Norma'),
-             ('E', 'Reedita a Norma'),
-             ('I', 'Reedita a Norma com Alteração'),
-             ('G', 'Regulamenta a Norma'),
-             ('K', 'Suspende parcialmente a norma'),
-             ('L', 'Suspende integralmente a norma'),
-             ('N', 'Julgada integralmente inconstitucional'),
-             ('O', 'Julgada parcialmente inconstitucional')]
-    lista_objs = [TipoVinculoNormaJuridica(sigla=item[0], descricao=item[1])
+    lista = [('A', 'Altera o(a)',
+              'Alterado(a) pelo(a)'),
+             ('R', 'Revoga integralmente o(a)',
+              'Revogado(a) integralmente pelo(a)'),
+             ('P', 'Revoga parcialmente o(a)',
+              'Revogado(a) parcialmente pelo(a)'),
+             ('T', 'Revoga integralmente por consolidação',
+              'Revogado(a) integralmente por consolidação'),
+             ('C', 'Norma correlata',
+              'Norma correlata'),
+             ('S', 'Ressalva o(a)',
+              'Ressalvada pelo(a)'),
+             ('E', 'Reedita o(a)',
+              'Reeditada pelo(a)'),
+             ('I', 'Reedita com alteração o(a)',
+              'Reeditada com alteração pelo(a)'),
+             ('G', 'Regulamenta o(a)',
+              'Regulamentada pelo(a)'),
+             ('K', 'Suspende parcialmente o(a)',
+              'Suspenso(a) parcialmente pelo(a)'),
+             ('L', 'Suspende integralmente o(a)',
+              'Suspenso(a) integralmente pelo(a)'),
+             ('N', 'Julga integralmente inconstitucional',
+              'Julgada integralmente inconstitucional'),
+             ('O', 'Julga parcialmente inconstitucional',
+              'Julgada parcialmente inconstitucional')]
+    lista_objs = [TipoVinculoNormaJuridica(
+        sigla=item[0], descricao_ativa=item[1], descricao_passiva=item[2])
                   for item in lista]
     TipoVinculoNormaJuridica.objects.bulk_create(lista_objs)
 
@@ -455,6 +469,7 @@ def migrate(self, obj=appconfs, interativo=True):
 
         desconecta_sinais_indexacao()
 
+        fill_vinculo_norma_juridica()
         info('Começando migração: %s...' % obj)
         self._do_migrate(obj)
 
@@ -543,6 +558,10 @@ def save(new, old):
             if getattr(old, 'ind_excluido', False):
                 self.to_delete.append(new)
 
+        # necessário para ajustar sequence da tabela para o ultimo valor de id
+        ultimo_valor = get_last_value(model)
+        alter_sequence(model, ultimo_valor+1)
+
     def delete_ind_excluido(self):
         excluidos = 0
         for obj in self.to_delete:
@@ -619,6 +638,12 @@ def adjust_participacao(new, old):
     new.composicao = composicao
 
 
+def adjust_normarelacionada(new, old):
+    tipo = TipoVinculoNormaJuridica.objects.filter(sigla=old.tip_vinculo)
+    assert len(tipo) == 1
+    new.tipo_vinculo = tipo[0]
+
+
 def adjust_protocolo(new, old):
     if new.numero is None and not primeira_vez:
         p = ProtocoloLegado.objects.filter(
@@ -724,6 +749,7 @@ def adjust_comissao(new, old):
     Autor: adjust_autor,
     Comissao: adjust_comissao,
     NormaJuridica: adjust_normajuridica_antes_salvar,
+    NormaRelacionada: adjust_normarelacionada,
     OrdemDia: adjust_ordemdia,
     Parlamentar: adjust_parlamentar,
     Participacao: adjust_participacao,


Test patch: