Browse Source

Refatora a Pesquisa de Documento Adm

pull/417/head
Eduardo Calil 10 years ago
parent
commit
f4b0f9f75f
  1. 98
      protocoloadm/forms.py
  2. 4
      protocoloadm/urls.py
  3. 96
      protocoloadm/views.py
  4. 48
      templates/protocoloadm/documentoadministrativo_filter.html
  5. 66
      templates/protocoloadm/pesquisa_doc_adm.html

98
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,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): 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+)',

96
protocoloadm/views.py

@ -17,7 +17,8 @@ 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,
DocumentoAdministrativoForm, ProposicaoSimpleForm, DocumentoAdministrativoForm,
DocumentoAdministrativoFilterSet, ProposicaoSimpleForm,
ProtocoloDocumentForm, ProtocoloFilterSet, ProtocoloDocumentForm, ProtocoloFilterSet,
ProtocoloMateriaForm, TramitacaoAdmForm) ProtocoloMateriaForm, TramitacaoAdmForm)
from .models import (Autor, DocumentoAcessorioAdministrativo, from .models import (Autor, DocumentoAcessorioAdministrativo,
@ -358,69 +359,64 @@ 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):

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 %}
<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>
<!-- <strong>Localização Atual:</strong> {{m.tramitacao_set.last.unidade_tramitacao_destino|default_if_none:"Não Informada"}} --></br>
<p></p>
</tr>
{% endfor %}
{% else %}
<tr>
<td>
<h3>Nenhum documento encontrado com essas especificações</h3>
</tr>
{% endif %}
</table>
{% include "paginacao.html" %}
{% 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 %}
Loading…
Cancel
Save