Repository: interlegis/sapl

Issue:
Adicionar filtro à pesquisa de norma jurídica
Boa tarde, me foi solicitado pelo dpto. Legislativo da nossa Câmara, a inserção de um campo na pesquisa de norma jurídica do sistema SAPL:
https://sapl.toledo.pr.leg.br/norma/pesquisar

Eles gostariam que houvesse um campo para filtrar os resultados por norma jurídica vigente e não vigente, além dos outros campos que já existem na pesquisa. 
Atualmente, o SAPL tem um  relatório de normas por vigência, porém esse relatório não permite escolher o tipo de matéria, ele mostra todas. Eles querem pesquisar, por exemplo, todas as resoluções vigentes, e esse relatório só permite pesquisar TODAS as matérias vigentes ou não vigentes, não permite selecionar um tipo de matéria. A página de pesquisa de normas jurídicas permite selecionar o tipo de matéria a ser pesquisada, porém não permite filtrar por vigente ou não vigente.


Discussion:
Neste caso, é mais prático adicionar um campo opcional 'Tipo de Norma' no relatório de normas por vigência. 

Resolving patch:
diff --git a/sapl/base/forms.py b/sapl/base/forms.py
--- a/sapl/base/forms.py
+++ b/sapl/base/forms.py
@@ -39,7 +39,7 @@
                         choice_anos_com_normas, choice_anos_com_materias,
                         FilterOverridesMetaMixin, FileFieldCheckMixin,
                         ImageThumbnailFileInput, qs_override_django_filter,
-                        RANGE_ANOS, YES_NO_CHOICES,
+                        RANGE_ANOS, YES_NO_CHOICES, choice_tipos_normas,
                         GoogleRecapthaMixin, parlamentares_ativos)
 
 from .models import AppConfig, CasaLegislativa
@@ -880,6 +880,11 @@ class RelatorioNormasMesFilterSet(django_filters.FilterSet):
                                       label='Ano da Norma',
                                       choices=choice_anos_com_normas,
                                       initial=ultimo_ano_com_norma)
+    
+    tipo = django_filters.ChoiceFilter(required=False,
+                                      label='Tipo Norma',
+                                      choices=choice_tipos_normas,
+                                      initial=0)
 
     class Meta:
         model = NormaJuridica
@@ -892,7 +897,7 @@ def __init__(self, *args, **kwargs):
         self.filters['ano'].label = 'Ano'
         self.form.fields['ano'].required = True
 
-        row1 = to_row([('ano', 12)])
+        row1 = to_row([('ano', 6), ('tipo', 6)])
 
         buttons = FormActions(
             *[
@@ -971,6 +976,11 @@ class RelatorioNormasVigenciaFilterSet(django_filters.FilterSet):
                                       choices=choice_anos_com_normas,
                                       initial=ultimo_ano_com_norma)
 
+    tipo = django_filters.ChoiceFilter(required=False,
+                                      label='Tipo Norma',
+                                      choices=choice_tipos_normas,
+                                      initial=0)
+
     vigencia = forms.ChoiceField(
         label=_('Vigência'),
         choices=[(True, "Vigente"), (False, "Não vigente")],
@@ -986,7 +996,7 @@ def __init__(self, *args, **kwargs):
         self.form.fields['ano'].required = True
         self.form.fields['vigencia'] = self.vigencia
 
-        row1 = to_row([('ano', 12)])
+        row1 = to_row([('ano', 6), ('tipo', 6)])
         row2 = to_row([('vigencia', 12)])
 
         buttons = FormActions(
diff --git a/sapl/utils.py b/sapl/utils.py
--- a/sapl/utils.py
+++ b/sapl/utils.py
@@ -494,6 +494,12 @@ def choice_anos_com_normas():
     return choice_anos(NormaJuridica)
 
 
+def choice_tipos_normas():
+    from sapl.norma.models import TipoNormaJuridica
+    return [(id, descricao) for (id, descricao) in
+            TipoNormaJuridica.objects.all().values_list('id', 'descricao')]
+
+
 def choice_anos_com_protocolo():
     from sapl.protocoloadm.models import Protocolo
     return choice_anos(Protocolo)


Test patch: