Browse Source

Fix #391 refatora pesquisa doc adm django filter (#417)

* Refatora a Pesquisa de Documento Adm

* Finaliza a refatoracao da pesquisa por documento administrativo

* Cria o botao de pesquisa por Documento Administrativo

* Faz ir para o menu principal quando clica na logoda aplicacao

* Arruma PEP8

* Arruma alguns detalhes

* Faz modificacoes propostas pela issue 418
fix #418
pull/445/head
eduardocalil 9 years ago
committed by Edward
parent
commit
5ec7945cb2
  1. 2
      materia/forms.py
  2. 97
      protocoloadm/forms.py
  3. 4
      protocoloadm/urls.py
  4. 93
      protocoloadm/views.py
  5. 5
      templates/base.html
  6. 4
      templates/materia/materialegislativa_filter.html
  7. 48
      templates/protocoloadm/documentoadministrativo_filter.html
  8. 66
      templates/protocoloadm/pesquisa_doc_adm.html
  9. 6
      templates/protocoloadm/protocolo_filter.html

2
materia/forms.py

@ -451,7 +451,7 @@ class MateriaLegislativaFilterSet(django_filters.FilterSet):
self.form.helper = FormHelper() self.form.helper = FormHelper()
self.form.helper.form_method = 'GET' self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout( self.form.helper.layout = Layout(
Fieldset(_('Pesquisa Básica'), Fieldset(_('Pesquisa de Matéria'),
row1, row2, row3, row1, row2, row3,
HTML(sapl.utils.autor_label), HTML(sapl.utils.autor_label),
HTML(sapl.utils.autor_modal), HTML(sapl.utils.autor_modal),

97
protocoloadm/forms.py

@ -28,6 +28,10 @@ NATUREZA_PROCESSO = [('', 'Ambos'),
ANO_CHOICES = [('', '---------')] + RANGE_ANOS ANO_CHOICES = [('', '---------')] + RANGE_ANOS
EM_TRAMITACAO = [('', 'Tanto Faz'),
(0, 'Sim'),
(1, 'Não')]
class ProtocoloFilterSet(django_filters.FilterSet): class ProtocoloFilterSet(django_filters.FilterSet):
@ -102,11 +106,6 @@ class ProtocoloFilterSet(django_filters.FilterSet):
('tipo_protocolo', 4), ('tipo_protocolo', 4),
('tipo_materia', 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( row3 = crispy_layout_mixin.to_row(
[('interessado', 6), [('interessado', 6),
('assunto_ementa', 6)]) ('assunto_ementa', 6)])
@ -137,6 +136,94 @@ 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_destino',
'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_destino'
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_destino', 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 Documento'),
row1, row2,
row3, row4, row5,
form_actions(save_label='Pesquisar'))
)
class AnularProcoloAdmForm(ModelForm): class AnularProcoloAdmForm(ModelForm):
numero = forms.CharField(required=True, numero = forms.CharField(required=True,

4
protocoloadm/urls.py

@ -8,7 +8,7 @@ from protocoloadm.views import (AnularProtocoloAdmView,
DocumentoAcessorioAdministrativoEditView, DocumentoAcessorioAdministrativoEditView,
DocumentoAcessorioAdministrativoView, DocumentoAcessorioAdministrativoView,
DocumentoAdministrativoCrud, DocumentoAdministrativoCrud,
PesquisarDocumentoAdministrativo, PesquisarDocumentoAdministrativoView,
ProposicaoDetailView, ProposicaoReceberView, ProposicaoDetailView, ProposicaoReceberView,
ProposicaoView, ProposicoesIncorporadasView, ProposicaoView, ProposicoesIncorporadasView,
ProposicoesNaoIncorporadasView, ProposicoesNaoIncorporadasView,
@ -57,7 +57,7 @@ urlpatterns = [
url(r'^protocoloadm/protocolar-mat', url(r'^protocoloadm/protocolar-mat',
ProtocoloMateriaView.as_view(), name='protocolar_mat'), ProtocoloMateriaView.as_view(), name='protocolar_mat'),
url(r'^protocoloadm/pesq-doc-adm', 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<pk>\d+)$', url(r'^protocoloadm/doc-adm/(?P<pk>\d+)$',
DetailDocumentoAdministrativo.as_view(), name='detail_doc_adm'), DetailDocumentoAdministrativo.as_view(), name='detail_doc_adm'),
url(r'^protocoloadm/doc-ace-adm/(?P<pk>\d+)', url(r'^protocoloadm/doc-ace-adm/(?P<pk>\d+)',

93
protocoloadm/views.py

@ -17,6 +17,7 @@ from materia.models import Proposicao, TipoMateriaLegislativa
from sapl.utils import create_barcode, get_client_ip from sapl.utils import create_barcode, get_client_ip
from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm, from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm,
DocumentoAdministrativoFilterSet,
DocumentoAdministrativoForm, ProposicaoSimpleForm, DocumentoAdministrativoForm, ProposicaoSimpleForm,
ProtocoloDocumentForm, ProtocoloFilterSet, ProtocoloDocumentForm, ProtocoloFilterSet,
ProtocoloMateriaForm, TramitacaoAdmForm) ProtocoloMateriaForm, TramitacaoAdmForm)
@ -358,69 +359,63 @@ class ProposicaoDetailView(DetailView):
return context return context
class PesquisarDocumentoAdministrativo(TemplateView): class PesquisarDocumentoAdministrativoView(FilterView):
template_name = "protocoloadm/pesquisa_doc_adm.html" model = DocumentoAdministrativo
filterset_class = DocumentoAdministrativoFilterSet
def get_tipos_doc(self): paginate_by = 10
return TipoDocumentoAdministrativo.objects.all()
def get(self, request, *args, **kwargs):
return self.render_to_response(
{"tipos_doc": TipoDocumentoAdministrativo.objects.all()}
)
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 = {'data': self.request.GET or None}
kwargs['tipo_id'] = request.POST['tipo_documento']
if request.POST['numero']: qs = self.get_queryset()
kwargs['numero'] = request.POST['numero']
if request.POST['ano']: qs = qs.distinct()
kwargs['ano'] = request.POST['ano']
if request.POST['numero_protocolo']: kwargs.update({
kwargs['numero_protocolo'] = request.POST['numero_protocolo'] 'queryset': qs,
})
return kwargs
if request.POST['periodo_inicial']: def get_context_data(self, **kwargs):
kwargs['periodo_inicial'] = request.POST['periodo_inicial'] context = super(PesquisarDocumentoAdministrativoView,
self).get_context_data(**kwargs)
if request.POST['periodo_final']: paginator = context['paginator']
kwargs['periodo_final'] = request.POST['periodo_final'] page_obj = context['page_obj']
if request.POST['interessado']: context['page_range'] = make_pagination(
kwargs['interessado'] = request.POST['interessado'] page_obj.number, paginator.num_pages)
if request.POST['assunto']: return context
kwargs['assunto_ementa__icontains'] = request.POST['assunto']
if request.POST['tramitacao']: def get(self, request, *args, **kwargs):
if request.POST['tramitacao'] == 1: super(PesquisarDocumentoAdministrativoView, self).get(request)
kwargs['tramitacao'] = True
elif request.POST['tramitacao'] == 0:
kwargs['tramitacao'] = False
else:
kwargs['tramitacao'] = request.POST['tramitacao']
# TODO # Se a pesquisa estiver quebrando com a paginação
# if request.POST['localizacao']: # Olhe esta função abaixo
# kwargs['localizacao'] = request.POST['localizacao'] # 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']: self.filterset.form.fields['o'].label = _('Ordenação')
# kwargs['situacao'] = request.POST['situacao']
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(context)
return self.render_to_response(
{'error': _('Nenhum resultado encontrado!'),
"tipos_doc": TipoDocumentoAdministrativo.objects.all()}
)
else:
return self.render_to_response(
{'documentos': doc}
)
class DetailDocumentoAdministrativo(DetailView): class DetailDocumentoAdministrativo(DetailView):

5
templates/base.html

@ -56,7 +56,8 @@
<li class="dropdown"> <li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Protocolo <span class="caret"></span></a> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Protocolo <span class="caret"></span></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'protocoloadm:protocolo' %}">Pesquisar</a></li> <li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'protocoloadm:protocolo' %}">Pesquisar Protocolo</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'protocoloadm:pesq_doc_adm' %}">Pesquisar Documento Administrativo</a></li>
<!-- <li class="nav__sub-item"><a class="nav__sub-link" href="/materia">Protocolo Legislativo</a></li> --> <!-- <li class="nav__sub-item"><a class="nav__sub-link" href="/materia">Protocolo Legislativo</a></li> -->
{# <li class="nav__sub-item"><a class="nav__sub-link" href="">Protocolo Geral</a></li> #} {# <li class="nav__sub-item"><a class="nav__sub-link" href="">Protocolo Geral</a></li> #}
{# <li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'protocoloadm:proposicao' %}">Proposições</a></li> #} {# <li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'protocoloadm:proposicao' %}">Proposições</a></li> #}
@ -112,7 +113,7 @@
<header class="masthead"> <header class="masthead">
<div class="container"> <div class="container">
<div class="navbar-header"> <div class="navbar-header">
<a class="navbar-brand" href="#"> <a class="navbar-brand" href="/">
<img height="95" width="95" src="{% if logotipo %}{{ MEDIA_URL }}{{ logotipo }}{% else %}{% static 'img/logo.png' %}{% endif %}" <img height="95" width="95" src="{% if logotipo %}{{ MEDIA_URL }}{{ logotipo }}{% else %}{% static 'img/logo.png' %}{% endif %}"
alt="Logo" class="img-responsive visible-lg-inline-block vcenter" > alt="Logo" class="img-responsive visible-lg-inline-block vcenter" >
<span class="vcenter"> <span class="vcenter">

4
templates/materia/materialegislativa_filter.html

@ -13,6 +13,7 @@
{% crispy filter.form %} {% crispy filter.form %}
<p></p> <p></p>
{% if filter_url %}
<table class="table table-striped table-bordered"> <table class="table table-striped table-bordered">
<thead class="thead-default"> <thead class="thead-default">
<tr><td><h3>Resultados</h3></td></tr> <tr><td><h3>Resultados</h3></td></tr>
@ -23,7 +24,6 @@
{% elif numero_res == 1 %} {% elif numero_res == 1 %}
<h3>Pesquisa concluída com sucesso! Foi encontrada {{numero_res}} matéria.</h3> <h3>Pesquisa concluída com sucesso! Foi encontrada {{numero_res}} matéria.</h3>
{% endif %} {% endif %}
{% for m in page_obj %} {% for m in page_obj %}
<tr> <tr>
@ -43,6 +43,8 @@
</table> </table>
{% include "paginacao.html" %} {% include "paginacao.html" %}
{% endif %}
{% endblock detail_content %} {% endblock detail_content %}

48
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 %}
<h1><b>Pesquisar Documento Administrativo</b></h1>
<br></br>
{% crispy filter.form %}
{% if filter_url %}
<p></p>
<table class="table table-striped table-bordered">
<thead class="thead-default">
<tr><td><h3>Resultados</h3></td></tr>
</thead>
{% if page_obj|length %}
{% if numero_res > 1 %}
<h3>Pesquisa concluída com sucesso! Foram encontrados {{numero_res}} documentos.</h3>
{% elif numero_res == 1 %}
<h3>Pesquisa concluída com sucesso! Foi encontrado {{numero_res}} documento.</h3>
{% endif %}
{% for d in page_obj %}
<tr>
<td>
<strong><a href="{% url 'protocoloadm:documentoadministrativo_detail' d.id %}">{{d.tipo.sigla}} {{d.numero}}/{{d.ano}} - {{d.tipo}}</strong></a></br>
{{ d.assunto|safe }}</br>
<p></p>
</tr>
{% endfor %}
{% else %}
<tr>
<td>
<h3>Nenhum documento encontrado com essas especificações</h3>
</tr>
{% endif %}
</table>
{% include "paginacao.html" %}
{% endif %}
{% endblock detail_content %}

66
templates/protocoloadm/pesquisa_doc_adm.html

@ -1,66 +0,0 @@
{% extends "protocoloadm/pesquisa_documento_detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block detail_content %}
<fieldset>
<legend>Pesquisa Básica</legend>
{% if documentos %}
Total: {{ documentos|length }}
<table>
{% for d in documentos %}
<tr>
<td>
<a href="{% url 'protocoloadm:detail_doc_adm' d.id %}"><b>{{ d.tipo.sigla }} {{ d.numero }}/{{ d.ano }} - {{ d.tipo }}</b></a> <br />
{{ d.assunto }} <br />
<b>Interessado:</b> {{ d.interessado }}
</td>
</tr>
{% endfor %}
</table>
{% else %}
<form method="POST">
{% csrf_token %}
{% if error %}
<h5 align="center"><font color="#FF0000">{{ error }}</font></h5>
{% endif %}
Tipo Documento:
<select name="tipo_documento">
<option value=""> --- </option>
{% for tipo in tipos_doc %}
<option value="{{tipo.id}}">{{tipo.descricao}}</option>
{% endfor %}
</select> <br>
Número: <input type="text" name="numero" id="numero" /> <br>
Ano: <input type="text" name="ano" id="ano" /> <br>
Núm. Protocolo: <input type="text" name="numero_protocolo" id="numero_protocolo" /> <br>
Período Data: <br>
Inicial: <input type="text" name="periodo_inicial" id="periodo_inicial" class="dateinput"/>
Final: <input type="text" name="periodo_final" id="periodo_final" class="dateinput"/> <br>
Interessado: <input type="text" name="interessado" id="interessado" /> <br>
Assunto: <input type="text" name="assunto" id="assunto" /> <br>
Tramitando:
<select name="tramitacao">
<option value="1">Sim</option>
<option value="0">Não</option>
<option value="" selected>Tanto Faz</option>
</select> <br>
<!-- TODO
Localização Atual:
<select name="localizacao">
<option value=""> - </option>
</select> <br>
Situação:
<select name="situacao">
<option value=""> - </option>
</select> <br><br>
-->
<input type="submit" value="Pesquisar" class="primary button"/>
</form>
{% endif %}
</fieldset>
{% endblock %}

6
templates/protocoloadm/protocolo_filter.html

@ -7,11 +7,11 @@
{% block sections_nav %} {% endblock %} {% block sections_nav %} {% endblock %}
{% block detail_content %} {% block detail_content %}
<h1><b>Pesquisar Protocolo</b></h1> <h1><b>Pesquisa de Protocolo</b></h1>
<br></br> <br></br>
{% crispy filter.form %} {% crispy filter.form %}
{% if filter_url %}
<p></p> <p></p>
<table class="table table-striped table-bordered"> <table class="table table-striped table-bordered">
<thead class="thead-default"> <thead class="thead-default">
@ -67,4 +67,6 @@
{% include "paginacao.html" %} {% include "paginacao.html" %}
{% endif %}
{% endblock detail_content %} {% endblock detail_content %}
Loading…
Cancel
Save