Repository: interlegis/sapl

Issue:
Pesquisa de fim de prazo de tramitação
![image](https://user-images.githubusercontent.com/13314947/35038593-743d9292-fb62-11e7-899e-00a68e1b4900.png)

No cadastro de tramitação existe a possibilidade de informar a data de fim de prazo, porém não existe a possibilidade de fazer a consulta de matérias que estão com tramitação em final de prazo.

Penso que poderia ser criada essa pesquisa nos relatórios ou na mesma tela de pesquisa das matérias, onde o usuário informaria a data de fim de prazo e a consulta seria feita nas tramitações, quando a última tramitação para a matéria tiver data de fim de prazo informada.

Então por exemplo, na pesquisa informando data de fim de prazo 17/01/2018, o resultado da pesquisa seriam todas as matérias que tem sua última tramitação com data de fim de prazo informada até dia 17/01/2018.

Ou deixando o campo data em branco e pesquisando, poderiam ser mostradas todas as matérias que tem sua última tramitação com data de fim de prazo informada


Discussion:
Talvez usar nav nav-tabs, colocar a pesquisa de matéria em uma aba e pesquisa de tramitação em outra. Não sei se estou falando bobagem...mas...

Resolving patch:
diff --git a/sapl/base/forms.py b/sapl/base/forms.py
--- a/sapl/base/forms.py
+++ b/sapl/base/forms.py
@@ -466,7 +466,46 @@ def __init__(self, *args, **kwargs):
         self.form.helper = FormHelper()
         self.form.helper.form_method = 'GET'
         self.form.helper.layout = Layout(
-            Fieldset(_('Histórico de Tramita'),
+            Fieldset(_('Histórico de Tramitação'),
+                     row1, row2,
+                     form_actions(label='Pesquisar'))
+        )
+
+class RelatorioDataFimPrazoTramitacaoFilterSet(django_filters.FilterSet):
+
+    filter_overrides = {models.DateField: {
+        'filter_class': django_filters.DateFromToRangeFilter,
+        'extra': lambda f: {
+            'label': '%s (%s)' % (f.verbose_name, _('Inicial - Final')),
+            'widget': RangeWidgetOverride}
+    }}
+
+    @property
+    def qs(self):
+        parent = super(RelatorioDataFimPrazoTramitacaoFilterSet, self).qs
+        return parent.distinct().order_by('-ano', 'tipo', 'numero')
+
+    class Meta:
+        model = MateriaLegislativa
+        fields = ['tipo', 'tramitacao__unidade_tramitacao_local',
+                  'tramitacao__status', 'tramitacao__data_fim_prazo']
+
+    def __init__(self, *args, **kwargs):
+        super(RelatorioDataFimPrazoTramitacaoFilterSet, self).__init__(
+            *args, **kwargs)
+
+        self.filters['tipo'].label = 'Tipo de Matéria'
+
+        row1 = to_row([('tramitacao__data_fim_prazo', 12)])
+        row2 = to_row(
+            [('tipo', 4),
+             ('tramitacao__unidade_tramitacao_local', 4),
+             ('tramitacao__status', 4)])
+
+        self.form.helper = FormHelper()
+        self.form.helper.form_method = 'GET'
+        self.form.helper.layout = Layout(
+            Fieldset(_('Tramitações por fim de prazo'),
                      row1, row2,
                      form_actions(label='Pesquisar'))
         )
diff --git a/sapl/base/urls.py b/sapl/base/urls.py
--- a/sapl/base/urls.py
+++ b/sapl/base/urls.py
@@ -16,7 +16,8 @@
                     RelatorioMateriasPorAnoAutorTipoView,
                     RelatorioMateriasPorAutorView,
                     RelatorioMateriasTramitacaoView,
-                    RelatorioPresencaSessaoView, SaplSearchView)
+                    RelatorioPresencaSessaoView, SaplSearchView,
+                    RelatorioDataFimPrazoTramitacaoView)
 
 app_name = AppConfig.name
 
@@ -83,6 +84,9 @@
     url(r'^sistema/relatorios/historico-tramitacoes$',
         RelatorioHistoricoTramitacaoView.as_view(),
         name='historico_tramitacoes'),
+    url(r'^sistema/relatorios/data-fim-prazo-tramitacoes$',
+        RelatorioDataFimPrazoTramitacaoView.as_view(),
+        name='data_fim_prazo_tramitacoes'),
     url(r'^sistema/relatorios/presenca$',
         RelatorioPresencaSessaoView.as_view(),
         name='presenca_sessao'),
diff --git a/sapl/base/views.py b/sapl/base/views.py
--- a/sapl/base/views.py
+++ b/sapl/base/views.py
@@ -33,7 +33,8 @@
                     RelatorioMateriasPorAnoAutorTipoFilterSet,
                     RelatorioMateriasPorAutorFilterSet,
                     RelatorioMateriasTramitacaoilterSet,
-                    RelatorioPresencaSessaoFilterSet)
+                    RelatorioPresencaSessaoFilterSet,
+                    RelatorioDataFimPrazoTramitacaoFilterSet)
 from .models import AppConfig, CasaLegislativa
 
 
@@ -357,6 +358,22 @@ def get_context_data(self, **kwargs):
 
         return context
 
+class RelatorioDataFimPrazoTramitacaoView(FilterView):
+    model = MateriaLegislativa
+    filterset_class = RelatorioDataFimPrazoTramitacaoFilterSet
+    template_name = 'base/RelatorioDataFimPrazoTramitacao_filter.html'
+
+    def get_context_data(self, **kwargs):
+        context = super(RelatorioDataFimPrazoTramitacaoView,
+                        self).get_context_data(**kwargs)
+        context['title'] = _('Fim de Prazo de Tramitações')
+        qr = self.request.GET.copy()
+        context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else ''
+
+        context['show_results'] = show_results_filter_set(qr)
+
+        return context
+
 
 class RelatorioMateriasTramitacaoView(FilterView):
     model = MateriaLegislativa


Test patch: