From f4b0f9f75f4da6e4307e109b05f98fe1b3b2c11f Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Thu, 5 May 2016 13:54:04 -0300 Subject: [PATCH] Refatora a Pesquisa de Documento Adm --- protocoloadm/forms.py | 98 ++++++++++++++++++- protocoloadm/urls.py | 4 +- protocoloadm/views.py | 96 +++++++++--------- .../documentoadministrativo_filter.html | 48 +++++++++ templates/protocoloadm/pesquisa_doc_adm.html | 66 ------------- 5 files changed, 189 insertions(+), 123 deletions(-) create mode 100644 templates/protocoloadm/documentoadministrativo_filter.html delete mode 100644 templates/protocoloadm/pesquisa_doc_adm.html diff --git a/protocoloadm/forms.py b/protocoloadm/forms.py index 79f930130..9d1bbb787 100644 --- a/protocoloadm/forms.py +++ b/protocoloadm/forms.py @@ -28,6 +28,10 @@ NATUREZA_PROCESSO = [('', 'Ambos'), ANO_CHOICES = [('', '---------')] + RANGE_ANOS +EM_TRAMITACAO = [('', 'Tanto Faz'), + (0, 'Sim'), + (1, 'Não')] + class ProtocoloFilterSet(django_filters.FilterSet): @@ -102,11 +106,6 @@ class ProtocoloFilterSet(django_filters.FilterSet): ('tipo_protocolo', 4), ('tipo_materia', 4)]) - row3 = crispy_layout_mixin.to_row( - [('tipo_documento', 4), - ('tipo_protocolo', 4), - ('tipo_materia', 4)]) - row3 = crispy_layout_mixin.to_row( [('interessado', 6), ('assunto_ementa', 6)]) @@ -137,6 +136,95 @@ class ProtocoloFilterSet(django_filters.FilterSet): ) +class DocumentoAdministrativoFilterSet(django_filters.FilterSet): + + filter_overrides = {models.DateField: { + 'filter_class': django_filters.DateFromToRangeFilter, + 'extra': lambda f: { + 'label': 'Data (%s)' % (_('Inicial - Final')), + 'widget': RangeWidgetOverride} + }} + + ano = django_filters.ChoiceFilter(required=False, + label=u'Ano', + choices=ANO_CHOICES) + + tramitacao = django_filters.ChoiceFilter(required=False, + label=u'Em Tramitação?', + choices=EM_TRAMITACAO) + + assunto = django_filters.CharFilter(lookup_expr='icontains') + + interessado = django_filters.CharFilter(lookup_expr='icontains') + + + class Meta: + model = DocumentoAdministrativo + fields = ['tipo', + 'numero', + 'numero_protocolo', + 'data', + 'tramitacaoadministrativo__unidade_tramitacao_local', + 'tramitacaoadministrativo__status'] + + order_by = ( + ('', 'Selecione'), + ('CRE', 'Ordem Crescente'), + ('DEC', 'Ordem Decrescente'), + ) + + order_by_mapping = { + '': [], + 'CRE': ['ano', 'numero'], + 'DEC': ['-ano', '-numero'], + } + + def get_order_by(self, order_value): + if order_value in self.order_by_mapping: + return self.order_by_mapping[order_value] + else: + return super(DocumentoAdministrativoFilterSet, + self).get_order_by(order_value) + + def __init__(self, *args, **kwargs): + super(DocumentoAdministrativoFilterSet, self).__init__(*args, **kwargs) + + local_atual = 'tramitacaoadministrativo__unidade_tramitacao_local' + self.filters['tipo'].label = 'Tipo de Documento' + self.filters['tramitacaoadministrativo__status'].label = 'Situação' + self.filters[local_atual].label = 'Localização Atual' + + row1 = crispy_layout_mixin.to_row( + [('tipo', 6), + ('numero', 6)]) + + row2 = crispy_layout_mixin.to_row( + [('ano', 4), + ('numero_protocolo', 4), + ('data', 4)]) + + row3 = crispy_layout_mixin.to_row( + [('interessado', 4), + ('assunto', 4), + ('tramitacao', 4)]) + + row4 = crispy_layout_mixin.to_row( + [('tramitacaoadministrativo__unidade_tramitacao_local', 6), + ('tramitacaoadministrativo__status', 6)]) + + row5 = crispy_layout_mixin.to_row( + [('o', 12)]) + + self.form.helper = FormHelper() + self.form.helper.form_method = 'GET' + self.form.helper.layout = Layout( + Fieldset(_('Pesquisar Protocolo'), + row1, row2, + row3,row4, row5, + form_actions(save_label='Pesquisar')) + ) + + class AnularProcoloAdmForm(ModelForm): numero = forms.CharField(required=True, diff --git a/protocoloadm/urls.py b/protocoloadm/urls.py index 9022e4358..09951476d 100644 --- a/protocoloadm/urls.py +++ b/protocoloadm/urls.py @@ -8,7 +8,7 @@ from protocoloadm.views import (AnularProtocoloAdmView, DocumentoAcessorioAdministrativoEditView, DocumentoAcessorioAdministrativoView, DocumentoAdministrativoCrud, - PesquisarDocumentoAdministrativo, + PesquisarDocumentoAdministrativoView, ProposicaoDetailView, ProposicaoReceberView, ProposicaoView, ProposicoesIncorporadasView, ProposicoesNaoIncorporadasView, @@ -57,7 +57,7 @@ urlpatterns = [ url(r'^protocoloadm/protocolar-mat', ProtocoloMateriaView.as_view(), name='protocolar_mat'), url(r'^protocoloadm/pesq-doc-adm', - PesquisarDocumentoAdministrativo.as_view(), name='pesq_doc_adm'), + PesquisarDocumentoAdministrativoView.as_view(), name='pesq_doc_adm'), url(r'^protocoloadm/doc-adm/(?P\d+)$', DetailDocumentoAdministrativo.as_view(), name='detail_doc_adm'), url(r'^protocoloadm/doc-ace-adm/(?P\d+)', diff --git a/protocoloadm/views.py b/protocoloadm/views.py index bc4b122d2..6acc92aff 100644 --- a/protocoloadm/views.py +++ b/protocoloadm/views.py @@ -17,7 +17,8 @@ from materia.models import Proposicao, TipoMateriaLegislativa from sapl.utils import create_barcode, get_client_ip from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm, - DocumentoAdministrativoForm, ProposicaoSimpleForm, + DocumentoAdministrativoForm, + DocumentoAdministrativoFilterSet, ProposicaoSimpleForm, ProtocoloDocumentForm, ProtocoloFilterSet, ProtocoloMateriaForm, TramitacaoAdmForm) from .models import (Autor, DocumentoAcessorioAdministrativo, @@ -358,69 +359,64 @@ class ProposicaoDetailView(DetailView): return context -class PesquisarDocumentoAdministrativo(TemplateView): - template_name = "protocoloadm/pesquisa_doc_adm.html" - - def get_tipos_doc(self): - return TipoDocumentoAdministrativo.objects.all() - - def get(self, request, *args, **kwargs): - return self.render_to_response( - {"tipos_doc": TipoDocumentoAdministrativo.objects.all()} - ) +class PesquisarDocumentoAdministrativoView(FilterView): + model = DocumentoAdministrativo + filterset_class = DocumentoAdministrativoFilterSet + paginate_by = 10 - def post(self, request, *args, **kwargs): + def get_filterset_kwargs(self, filterset_class): + super(PesquisarDocumentoAdministrativoView, + self).get_filterset_kwargs(filterset_class) - if request.POST['tipo_documento']: - kwargs['tipo_id'] = request.POST['tipo_documento'] + kwargs = {'data': self.request.GET or None} - if request.POST['numero']: - kwargs['numero'] = request.POST['numero'] + qs = self.get_queryset() - if request.POST['ano']: - kwargs['ano'] = request.POST['ano'] + qs = qs.distinct() - if request.POST['numero_protocolo']: - kwargs['numero_protocolo'] = request.POST['numero_protocolo'] + kwargs.update({ + 'queryset': qs, + }) + return kwargs - if request.POST['periodo_inicial']: - kwargs['periodo_inicial'] = request.POST['periodo_inicial'] + def get_context_data(self, **kwargs): + context = super(PesquisarDocumentoAdministrativoView, + self).get_context_data(**kwargs) - if request.POST['periodo_final']: - kwargs['periodo_final'] = request.POST['periodo_final'] + paginator = context['paginator'] + page_obj = context['page_obj'] - if request.POST['interessado']: - kwargs['interessado'] = request.POST['interessado'] + context['page_range'] = make_pagination( + page_obj.number, paginator.num_pages) - if request.POST['assunto']: - kwargs['assunto_ementa__icontains'] = request.POST['assunto'] + return context - if request.POST['tramitacao']: - if request.POST['tramitacao'] == 1: - kwargs['tramitacao'] = True - elif request.POST['tramitacao'] == 0: - kwargs['tramitacao'] = False - else: - kwargs['tramitacao'] = request.POST['tramitacao'] + def get(self, request, *args, **kwargs): + super(PesquisarDocumentoAdministrativoView, self).get(request) - # TODO - # if request.POST['localizacao']: - # kwargs['localizacao'] = request.POST['localizacao'] + # Se a pesquisa estiver quebrando com a paginação + # Olhe esta função abaixo + # Provavelmente você criou um novo campo no Form/FilterSet + # Então a ordem da URL está diferente + data = self.filterset.data + if (data and data.get('tipo') is not None): + url = "&"+str(self.request.environ['QUERY_STRING']) + if url.startswith("&page"): + ponto_comeco = url.find('tipo=') - 1 + url = url[ponto_comeco:] + else: + url = '' - # if request.POST['situacao']: - # kwargs['situacao'] = request.POST['situacao'] + self.filterset.form.fields['o'].label = _('Ordenação') - doc = DocumentoAdministrativo.objects.filter(**kwargs) + context = self.get_context_data(filter=self.filterset, + object_list=self.object_list, + filter_url=url, + numero_res=len(self.object_list) + ) - if len(doc) == 0: - return self.render_to_response( - {'error': _('Nenhum resultado encontrado!'), - "tipos_doc": TipoDocumentoAdministrativo.objects.all()} - ) - else: - return self.render_to_response( - {'documentos': doc} - ) + return self.render_to_response(context) + class DetailDocumentoAdministrativo(DetailView): diff --git a/templates/protocoloadm/documentoadministrativo_filter.html b/templates/protocoloadm/documentoadministrativo_filter.html new file mode 100644 index 000000000..149852470 --- /dev/null +++ b/templates/protocoloadm/documentoadministrativo_filter.html @@ -0,0 +1,48 @@ +{% extends "crud/detail.html" %} +{% load i18n %} +{% load crispy_forms_tags %} +{% block actions %}{% endblock %} + +{% block sections_nav %} {% endblock %} + +{% block detail_content %} +

Pesquisar Documento Administrativo

+

+ + + {% crispy filter.form %} + +

+ + + + + {% if page_obj|length %} + {% if numero_res > 1 %} +

Pesquisa concluída com sucesso! Foram encontrados {{numero_res}} documentos.

+ {% elif numero_res == 1 %} +

Pesquisa concluída com sucesso! Foi encontrado {{numero_res}} documento.

+ {% endif %} + + {% for d in page_obj %} + + + + {% endfor %} + {% else %} + + + {% endif %} + +

Resultados

+ {{d.tipo.sigla}} {{d.numero}}/{{d.ano}} - {{d.tipo}}
+ {{ d.assunto|safe }}
+
+

+
+

Nenhum documento encontrado com essas especificações

+
+ +{% include "paginacao.html" %} + +{% endblock detail_content %} \ No newline at end of file diff --git a/templates/protocoloadm/pesquisa_doc_adm.html b/templates/protocoloadm/pesquisa_doc_adm.html deleted file mode 100644 index 27217ab58..000000000 --- a/templates/protocoloadm/pesquisa_doc_adm.html +++ /dev/null @@ -1,66 +0,0 @@ -{% extends "protocoloadm/pesquisa_documento_detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} - -{% block detail_content %} -
- Pesquisa Básica - {% if documentos %} - Total: {{ documentos|length }} - - - {% for d in documentos %} - - - - {% endfor %} -
- {{ d.tipo.sigla }} {{ d.numero }}/{{ d.ano }} - {{ d.tipo }}
- {{ d.assunto }}
- Interessado: {{ d.interessado }} -
- {% else %} -
- {% csrf_token %} - - {% if error %} -
{{ error }}
- {% endif %} - - Tipo Documento: -
- Número:
- Ano:
- Núm. Protocolo:
- Período Data:
- Inicial: - Final:
- Interessado:
- Assunto:
- Tramitando: -
- - - -
- {% endif %} -
-{% endblock %} \ No newline at end of file