Repository: interlegis/sapl

Issue:
Sugestão para o SAPL 3.1
Gostaria de sugerir o campo de ordenação na pesquisa das Normas Jurídicas, assim como já é disponível na pesquisa de Matérias Legislativas.


Discussion:

Resolving patch:
diff --git a/sapl/norma/forms.py b/sapl/norma/forms.py
--- a/sapl/norma/forms.py
+++ b/sapl/norma/forms.py
@@ -12,7 +12,7 @@
 from sapl.crispy_layout_mixin import form_actions, to_row
 from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
 from sapl.settings import MAX_DOC_UPLOAD_SIZE
-from sapl.utils import RANGE_ANOS, RangeWidgetOverride
+from sapl.utils import NormaPesquisaOrderingFilter, RANGE_ANOS, RangeWidgetOverride
 
 from .models import (AnexoNormaJuridica, AssuntoNorma, NormaJuridica, NormaRelacionada,
                      TipoNormaJuridica)
@@ -55,6 +55,8 @@ class NormaFilterSet(django_filters.FilterSet):
     assuntos = django_filters.ModelChoiceFilter(
         queryset=AssuntoNorma.objects.all())
 
+    o = NormaPesquisaOrderingFilter()
+
     class Meta:
         model = NormaJuridica
         fields = ['tipo', 'numero', 'ano', 'data',
@@ -65,7 +67,7 @@ def __init__(self, *args, **kwargs):
 
         row1 = to_row([('tipo', 4), ('numero', 4), ('ano', 4)])
         row2 = to_row([('data', 6), ('data_publicacao', 6)])
-        row3 = to_row([('ementa', 8), ('assuntos', 4)])
+        row3 = to_row([('ementa', 6), ('assuntos', 6), ('o',6)])
 
         self.form.helper = FormHelper()
         self.form.helper.form_method = 'GET'
diff --git a/sapl/norma/views.py b/sapl/norma/views.py
--- a/sapl/norma/views.py
+++ b/sapl/norma/views.py
@@ -86,6 +86,12 @@ def get_context_data(self, **kwargs):
 
         context['title'] = _('Pesquisar Norma Jurídica')
 
+        self.filterset.form.fields['o'].label = _('Ordenação')
+        
+        qs = self.object_list
+        if 'o' in self.request.GET and not self.request.GET['o']:
+            qs = qs.order_by('-ano', 'tipo', '-numero')
+
         qr = self.request.GET.copy()
 
         if 'page' in qr:
diff --git a/sapl/utils.py b/sapl/utils.py
--- a/sapl/utils.py
+++ b/sapl/utils.py
@@ -437,6 +437,32 @@ def filter(self, qs, value):
         return super().filter(qs, _value)
 
 
+class NormaPesquisaOrderingFilter(django_filters.OrderingFilter):
+
+    choices = (
+        ('', 'Selecione'),
+        ('dataC', 'Data, Tipo, Ano, Numero - Ordem Crescente'),
+        ('dataD', 'Data, Tipo, Ano, Numero - Ordem Decrescente'),
+        ('tipoC', 'Tipo, Ano, Numero, Data - Ordem Crescente'),
+        ('tipoD', 'Tipo, Ano, Numero, Data - Ordem Decrescente')
+    )
+    order_by_mapping = {
+        '': [],
+        'dataC': ['data', 'tipo', 'ano', 'numero'],
+        'dataD': ['-data', '-tipo', '-ano', '-numero'],
+        'tipoC': ['tipo', 'ano', 'numero', 'data'],
+        'tipoD': ['-tipo', '-ano', '-numero', '-data'],
+    }
+
+    def __init__(self, *args, **kwargs):
+        kwargs['choices'] = self.choices
+        super(NormaPesquisaOrderingFilter, self).__init__(*args, **kwargs)
+
+    def filter(self, qs, value):
+        _value = self.order_by_mapping[value[0]] if value else value
+        return super().filter(qs, _value)
+
+
 class AnoNumeroOrderingFilter(django_filters.OrderingFilter):
 
     choices = (('DEC', 'Ordem Decrescente'),


Test patch: