Repository: interlegis/sapl

Issue:
sequencial de numeração para cada tipo de matéria legislativa
olá. Surgiu uma dúvida aqui, no nosso regimento interno fala que a numeração dos Projetos de Lei Complementar (PLC) e as Propostas de Emenda à Lei Orgânica do Município (PELOM) seguem numeração de acordo com a Legislatura (a cada 4 anos), e não anual, como as demais matérias legislativas. Conforme sugestão do Leandro, acredito que retirar a sequência de numeração da tela de Configurações da Aplicação e transferi-la para a tela de Tipo de Matéria Legislativa, para que ao cadastrar cada tipo seja informado qual o sequencial de numeração, seria melhor.
Remover acesso ao model TipoAutor da interface admin
O usuário admin (via https://endereco/admin ) tem acesso a todos os models. Ao menos um usuário usou isso para alterar o model de TipoAutor e daí várias telas do SAPL começaram a dar pau. Esta tela é fundamental para várias partes do sistema e não pode ser modificada assim. Nós já não permitimos fazer isso via interface do SAPL, mas devemos ver isso com a tela de admin.

Veja em materias/admin.py onde isso foi feito com o objetivo de de não deixar ninguem usar Proposicao.


Discussion:
Bom dia.
@VictorFabreF , a ideia é que ao parametrizar o tipo de numeração nos tipos das matérias, ao cadastrar uma nova matéria, escolhendo o tipo, o sistema mostre o ultimo número daquele tipo de matéria cadastrada +1 ?
Se for para ser dessa forma ainda não está funcionando.
Bom dia, 
foi o @edwardoliveira quem implementou essa funcionalidade, eu apenas fiz o merge da branch. Acho que ele irá saber responder melhor esta questão. Obrigado.


Resolving patch:
diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py
--- a/sapl/materia/forms.py
+++ b/sapl/materia/forms.py
@@ -1575,7 +1575,7 @@ def save(self, commit=False):
             except AttributeError:
                 pass
 
-            tipo = proposicao.tipo.tipo_conteudo_related
+            tipo = self.instance.tipo.tipo_conteudo_related
             if tipo.sequencia_numeracao:
                 numeracao = tipo.sequencia_numeracao
 
diff --git a/sapl/materia/urls.py b/sapl/materia/urls.py
--- a/sapl/materia/urls.py
+++ b/sapl/materia/urls.py
@@ -62,7 +62,7 @@
     url(r'^materia/(?P<pk>[0-9]+)/create_simplificado$',
         CriarProtocoloMateriaView.as_view(),
         name='materia_create_simplificado'),
-    url(r'^materia/recuperar-materia', recuperar_materia),
+    url(r'^materia/recuperar-materia',recuperar_materia, name='recuperar_materia'),
     url(r'^materia/(?P<pk>[0-9]+)/ta$',
         MateriaTaView.as_view(), name='materia_ta'),
 
diff --git a/sapl/materia/views.py b/sapl/materia/views.py
--- a/sapl/materia/views.py
+++ b/sapl/materia/views.py
@@ -295,9 +295,11 @@ def recuperar_materia(request):
 
     if numeracao == 'A':
         numero = MateriaLegislativa.objects.filter(
-            ano=timezone.now().year).aggregate(Max('numero'))
+            ano=ano).aggregate(Max('numero'))
     elif numeracao == 'L':
-        legislatura = Legislatura.objects.first()
+        legislatura = Legislatura.objects.filter(
+            data_inicio__year__lte=ano,
+            data_fim__year__gte=ano).first()
         data_inicio = legislatura.data_inicio
         data_fim = legislatura.data_fim
         numero = MateriaLegislativa.objects.filter(


Test patch:
diff --git a/sapl/materia/tests/test_materia.py b/sapl/materia/tests/test_materia.py
--- a/sapl/materia/tests/test_materia.py
+++ b/sapl/materia/tests/test_materia.py
@@ -1,10 +1,12 @@
 import pytest
+from django.db.models import Max
 from django.contrib.auth import get_user_model
 from django.contrib.contenttypes.models import ContentType
 from django.core.files.uploadedfile import SimpleUploadedFile
 from django.core.urlresolvers import reverse
 from model_mommy import mommy
 from sapl.base.models import Autor, TipoAutor
+from sapl.parlamentares.models import Legislatura
 from sapl.comissoes.models import Comissao, TipoComissao
 from sapl.materia.models import (Anexada, Autoria, DespachoInicial,
                                  DocumentoAcessorio, MateriaLegislativa,
@@ -505,3 +507,76 @@ def test_form_errors_proposicao(admin_client):
             ['Este campo é obrigatório.'])
     assert (response.context_data['form'].errors['descricao'] ==
             ['Este campo é obrigatório.'])
+
+
+
+@pytest.mark.django_db(transaction=False)
+def test_numeracao_materia_legislativa_por_legislatura(admin_client):
+
+    #Criar Legislaturas
+    legislatura1 = mommy.make(Legislatura,
+                          data_inicio='2014-01-01',
+                          data_fim='2018-12-31',
+                          numero=20,
+                          data_eleicao='2013-10-15'
+                          )
+    legislatura2 = mommy.make(Legislatura,
+                          data_inicio='2009-01-01',
+                          data_fim='2013-12-31',
+                          numero=21,
+                          data_eleicao='2018-10-15'
+                      )
+
+
+    # Cria uma materia na legislatura1
+    tipo_materia = mommy.make(TipoMateriaLegislativa, id=1,sequencia_numeracao='L')
+    materia = mommy.make(MateriaLegislativa,
+                          tipo=tipo_materia,
+                          ano=2017,
+                          numero=1
+                          )
+
+    url = reverse('sapl.materia:recuperar_materia')
+
+    # Testa numeração do Materia Legislativa na Legislatura1
+    query_params = '?tipo={}&ano={}'.format(materia.tipo.id, materia.ano)
+    response = admin_client.get(url + query_params, follow=True)
+    response_content = eval(response.content.decode('ascii'))
+    esperado_legislatura1 = eval('{"numero": 2, "ano": "2017"}')
+    assert response_content['numero'] == esperado_legislatura1['numero']
+
+    # Testa numeração do Materia Legislativa na Legislatura2
+    query_params = '?tipo={}&ano={}'.format(1, '2010')
+    response = admin_client.get(url + query_params, follow=True)
+    response_content = eval(response.content.decode('ascii'))
+    esperado_legislatura2 = eval('{"ano": "2010", "numero": 1}')
+    assert response_content['numero'] == esperado_legislatura2['numero']
+
+
+@pytest.mark.django_db(transaction=False)
+def test_numeracao_materia_legislativa_por_ano(admin_client):
+
+    # Cria uma materia
+    tipo_materia = mommy.make(TipoMateriaLegislativa, id=1,sequencia_numeracao='A')
+    materia = mommy.make(MateriaLegislativa,
+                          tipo=tipo_materia,
+                          ano=2017,
+                          numero=1
+                          )
+
+
+    url = reverse('sapl.materia:recuperar_materia')
+
+    # Testa numeração da Materia Legislativa no ano da materia criada
+    query_params = '?tipo={}&ano={}'.format(materia.tipo.id, materia.ano)
+    response = admin_client.get(url + query_params, follow=True)
+    response_content = eval(response.content.decode('ascii'))
+    esperado_ano = eval('{"numero": 2, "ano": "2017"}')
+    assert response_content['numero'] == esperado_ano['numero']
+
+    # Testa numeração da Materia Legislativa de outro ano
+    query_params = '?tipo={}&ano={}'.format(1, '2010')
+    response = admin_client.get(url + query_params, follow=True)
+    response_content = eval(response.content.decode('ascii'))
+    esperado_outro_ano = eval('{"ano": "2010", "numero": 1}')
+    assert response_content['numero'] == esperado_outro_ano['numero']