From 78b6c13a54db4dc9b2624bfc1025778e7ec0270e Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 22 Mar 2016 14:02:38 -0300 Subject: [PATCH 01/17] Inicia a refatoracao da Pesquisa de Materia --- materia/forms.py | 133 +++++++++++++++--- materia/views.py | 106 +++++++++----- requirements/requirements.txt | 1 + .../materia/materialegislativa_filter.html | 29 ++++ 4 files changed, 212 insertions(+), 57 deletions(-) create mode 100644 templates/materia/materialegislativa_filter.html diff --git a/materia/forms.py b/materia/forms.py index 47138fbea..f61a29dc7 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -1,19 +1,25 @@ from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML, Button, Column, Fieldset, Layout, Submit from django import forms -from django.core.exceptions import ObjectDoesNotExist, ValidationError +from django.core.exceptions import ValidationError +from django_filters import FilterSet from django.forms import ModelForm from django.utils.translation import ugettext_lazy as _ +import django_filters import crispy_layout_mixin import sapl + from crispy_layout_mixin import form_actions from norma.models import LegislacaoCitada, TipoNormaJuridica from sapl.settings import MAX_DOC_UPLOAD_SIZE +from parlamentares.models import Parlamentar, Partido + from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, DespachoInicial, DocumentoAcessorio, MateriaLegislativa, - Numeracao, Proposicao, Relatoria, StatusTramitacao, + Numeracao, Origem, Proposicao, Relatoria, + StatusTramitacao, TipoAutor, TipoDocumento, TipoMateriaLegislativa, Tramitacao, UnidadeTramitacao) ORDENACAO_MATERIAIS = [(1, 'Crescente'), @@ -538,26 +544,11 @@ class AutoriaForm(ModelForm): choices=[(True, _('Sim')), (False, _('Não'))], ) - materia_id = forms.CharField(widget=forms.HiddenInput(), required=False) - class Meta: model = Autoria fields = ['autor', 'primeiro_autor', - 'partido', - 'materia_id'] - - def clean(self): - if self.data['materia_id'] and self.data['autor']: - try: - materia = MateriaLegislativa.objects.get( - id=self.data['materia_id']) - Autoria.objects.get(autor=self.data['autor'], - materia=materia) - raise forms.ValidationError( - _('Essa autoria já foi adicionada!')) - except ObjectDoesNotExist: - pass + 'partido'] def __init__(self, excluir=False, *args, **kwargs): @@ -688,3 +679,109 @@ class MateriaLegislativaPesquisaForm(ModelForm): ) super(MateriaLegislativaPesquisaForm, self).__init__( *args, **kwargs) + + +class MateriaLegislativaPesquisaFields(FilterSet): + + # autor = django_filters.ChoiceFilter( + # label='Autor', + # required=False, + # queryset=Autor.objects.all().order_by('tipo'), + # empty_label='Selecione', + # ) + + # # relatores são os parlamentares ativos? + # relatoria__parlamentar__id = django_filters.ChoiceFilter( + # label='Relator', + # required=False, + # queryset=Parlamentar.objects.all().order_by('nome_parlamentar'), + # empty_label='Selecione', + # ) + + # tipo = django_filters.ChoiceFilter( + # label=_('Tipo de Matéria'), + # required=False, + # queryset=TipoMateriaLegislativa.objects.all(), + # empty_label='Selecione', + # ) + + # data_apresentacao = django_filters.DateFilter( + # label=u'Data de Apresentação', + # input_formats=['%d/%m/%Y'], + # required=False, + # widget=forms.DateInput( + # format='%d/%m/%Y', + # attrs={'class': 'dateinput'})) + + # data_publicacao = django_filters.DateFilter( + # label=u'Data da Publicação', + # input_formats=['%d/%m/%Y'], + # required=False, + # widget=forms.DateInput( + # format='%d/%m/%Y', + # attrs={'class': 'dateinput'})) + + numero = django_filters.CharFilter(required=False, + label=u'Número da Matéria') + numero_protocolo = django_filters.CharFilter(required=False, + label=u'Núm. Protocolo') + ano = django_filters.CharFilter(required=False, + label=u'Ano da Matéria') + ementa__icontains = django_filters.CharFilter(required=False, + label=u'Assunto') + + # tramitacao__unidade_tramitacao_destino = django_filters.ChoiceFilter( + # label=_('Localização Atual'), + # required=False, + # queryset=UnidadeTramitacao.objects.all(), + # empty_label='Selecione', + # ) + + # tramitacao__status = django_filters.ChoiceFilter( + # label='Situação', + # required=False, + # queryset=StatusTramitacao.objects.all(), + # empty_label='Selecione', + # ) + + # em_tramitacao = django_filters.ChoiceFilter(required=False, + # label='Tramitando', + # choices=em_tramitacao(), + # widget=forms.Select( + # attrs={'class': 'selector'})) + + # autoria__autor__tipo = django_filters.ChoiceFilter( + # label=_('Tipo Autor'), + # required=False, + # queryset=TipoAutor.objects.all(), + # empty_label='Selecione', + # ) + + # autoria__partido = django_filters.ChoiceFilter( + # label=_('Partido (Autor)'), + # required=False, + # queryset=Partido.objects.all(), + # empty_label='Selecione') + + # local_origem_externa = django_filters.ChoiceFilter( + # label=_('Localização de Origem'), + # required=False, + # queryset=Origem.objects.all(), + # empty_label='Selecione') + + class Meta: + models = MateriaLegislativa + fields = ['tipo', + 'ano', + 'numero_protocolo', + 'data_apresentacao', + 'data_publicacao', + 'em_tramitacao', + 'ementa__icontains', + 'autoria__autor__id', + 'relatoria__parlamentar__id', + 'tramitacao__unidade_tramitacao_destino', + 'tramitacao__status', + 'autoria__autor__tipo', + 'autoria__partido', + 'local_origem_externa'] diff --git a/materia/views.py b/materia/views.py index 9cee72ad5..c3642e184 100644 --- a/materia/views.py +++ b/materia/views.py @@ -1,3 +1,5 @@ +from django_filters.views import FilterView + from datetime import datetime from random import choice from string import ascii_letters, digits @@ -24,7 +26,7 @@ from .forms import (AcompanhamentoMateriaForm, AutoriaForm, DespachoInicialForm, DocumentoAcessorioForm, FormularioCadastroForm, FormularioSimplificadoForm, LegislacaoCitadaForm, MateriaAnexadaForm, - MateriaLegislativaPesquisaForm, NumeracaoForm, + MateriaLegislativaPesquisaFields, NumeracaoForm, ProposicaoForm, RelatoriaForm, TramitacaoForm) from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, DespachoInicial, DocumentoAcessorio, MateriaLegislativa, @@ -1187,59 +1189,59 @@ class ProposicaoListView(ListView): return context -class MateriaLegislativaPesquisaView(FormView): - template_name = 'materia/pesquisa_materia.html' +# class MateriaLegislativaPesquisaView(FormView): +# template_name = 'materia/pesquisa_materia.html' - def get_success_url(self): - return reverse('pesquisar_materia') +# def get_success_url(self): +# return reverse('pesquisar_materia') - def get(self, request, *args, **kwargs): - form = MateriaLegislativaPesquisaForm() - return self.render_to_response({'form': form}) +# def get(self, request, *args, **kwargs): +# form = MateriaLegislativaPesquisaForm() +# return self.render_to_response({'form': form}) - def post(self, request, *args, **kwargs): - kwargs = {} - form = MateriaLegislativaPesquisaForm(request.POST) +# def post(self, request, *args, **kwargs): +# kwargs = {} +# form = MateriaLegislativaPesquisaForm(request.POST) - if form.data['tipo']: - kwargs['tipo'] = form.data['tipo'] +# if form.data['tipo']: +# kwargs['tipo'] = form.data['tipo'] - if form.data['numero']: - kwargs['numero'] = form.data['numero'] +# if form.data['numero']: +# kwargs['numero'] = form.data['numero'] - if form.data['ano']: - kwargs['ano'] = form.data['ano'] +# if form.data['ano']: +# kwargs['ano'] = form.data['ano'] - if form.data['numero_protocolo']: - kwargs['numero_protocolo'] = form.data['numero_protocolo'] +# if form.data['numero_protocolo']: +# kwargs['numero_protocolo'] = form.data['numero_protocolo'] - if (form.data['apresentacao_inicial'] and - form.data['apresentacao_final']): - kwargs['apresentacao_inicial'] = form.data['apresentacao_inicial'] - kwargs['apresentacao_final'] = form.data['apresentacao_final'] +# if (form.data['apresentacao_inicial'] and +# form.data['apresentacao_final']): +# kwargs['apresentacao_inicial'] = form.data['apresentacao_inicial'] +# kwargs['apresentacao_final'] = form.data['apresentacao_final'] - if (form.data['publicacao_inicial'] and - form.data['publicacao_final']): - kwargs['publicacao_inicial'] = form.data['publicacao_inicial'] - kwargs['publicacao_final'] = form.data['publicacao_final'] +# if (form.data['publicacao_inicial'] and +# form.data['publicacao_final']): +# kwargs['publicacao_inicial'] = form.data['publicacao_inicial'] +# kwargs['publicacao_final'] = form.data['publicacao_final'] - if form.data['local_origem_externa']: - kwargs['local_origem_externa'] = form.data['local_origem_externa'] +# if form.data['local_origem_externa']: +# kwargs['local_origem_externa'] = form.data['local_origem_externa'] - if form.data['autor']: - kwargs['autor'] = form.data['autor'] +# if form.data['autor']: +# kwargs['autor'] = form.data['autor'] - if form.data['localizacao']: - kwargs['localizacao'] = form.data['localizacao'] +# if form.data['localizacao']: +# kwargs['localizacao'] = form.data['localizacao'] - if form.data['em_tramitacao']: - kwargs['em_tramitacao'] = form.data['em_tramitacao'] +# if form.data['em_tramitacao']: +# kwargs['em_tramitacao'] = form.data['em_tramitacao'] - if form.data['situacao']: - kwargs['situacao'] = form.data['situacao'] +# if form.data['situacao']: +# kwargs['situacao'] = form.data['situacao'] - request.session['kwargs'] = kwargs - return redirect('pesquisar_materia_list') +# request.session['kwargs'] = kwargs +# return redirect('pesquisar_materia_list') class PesquisaMateriaListView(ListView): @@ -1300,6 +1302,32 @@ class PesquisaMateriaListView(ListView): return materias +class MateriaLegislativaPesquisaView(FilterView): + model = MateriaLegislativa + filterset_class = MateriaLegislativaPesquisaFields + paginate_by = 10 + + def get_context_data(self, **kwargs): + context = super(MateriaLegislativaPesquisaView, + self).get_context_data(**kwargs) + + paginator = context['paginator'] + page_obj = context['page_obj'] + + context['page_range'] = make_pagination( + page_obj.number, paginator.num_pages) + return context + + def get(self, request, *args, **kwargs): + # import ipdb; ipdb.set_trace() + filterset_class = self.get_filterset_class() + self.filterset = self.get_filterset(filterset_class) + self.object_list = self.filterset.qs + context = self.get_context_data(filter=self.filterset, + object_list=self.object_list) + return self.render_to_response(context) + + class ProposicaoView(CreateView): template_name = "materia/proposicao/proposicao.html" form_class = ProposicaoForm diff --git a/requirements/requirements.txt b/requirements/requirements.txt index fa666f49b..b4a02f396 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -6,6 +6,7 @@ django-braces==1.8.1 django-compressor==2.0 django-crispy-forms==1.6.0 django-extra-views==0.7.1 +django-filter==0.13.0 django-model-utils==2.4 django-sass-processor==0.3.4 django==1.9 diff --git a/templates/materia/materialegislativa_filter.html b/templates/materia/materialegislativa_filter.html new file mode 100644 index 000000000..277911414 --- /dev/null +++ b/templates/materia/materialegislativa_filter.html @@ -0,0 +1,29 @@ +{% extends "materia/materialegislativa_detail.html" %} +{% load i18n %} +{% load crispy_forms_tags %} +{% block actions %}{% endblock %} +{% block sections_nav %} {% endblock %} +{% block detail_content %} + +
+ {{ filter.form.as_p }} + +
+ + + + + + {% for m in page_obj %} + + + {% endfor %} +

Resultados

+ {{m.tipo.sigla}} {{m.numero}}/{{m.ano}} - {{m.tipo}}
+ {{ m.ementa|safe }}
+ Localização Atual: {{m.tramitacao_set.last.unidade_tramitacao_destino|default_if_none:"Não Informada"}}
+

+
+{% include "paginacao.html" %} + +{% endblock detail_content %} \ No newline at end of file From e1eff41fc79bb148a4d3491da9fc265617a2e9fb Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Wed, 23 Mar 2016 13:56:38 -0300 Subject: [PATCH 02/17] Adiciona mais campos de pesquisa --- materia/forms.py | 171 ++++++++++-------- parlamentares/models.py | 2 - .../materia/materialegislativa_filter.html | 2 +- 3 files changed, 92 insertions(+), 83 deletions(-) diff --git a/materia/forms.py b/materia/forms.py index f61a29dc7..b11f3a76a 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -683,91 +683,93 @@ class MateriaLegislativaPesquisaForm(ModelForm): class MateriaLegislativaPesquisaFields(FilterSet): - # autor = django_filters.ChoiceFilter( - # label='Autor', - # required=False, - # queryset=Autor.objects.all().order_by('tipo'), - # empty_label='Selecione', - # ) - - # # relatores são os parlamentares ativos? - # relatoria__parlamentar__id = django_filters.ChoiceFilter( - # label='Relator', - # required=False, - # queryset=Parlamentar.objects.all().order_by('nome_parlamentar'), - # empty_label='Selecione', - # ) - - # tipo = django_filters.ChoiceFilter( - # label=_('Tipo de Matéria'), - # required=False, - # queryset=TipoMateriaLegislativa.objects.all(), - # empty_label='Selecione', - # ) - - # data_apresentacao = django_filters.DateFilter( - # label=u'Data de Apresentação', - # input_formats=['%d/%m/%Y'], - # required=False, - # widget=forms.DateInput( - # format='%d/%m/%Y', - # attrs={'class': 'dateinput'})) - - # data_publicacao = django_filters.DateFilter( - # label=u'Data da Publicação', - # input_formats=['%d/%m/%Y'], - # required=False, - # widget=forms.DateInput( - # format='%d/%m/%Y', - # attrs={'class': 'dateinput'})) - numero = django_filters.CharFilter(required=False, label=u'Número da Matéria') numero_protocolo = django_filters.CharFilter(required=False, label=u'Núm. Protocolo') ano = django_filters.CharFilter(required=False, label=u'Ano da Matéria') - ementa__icontains = django_filters.CharFilter(required=False, - label=u'Assunto') - - # tramitacao__unidade_tramitacao_destino = django_filters.ChoiceFilter( - # label=_('Localização Atual'), - # required=False, - # queryset=UnidadeTramitacao.objects.all(), - # empty_label='Selecione', - # ) - - # tramitacao__status = django_filters.ChoiceFilter( - # label='Situação', - # required=False, - # queryset=StatusTramitacao.objects.all(), - # empty_label='Selecione', - # ) - - # em_tramitacao = django_filters.ChoiceFilter(required=False, - # label='Tramitando', - # choices=em_tramitacao(), - # widget=forms.Select( - # attrs={'class': 'selector'})) - - # autoria__autor__tipo = django_filters.ChoiceFilter( - # label=_('Tipo Autor'), - # required=False, - # queryset=TipoAutor.objects.all(), - # empty_label='Selecione', - # ) - - # autoria__partido = django_filters.ChoiceFilter( - # label=_('Partido (Autor)'), - # required=False, - # queryset=Partido.objects.all(), - # empty_label='Selecione') - - # local_origem_externa = django_filters.ChoiceFilter( - # label=_('Localização de Origem'), - # required=False, - # queryset=Origem.objects.all(), - # empty_label='Selecione') + + tipo = django_filters.ModelChoiceFilter( + label=_('Tipo de Matéria'), + required=False, + queryset=TipoMateriaLegislativa.objects.all(), + empty_label='Selecione', + ) + + data_apresentacao = django_filters.DateFilter( + label=u'Data de Apresentação', + input_formats=['%d/%m/%Y'], + required=False, + widget=forms.DateInput( + format='%d/%m/%Y', + attrs={'class': 'dateinput'})) + + data_publicacao = django_filters.DateFilter( + label=u'Data da Publicação', + input_formats=['%d/%m/%Y'], + required=False, + widget=forms.DateInput( + format='%d/%m/%Y', + attrs={'class': 'dateinput'})) + + autoria__autor = django_filters.ModelChoiceFilter( + label='Autor', + required=False, + queryset=Autor.objects.all().order_by('tipo'), + empty_label='Selecione', + ) + + autoria__autor__tipo = django_filters.ModelChoiceFilter( + label=_('Tipo Autor'), + required=False, + queryset=TipoAutor.objects.all(), + empty_label='Selecione', + ) + + autoria__partido = django_filters.ModelChoiceFilter( + label=_('Partido (Autor)'), + required=False, + queryset=Partido.objects.all(), + empty_label='Selecione') + + # # relatores são os parlamentares ativos? + relatoria__parlamentar__id = django_filters.ModelChoiceFilter( + label='Relator', + required=False, + queryset=Parlamentar.objects.all().order_by('nome_parlamentar'), + empty_label='Selecione', + ) + + local_origem_externa = django_filters.ModelChoiceFilter( + label=_('Localização de Origem'), + required=False, + queryset=Origem.objects.all(), + empty_label='Selecione') + + tramitacao__unidade_tramitacao_destino = django_filters.ModelChoiceFilter( + label=_('Localização Atual'), + required=False, + queryset=UnidadeTramitacao.objects.all(), + empty_label='Selecione', + ) + + tramitacao__status = django_filters.ModelChoiceFilter( + label='Situação', + required=False, + queryset=StatusTramitacao.objects.all(), + empty_label='Selecione', + ) + + em_tramitacao = django_filters.ChoiceFilter(required=False, + label='Tramitando', + choices=em_tramitacao(), + widget=forms.Select( + attrs={'class': 'selector'})) + + ementa = django_filters.CharFilter(required=False, + label=u'Assunto', + lookup_expr='icontains') class Meta: models = MateriaLegislativa @@ -777,7 +779,7 @@ class MateriaLegislativaPesquisaFields(FilterSet): 'data_apresentacao', 'data_publicacao', 'em_tramitacao', - 'ementa__icontains', + 'ementa', 'autoria__autor__id', 'relatoria__parlamentar__id', 'tramitacao__unidade_tramitacao_destino', @@ -785,3 +787,12 @@ class MateriaLegislativaPesquisaFields(FilterSet): 'autoria__autor__tipo', 'autoria__partido', 'local_origem_externa'] + + def my_custom_filter(queryset, value): + materia = MateriaLegislativa.objects.raw( + 'SELECT DISTINCT materia_id, \ + max(data_encaminhamento) as data_encaminhamento \ + FROM materia_tramitacao \ + GROUP BY materia_id \ + ORDER BY materia_id') + return queryset.all() diff --git a/parlamentares/models.py b/parlamentares/models.py index c72762e0b..654f677e5 100644 --- a/parlamentares/models.py +++ b/parlamentares/models.py @@ -238,8 +238,6 @@ class Parlamentar(models.Model): biografia = models.TextField( blank=True, verbose_name=_('Biografia')) # XXX Esse atribuito foi colocado aqui para não atrapalhar a migração - unidade_deliberativa = models.BooleanField( - default=False, verbose_name=_('Unidade Deliberativa')) fotografia = models.ImageField( blank=True, null=True, diff --git a/templates/materia/materialegislativa_filter.html b/templates/materia/materialegislativa_filter.html index 277911414..48432cf56 100644 --- a/templates/materia/materialegislativa_filter.html +++ b/templates/materia/materialegislativa_filter.html @@ -9,7 +9,7 @@ {{ filter.form.as_p }} - +

From c6b471a2a9998fb57e4e160cfa509b605be5b3c8 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Mon, 28 Mar 2016 20:26:28 -0300 Subject: [PATCH 03/17] =?UTF-8?q?Come=C3=A7a=20a=20implementacao=20da=20pe?= =?UTF-8?q?squisa=20por=20status?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- materia/forms.py | 18 +++++++++--------- materia/views.py | 23 +++++++++++++++++++++-- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/materia/forms.py b/materia/forms.py index b11f3a76a..219231c03 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -2,6 +2,7 @@ from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML, Button, Column, Fieldset, Layout, Submit from django import forms from django.core.exceptions import ValidationError +from django.db.models import Max from django_filters import FilterSet from django.forms import ModelForm from django.utils.translation import ugettext_lazy as _ @@ -19,7 +20,7 @@ from parlamentares.models import Parlamentar, Partido from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, DespachoInicial, DocumentoAcessorio, MateriaLegislativa, Numeracao, Origem, Proposicao, Relatoria, - StatusTramitacao, TipoAutor, TipoDocumento, + StatusTramitacao, TipoAutor, TipoMateriaLegislativa, Tramitacao, UnidadeTramitacao) ORDENACAO_MATERIAIS = [(1, 'Crescente'), @@ -788,11 +789,10 @@ class MateriaLegislativaPesquisaFields(FilterSet): 'autoria__partido', 'local_origem_externa'] - def my_custom_filter(queryset, value): - materia = MateriaLegislativa.objects.raw( - 'SELECT DISTINCT materia_id, \ - max(data_encaminhamento) as data_encaminhamento \ - FROM materia_tramitacao \ - GROUP BY materia_id \ - ORDER BY materia_id') - return queryset.all() + # def filter_tramitacao__status(status): + # ultimas_tramitacoes = Tramitacao.objects.values( + # 'materia_id').annotate(data_encaminhamento=Max( + # 'data_encaminhamento'), + # id=Max('id')) + # ultimas_tramitacoes = ultimas_tramitacoes.filter(status=status) + # return ultimas_tramitacoes.materia diff --git a/materia/views.py b/materia/views.py index c3642e184..2b643ffca 100644 --- a/materia/views.py +++ b/materia/views.py @@ -8,6 +8,7 @@ from django.contrib import messages from django.core.exceptions import ObjectDoesNotExist from django.core.mail import send_mail from django.core.urlresolvers import reverse, reverse_lazy +from django.db.models import Max from django.http.response import HttpResponseRedirect from django.shortcuts import redirect from django.template import Context, loader @@ -1302,12 +1303,23 @@ class PesquisaMateriaListView(ListView): return materias +def filter_tramitacao__status(status): + ultimas_tramitacoes = Tramitacao.objects.values( + 'materia_id').annotate(data_encaminhamento=Max( + 'data_encaminhamento'), + id=Max('id')) + import ipdb; ipdb.set_trace() + ultimas_tramitacoes = ultimas_tramitacoes.filter(status=status) + return ultimas_tramitacoes + + class MateriaLegislativaPesquisaView(FilterView): model = MateriaLegislativa filterset_class = MateriaLegislativaPesquisaFields paginate_by = 10 def get_context_data(self, **kwargs): + # import ipdb; ipdb.set_trace() context = super(MateriaLegislativaPesquisaView, self).get_context_data(**kwargs) @@ -1319,10 +1331,17 @@ class MateriaLegislativaPesquisaView(FilterView): return context def get(self, request, *args, **kwargs): - # import ipdb; ipdb.set_trace() filterset_class = self.get_filterset_class() self.filterset = self.get_filterset(filterset_class) - self.object_list = self.filterset.qs + status_tramitacao = self.filterset.data.get('tramitacao__status') + if status_tramitacao and status_tramitacao != '': + status = filter_tramitacao__status(status_tramitacao) + mat_filt_ids = [ids.get('materia_id') for ids in status] + # import ipdb; ipdb.set_trace() + self.object_list = self.filterset.qs.filter( + id__in=mat_filt_ids) + else: + self.object_list = self.filterset.qs context = self.get_context_data(filter=self.filterset, object_list=self.object_list) return self.render_to_response(context) From 33f06da9f521187eee10e108acfb09fe2fc8d98a Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 29 Mar 2016 11:21:24 -0300 Subject: [PATCH 04/17] =?UTF-8?q?Finaliza=20a=20funcionalidade=20de=20todo?= =?UTF-8?q?s=20os=20campos=20de=20pesquisa.=20Finaliza=20os=20campos=20sit?= =?UTF-8?q?uacao=20e=20localiza=C3=A7ao=20atual?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- materia/forms.py | 44 +++++++++++--- materia/urls.py | 5 +- materia/views.py | 154 +++++++---------------------------------------- 3 files changed, 60 insertions(+), 143 deletions(-) diff --git a/materia/forms.py b/materia/forms.py index 219231c03..8414a87e3 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -1,8 +1,8 @@ from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML, Button, Column, Fieldset, Layout, Submit from django import forms -from django.core.exceptions import ValidationError from django.db.models import Max +from django.core.exceptions import ValidationError from django_filters import FilterSet from django.forms import ModelForm from django.utils.translation import ugettext_lazy as _ @@ -789,10 +789,38 @@ class MateriaLegislativaPesquisaFields(FilterSet): 'autoria__partido', 'local_origem_externa'] - # def filter_tramitacao__status(status): - # ultimas_tramitacoes = Tramitacao.objects.values( - # 'materia_id').annotate(data_encaminhamento=Max( - # 'data_encaminhamento'), - # id=Max('id')) - # ultimas_tramitacoes = ultimas_tramitacoes.filter(status=status) - # return ultimas_tramitacoes.materia + +def pega_ultima_tramitacao(): + ultimas_tramitacoes = Tramitacao.objects.values( + 'materia_id').annotate(data_encaminhamento=Max( + 'data_encaminhamento'), + id=Max('id')) + lista = [ids.get('id') for ids in ultimas_tramitacoes] + return lista + + +def filtra_tramitacao_status(status): + lista = pega_ultima_tramitacao() + ultimas_tramitacoes = Tramitacao.objects.filter(id__in=lista, + status=status) + lista = [ids.materia_id for ids in ultimas_tramitacoes] + return lista + + +def filtra_tramitacao_destino(destino): + lista = pega_ultima_tramitacao() + ultimas_tramitacoes = Tramitacao.objects.filter( + id__in=lista, + unidade_tramitacao_destino=destino) + lista = [ids.materia_id for ids in ultimas_tramitacoes] + return lista + + +def filtra_tramitacao_destino_and_status(status, destino): + lista = pega_ultima_tramitacao() + ultimas_tramitacoes = Tramitacao.objects.filter( + id__in=lista, + status=status, + unidade_tramitacao_destino=destino) + lista = [ids.materia_id for ids in ultimas_tramitacoes] + return lista diff --git a/materia/urls.py b/materia/urls.py index 69b5c08a7..ca064aa14 100644 --- a/materia/urls.py +++ b/materia/urls.py @@ -12,8 +12,7 @@ from materia.views import (AcompanhamentoConfirmarView, MateriaLegislativaCrud, MateriaLegislativaPesquisaView, MateriaTaView, NumeracaoEditView, NumeracaoView, OrgaoCrud, - OrigemCrud, PesquisaMateriaListView, - ProposicaoEditView, ProposicaoListView, + OrigemCrud, ProposicaoEditView, ProposicaoListView, ProposicaoTaView, ProposicaoView, RegimeTramitacaoCrud, RelatoriaEditView, RelatoriaView, StatusTramitacaoCrud, TipoAutorCrud, @@ -99,8 +98,6 @@ urlpatterns = [ ProposicaoEditView.as_view(), name='editar_proposicao'), url(r'^materia/pesquisar-materia$', MateriaLegislativaPesquisaView.as_view(), name='pesquisar_materia'), - url(r'^materia/pesquisar-materia-list$', - PesquisaMateriaListView.as_view(), name='pesquisar_materia_list'), url(r'^materia/(?P\d+)/acompanhar-materia/$', AcompanhamentoMateriaView.as_view(), name='acompanhar_materia'), url(r'^materia/(?P\d+)/acompanhar-confirmar$', diff --git a/materia/views.py b/materia/views.py index 2b643ffca..9bf559953 100644 --- a/materia/views.py +++ b/materia/views.py @@ -8,7 +8,6 @@ from django.contrib import messages from django.core.exceptions import ObjectDoesNotExist from django.core.mail import send_mail from django.core.urlresolvers import reverse, reverse_lazy -from django.db.models import Max from django.http.response import HttpResponseRedirect from django.shortcuts import redirect from django.template import Context, loader @@ -26,9 +25,12 @@ from sapl.utils import get_base_url from .forms import (AcompanhamentoMateriaForm, AutoriaForm, DespachoInicialForm, DocumentoAcessorioForm, FormularioCadastroForm, FormularioSimplificadoForm, + filtra_tramitacao_status, filtra_tramitacao_destino, + filtra_tramitacao_destino_and_status, LegislacaoCitadaForm, MateriaAnexadaForm, MateriaLegislativaPesquisaFields, NumeracaoForm, - ProposicaoForm, RelatoriaForm, TramitacaoForm) + ProposicaoForm, RelatoriaForm, TramitacaoForm + ) from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, DespachoInicial, DocumentoAcessorio, MateriaLegislativa, Numeracao, Orgao, Origem, Proposicao, RegimeTramitacao, @@ -1190,136 +1192,12 @@ class ProposicaoListView(ListView): return context -# class MateriaLegislativaPesquisaView(FormView): -# template_name = 'materia/pesquisa_materia.html' - -# def get_success_url(self): -# return reverse('pesquisar_materia') - -# def get(self, request, *args, **kwargs): -# form = MateriaLegislativaPesquisaForm() -# return self.render_to_response({'form': form}) - -# def post(self, request, *args, **kwargs): -# kwargs = {} -# form = MateriaLegislativaPesquisaForm(request.POST) - -# if form.data['tipo']: -# kwargs['tipo'] = form.data['tipo'] - -# if form.data['numero']: -# kwargs['numero'] = form.data['numero'] - -# if form.data['ano']: -# kwargs['ano'] = form.data['ano'] - -# if form.data['numero_protocolo']: -# kwargs['numero_protocolo'] = form.data['numero_protocolo'] - -# if (form.data['apresentacao_inicial'] and -# form.data['apresentacao_final']): -# kwargs['apresentacao_inicial'] = form.data['apresentacao_inicial'] -# kwargs['apresentacao_final'] = form.data['apresentacao_final'] - -# if (form.data['publicacao_inicial'] and -# form.data['publicacao_final']): -# kwargs['publicacao_inicial'] = form.data['publicacao_inicial'] -# kwargs['publicacao_final'] = form.data['publicacao_final'] - -# if form.data['local_origem_externa']: -# kwargs['local_origem_externa'] = form.data['local_origem_externa'] - -# if form.data['autor']: -# kwargs['autor'] = form.data['autor'] - -# if form.data['localizacao']: -# kwargs['localizacao'] = form.data['localizacao'] - -# if form.data['em_tramitacao']: -# kwargs['em_tramitacao'] = form.data['em_tramitacao'] - -# if form.data['situacao']: -# kwargs['situacao'] = form.data['situacao'] - -# request.session['kwargs'] = kwargs -# return redirect('pesquisar_materia_list') - - -class PesquisaMateriaListView(ListView): - template_name = 'materia/pesquisa_materia_list.html' - context_object_name = 'materias' - model = MateriaLegislativa - paginate_by = 10 - - def get_queryset(self): - kwargs = self.request.session['kwargs'] - - materias = MateriaLegislativa.objects.all().order_by( - '-numero', '-ano') - - if 'apresentacao_inicial' in kwargs: - inicial = datetime.strptime( - kwargs['apresentacao_inicial'], - '%d/%m/%Y').strftime('%Y-%m-%d') - final = datetime.strptime( - kwargs['apresentacao_final'], - '%d/%m/%Y').strftime('%Y-%m-%d') - materias = materias.filter( - data_apresentacao__range=(inicial, final)) - - if 'publicacao_inicial' in kwargs: - inicial = datetime.strptime( - kwargs['publicacao_inicial'], - '%d/%m/%Y').strftime('%Y-%m-%d') - final = datetime.strptime( - kwargs['publicacao_final'], - '%d/%m/%Y').strftime('%Y-%m-%d') - materias = materias.filter( - data_publicacao__range=(inicial, final)) - - if 'tipo' in kwargs: - materias = materias.filter(tipo_id=kwargs['tipo']) - - if 'numero' in kwargs: - materias = materias.filter(numero=kwargs['numero']) - - if 'ano' in kwargs: - materias = materias.filter(ano=kwargs['ano']) - - if 'numero_protocolo' in kwargs: - materias = materias.filter(numero=kwargs['numero_protocolo']) - - if 'em_tramitacao' in kwargs: - materias = materias.filter(em_tramitacao=kwargs['em_tramitacao']) - - if 'local_origem_externa' in kwargs: - materias = materias.filter( - local_origem_externa=kwargs['local_origem_externa']) - - # autor - # localizao atual - # situacao - - return materias - - -def filter_tramitacao__status(status): - ultimas_tramitacoes = Tramitacao.objects.values( - 'materia_id').annotate(data_encaminhamento=Max( - 'data_encaminhamento'), - id=Max('id')) - import ipdb; ipdb.set_trace() - ultimas_tramitacoes = ultimas_tramitacoes.filter(status=status) - return ultimas_tramitacoes - - class MateriaLegislativaPesquisaView(FilterView): model = MateriaLegislativa filterset_class = MateriaLegislativaPesquisaFields paginate_by = 10 def get_context_data(self, **kwargs): - # import ipdb; ipdb.set_trace() context = super(MateriaLegislativaPesquisaView, self).get_context_data(**kwargs) @@ -1333,15 +1211,29 @@ class MateriaLegislativaPesquisaView(FilterView): def get(self, request, *args, **kwargs): filterset_class = self.get_filterset_class() self.filterset = self.get_filterset(filterset_class) + status_tramitacao = self.filterset.data.get('tramitacao__status') - if status_tramitacao and status_tramitacao != '': - status = filter_tramitacao__status(status_tramitacao) - mat_filt_ids = [ids.get('materia_id') for ids in status] - # import ipdb; ipdb.set_trace() + unidade_destino = self.filterset.data.get( + 'tramitacao__unidade_tramitacao_destino') + if (status_tramitacao and status_tramitacao != '' and + unidade_destino and unidade_destino != ''): + lista = filtra_tramitacao_destino_and_status(status_tramitacao, + unidade_destino) self.object_list = self.filterset.qs.filter( - id__in=mat_filt_ids) + id__in=lista) + + elif status_tramitacao and status_tramitacao != '': + lista = filtra_tramitacao_status(status_tramitacao) + self.object_list = self.filterset.qs.filter( + id__in=lista) + + elif unidade_destino and unidade_destino != '': + lista = filtra_tramitacao_destino(unidade_destino) + self.object_list = self.filterset.qs.filter( + id__in=lista) else: self.object_list = self.filterset.qs + context = self.get_context_data(filter=self.filterset, object_list=self.object_list) return self.render_to_response(context) From d4c08943fcefea3cb0f0240d0feb99645d4a7fcb Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 29 Mar 2016 12:11:29 -0300 Subject: [PATCH 05/17] Retira tag de Filtro que estava ao lado dos campos de pesquisa --- materia/forms.py | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/materia/forms.py b/materia/forms.py index 8414a87e3..893855886 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -685,17 +685,21 @@ class MateriaLegislativaPesquisaForm(ModelForm): class MateriaLegislativaPesquisaFields(FilterSet): numero = django_filters.CharFilter(required=False, - label=u'Número da Matéria') + label=u'Número da Matéria', + help_text="") numero_protocolo = django_filters.CharFilter(required=False, - label=u'Núm. Protocolo') + label=u'Núm. Protocolo', + help_text="") ano = django_filters.CharFilter(required=False, - label=u'Ano da Matéria') + label=u'Ano da Matéria', + help_text="") tipo = django_filters.ModelChoiceFilter( label=_('Tipo de Matéria'), required=False, queryset=TipoMateriaLegislativa.objects.all(), empty_label='Selecione', + help_text="" ) data_apresentacao = django_filters.DateFilter( @@ -704,7 +708,8 @@ class MateriaLegislativaPesquisaFields(FilterSet): required=False, widget=forms.DateInput( format='%d/%m/%Y', - attrs={'class': 'dateinput'})) + attrs={'class': 'dateinput'}), + help_text="") data_publicacao = django_filters.DateFilter( label=u'Data da Publicação', @@ -712,13 +717,15 @@ class MateriaLegislativaPesquisaFields(FilterSet): required=False, widget=forms.DateInput( format='%d/%m/%Y', - attrs={'class': 'dateinput'})) + attrs={'class': 'dateinput'}), + help_text="") autoria__autor = django_filters.ModelChoiceFilter( label='Autor', required=False, queryset=Autor.objects.all().order_by('tipo'), empty_label='Selecione', + help_text="" ) autoria__autor__tipo = django_filters.ModelChoiceFilter( @@ -726,13 +733,15 @@ class MateriaLegislativaPesquisaFields(FilterSet): required=False, queryset=TipoAutor.objects.all(), empty_label='Selecione', + help_text="" ) autoria__partido = django_filters.ModelChoiceFilter( label=_('Partido (Autor)'), required=False, queryset=Partido.objects.all(), - empty_label='Selecione') + empty_label='Selecione', + help_text="") # # relatores são os parlamentares ativos? relatoria__parlamentar__id = django_filters.ModelChoiceFilter( @@ -740,19 +749,22 @@ class MateriaLegislativaPesquisaFields(FilterSet): required=False, queryset=Parlamentar.objects.all().order_by('nome_parlamentar'), empty_label='Selecione', + help_text="" ) local_origem_externa = django_filters.ModelChoiceFilter( label=_('Localização de Origem'), required=False, queryset=Origem.objects.all(), - empty_label='Selecione') + empty_label='Selecione', + help_text="") tramitacao__unidade_tramitacao_destino = django_filters.ModelChoiceFilter( label=_('Localização Atual'), required=False, queryset=UnidadeTramitacao.objects.all(), empty_label='Selecione', + help_text="" ) tramitacao__status = django_filters.ModelChoiceFilter( @@ -760,17 +772,20 @@ class MateriaLegislativaPesquisaFields(FilterSet): required=False, queryset=StatusTramitacao.objects.all(), empty_label='Selecione', + help_text="" ) em_tramitacao = django_filters.ChoiceFilter(required=False, label='Tramitando', choices=em_tramitacao(), widget=forms.Select( - attrs={'class': 'selector'})) + attrs={'class': 'selector'}), + help_text="") ementa = django_filters.CharFilter(required=False, label=u'Assunto', - lookup_expr='icontains') + lookup_expr='icontains', + help_text="") class Meta: models = MateriaLegislativa From cd7e5f45f20488548e1c6bc0a07159ae5002d60e Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 29 Mar 2016 13:55:51 -0300 Subject: [PATCH 06/17] Altera o template --- .../materia/materialegislativa_filter.html | 45 +++++++++++++++++-- .../materia/proposicao/proposicao_list.html | 9 ++-- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/templates/materia/materialegislativa_filter.html b/templates/materia/materialegislativa_filter.html index 48432cf56..fe7840650 100644 --- a/templates/materia/materialegislativa_filter.html +++ b/templates/materia/materialegislativa_filter.html @@ -2,12 +2,15 @@ {% load i18n %} {% load crispy_forms_tags %} {% block actions %}{% endblock %} + {% block sections_nav %} {% endblock %} -{% block detail_content %} +{% block detail_content %} +

Pesquisar Matéria

+

{{ filter.form.as_p }} - +

Resultados

@@ -24,6 +27,42 @@ {% endfor %}
-{% include "paginacao.html" %} +{% if is_paginated %} + +{% endif %} {% endblock detail_content %} \ No newline at end of file diff --git a/templates/materia/proposicao/proposicao_list.html b/templates/materia/proposicao/proposicao_list.html index d666badbe..c81e8ffa3 100644 --- a/templates/materia/proposicao/proposicao_list.html +++ b/templates/materia/proposicao/proposicao_list.html @@ -5,14 +5,13 @@ {% block actions %}{% endblock %} {% block sections_nav %} -

Proposições

-
- {% endblock %} {% block detail_content %} +

Proposições

+ From d5c11a363215aa3594063941f301d1cd349bfeba Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Wed, 30 Mar 2016 12:40:57 -0300 Subject: [PATCH 07/17] Arruma o bug na paginacao. Ordena as materias --- materia/forms.py | 12 +++-- materia/views.py | 44 ++++++++++++++++--- .../materia/materialegislativa_filter.html | 37 +--------------- templates/paginacao_pesquisa_materia.html | 37 ++++++++++++++++ 4 files changed, 82 insertions(+), 48 deletions(-) create mode 100644 templates/paginacao_pesquisa_materia.html diff --git a/materia/forms.py b/materia/forms.py index 893855886..ca3052e75 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -23,9 +23,6 @@ from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, StatusTramitacao, TipoAutor, TipoMateriaLegislativa, Tramitacao, UnidadeTramitacao) -ORDENACAO_MATERIAIS = [(1, 'Crescente'), - (2, 'Decrescente')] - def em_tramitacao(): return [('', 'Tanto Faz'), @@ -816,8 +813,9 @@ def pega_ultima_tramitacao(): def filtra_tramitacao_status(status): lista = pega_ultima_tramitacao() - ultimas_tramitacoes = Tramitacao.objects.filter(id__in=lista, - status=status) + ultimas_tramitacoes = Tramitacao.objects.filter( + id__in=lista, + status=status).distinct() lista = [ids.materia_id for ids in ultimas_tramitacoes] return lista @@ -826,7 +824,7 @@ def filtra_tramitacao_destino(destino): lista = pega_ultima_tramitacao() ultimas_tramitacoes = Tramitacao.objects.filter( id__in=lista, - unidade_tramitacao_destino=destino) + unidade_tramitacao_destino=destino).distinct() lista = [ids.materia_id for ids in ultimas_tramitacoes] return lista @@ -836,6 +834,6 @@ def filtra_tramitacao_destino_and_status(status, destino): ultimas_tramitacoes = Tramitacao.objects.filter( id__in=lista, status=status, - unidade_tramitacao_destino=destino) + unidade_tramitacao_destino=destino).distinct() lista = [ids.materia_id for ids in ultimas_tramitacoes] return lista diff --git a/materia/views.py b/materia/views.py index 9bf559953..e4f1beb1b 100644 --- a/materia/views.py +++ b/materia/views.py @@ -1220,22 +1220,56 @@ class MateriaLegislativaPesquisaView(FilterView): lista = filtra_tramitacao_destino_and_status(status_tramitacao, unidade_destino) self.object_list = self.filterset.qs.filter( - id__in=lista) + id__in=lista).distinct().order_by('tipo', 'numero', 'ano') elif status_tramitacao and status_tramitacao != '': lista = filtra_tramitacao_status(status_tramitacao) self.object_list = self.filterset.qs.filter( - id__in=lista) + id__in=lista).distinct().order_by('tipo', 'numero', 'ano') elif unidade_destino and unidade_destino != '': lista = filtra_tramitacao_destino(unidade_destino) self.object_list = self.filterset.qs.filter( - id__in=lista) + id__in=lista).distinct().order_by('tipo', 'numero', 'ano') else: - self.object_list = self.filterset.qs + self.object_list = self.filterset.qs.order_by( + 'tipo', 'numero', 'ano') + + numero = self.filterset.data.get('numero') + numero_protocolo = self.filterset.data.get('numero_protocolo') + ano = self.filterset.data.get('ano') + tipo = self.filterset.data.get('tipo') + data_a = self.filterset.data.get('data_apresentacao') + data_p = self.filterset.data.get('data_publicacao') + autor = self.filterset.data.get('autoria__autor') + tipo_autor = self.filterset.data.get('autoria__autor__tipo') + partido = self.filterset.data.get('autoria__partido') + relatoria = self.filterset.data.get('relatoria__parlamentar__id') + origem = self.filterset.data.get('local_origem_externa') + destino = self.filterset.data.get( + 'tramitacao__unidade_tramitacao_destino') + status = self.filterset.data.get('tramitacao__status') + em_tram = self.filterset.data.get('em_tramitacao') + ementa = self.filterset.data.get('ementa') + + u1 = "&numero="+numero+"&numero_protocolo="+numero_protocolo+"&" + u2 = "ano="+ano+"&tipo="+tipo+"&data_apresentacao="+data_a+"&" + u3 = "data_publicacao="+data_p+"&autoria__autor="+autor+"&" + u4 = "autoria__autor__tipo="+tipo_autor+"&" + u5 = "autoria__partido="+partido+"&" + u6 = "relatoria__parlamentar__id="+relatoria+"&" + u7 = "local_origem_externa="+origem+"&" + u8 = "tramitacao__unidade_tramitacao_destino="+destino+"&" + u9 = "tramitacao__status="+status+"&" + u10 = "em_tramitacao="+em_tram+"&ementa="+ementa + + url = u1+u2+u3+u4+u5+u6+u7+u8+u9+u10 context = self.get_context_data(filter=self.filterset, - object_list=self.object_list) + object_list=self.object_list, + filter_url=url + ) + return self.render_to_response(context) diff --git a/templates/materia/materialegislativa_filter.html b/templates/materia/materialegislativa_filter.html index fe7840650..125b5eb21 100644 --- a/templates/materia/materialegislativa_filter.html +++ b/templates/materia/materialegislativa_filter.html @@ -28,41 +28,6 @@ {% endfor %}
-{% if is_paginated %} - -{% endif %} {% endblock detail_content %} \ No newline at end of file diff --git a/templates/paginacao_pesquisa_materia.html b/templates/paginacao_pesquisa_materia.html new file mode 100644 index 000000000..380b0f015 --- /dev/null +++ b/templates/paginacao_pesquisa_materia.html @@ -0,0 +1,37 @@ +{% if is_paginated %} + +{% endif %} From 965fb5e72b83697602dcf98fea1e014c696265bf Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Wed, 30 Mar 2016 12:47:19 -0300 Subject: [PATCH 08/17] Resolve erros apontados pelos testes automaticos. Por exemplo, ordenacao dos imports --- materia/forms.py | 14 ++++++-------- materia/views.py | 11 +++++------ 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/materia/forms.py b/materia/forms.py index ca3052e75..1beb6bd59 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -1,27 +1,25 @@ +import django_filters from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML, Button, Column, Fieldset, Layout, Submit from django import forms -from django.db.models import Max from django.core.exceptions import ValidationError -from django_filters import FilterSet +from django.db.models import Max from django.forms import ModelForm from django.utils.translation import ugettext_lazy as _ +from django_filters import FilterSet -import django_filters import crispy_layout_mixin import sapl - from crispy_layout_mixin import form_actions from norma.models import LegislacaoCitada, TipoNormaJuridica -from sapl.settings import MAX_DOC_UPLOAD_SIZE - from parlamentares.models import Parlamentar, Partido +from sapl.settings import MAX_DOC_UPLOAD_SIZE from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, DespachoInicial, DocumentoAcessorio, MateriaLegislativa, Numeracao, Origem, Proposicao, Relatoria, - StatusTramitacao, TipoAutor, - TipoMateriaLegislativa, Tramitacao, UnidadeTramitacao) + StatusTramitacao, TipoAutor, TipoMateriaLegislativa, + Tramitacao, UnidadeTramitacao) def em_tramitacao(): diff --git a/materia/views.py b/materia/views.py index e4f1beb1b..e0def904c 100644 --- a/materia/views.py +++ b/materia/views.py @@ -1,5 +1,3 @@ -from django_filters.views import FilterView - from datetime import datetime from random import choice from string import ascii_letters, digits @@ -13,6 +11,7 @@ from django.shortcuts import redirect from django.template import Context, loader from django.utils.translation import ugettext_lazy as _ from django.views.generic import CreateView, FormView, ListView, TemplateView +from django_filters.views import FilterView from base.models import CasaLegislativa from comissoes.models import Comissao, Composicao @@ -25,12 +24,12 @@ from sapl.utils import get_base_url from .forms import (AcompanhamentoMateriaForm, AutoriaForm, DespachoInicialForm, DocumentoAcessorioForm, FormularioCadastroForm, FormularioSimplificadoForm, - filtra_tramitacao_status, filtra_tramitacao_destino, - filtra_tramitacao_destino_and_status, LegislacaoCitadaForm, MateriaAnexadaForm, MateriaLegislativaPesquisaFields, NumeracaoForm, - ProposicaoForm, RelatoriaForm, TramitacaoForm - ) + ProposicaoForm, RelatoriaForm, TramitacaoForm, + filtra_tramitacao_destino, + filtra_tramitacao_destino_and_status, + filtra_tramitacao_status) from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, DespachoInicial, DocumentoAcessorio, MateriaLegislativa, Numeracao, Orgao, Origem, Proposicao, RegimeTramitacao, From a341583f71bcd2a687489010fb1079c9e75a2df4 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Wed, 30 Mar 2016 13:13:19 -0300 Subject: [PATCH 09/17] Arruma detalhes na Pesquisa de Materia --- materia/views.py | 65 +++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/materia/views.py b/materia/views.py index e0def904c..906692602 100644 --- a/materia/views.py +++ b/materia/views.py @@ -1234,35 +1234,42 @@ class MateriaLegislativaPesquisaView(FilterView): self.object_list = self.filterset.qs.order_by( 'tipo', 'numero', 'ano') - numero = self.filterset.data.get('numero') - numero_protocolo = self.filterset.data.get('numero_protocolo') - ano = self.filterset.data.get('ano') - tipo = self.filterset.data.get('tipo') - data_a = self.filterset.data.get('data_apresentacao') - data_p = self.filterset.data.get('data_publicacao') - autor = self.filterset.data.get('autoria__autor') - tipo_autor = self.filterset.data.get('autoria__autor__tipo') - partido = self.filterset.data.get('autoria__partido') - relatoria = self.filterset.data.get('relatoria__parlamentar__id') - origem = self.filterset.data.get('local_origem_externa') - destino = self.filterset.data.get( - 'tramitacao__unidade_tramitacao_destino') - status = self.filterset.data.get('tramitacao__status') - em_tram = self.filterset.data.get('em_tramitacao') - ementa = self.filterset.data.get('ementa') - - u1 = "&numero="+numero+"&numero_protocolo="+numero_protocolo+"&" - u2 = "ano="+ano+"&tipo="+tipo+"&data_apresentacao="+data_a+"&" - u3 = "data_publicacao="+data_p+"&autoria__autor="+autor+"&" - u4 = "autoria__autor__tipo="+tipo_autor+"&" - u5 = "autoria__partido="+partido+"&" - u6 = "relatoria__parlamentar__id="+relatoria+"&" - u7 = "local_origem_externa="+origem+"&" - u8 = "tramitacao__unidade_tramitacao_destino="+destino+"&" - u9 = "tramitacao__status="+status+"&" - u10 = "em_tramitacao="+em_tram+"&ementa="+ementa - - url = u1+u2+u3+u4+u5+u6+u7+u8+u9+u10 + if (self.filterset.data and + self.filterset.data.get('numero') is not None): + + numero = self.filterset.data.get('numero') + numero_protocolo = self.filterset.data.get('numero_protocolo') + ano = self.filterset.data.get('ano') + tipo = self.filterset.data.get('tipo') + data_a = self.filterset.data.get('data_apresentacao') + data_p = self.filterset.data.get('data_publicacao') + autor = self.filterset.data.get('autoria__autor') + tipo_autor = self.filterset.data.get('autoria__autor__tipo') + partido = self.filterset.data.get('autoria__partido') + relatoria = self.filterset.data.get( + 'relatoria__parlamentar__id') + origem = self.filterset.data.get('local_origem_externa') + destino = self.filterset.data.get( + 'tramitacao__unidade_tramitacao_destino') + status = self.filterset.data.get('tramitacao__status') + em_tram = self.filterset.data.get('em_tramitacao') + ementa = self.filterset.data.get('ementa') + + u1 = "&numero="+numero+"&numero_protocolo="+numero_protocolo + u2 = "&ano="+ano+"&tipo="+tipo+"&data_apresentacao="+data_a+"&" + u3 = "data_publicacao="+data_p+"&autoria__autor="+autor+"&" + u4 = "autoria__autor__tipo="+tipo_autor+"&" + u5 = "autoria__partido="+partido+"&" + u6 = "relatoria__parlamentar__id="+relatoria+"&" + u7 = "local_origem_externa="+origem+"&" + u8 = "tramitacao__unidade_tramitacao_destino="+destino+"&" + u9 = "tramitacao__status="+status+"&" + u10 = "em_tramitacao="+em_tram+"&ementa="+ementa + + url = u1+u2+u3+u4+u5+u6+u7+u8+u9+u10 + + else: + url = '' context = self.get_context_data(filter=self.filterset, object_list=self.object_list, From 55a3564df804d83717ce9153fc093ae6ece33948 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Thu, 31 Mar 2016 14:08:00 -0300 Subject: [PATCH 10/17] WIP --- materia/forms.py | 178 +++++------------- materia/views.py | 84 +++++---- .../materia/materialegislativa_filter.html | 28 ++- 3 files changed, 115 insertions(+), 175 deletions(-) diff --git a/materia/forms.py b/materia/forms.py index 1beb6bd59..e6c2724c2 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -567,116 +567,6 @@ class AutoriaForm(ModelForm): *args, **kwargs) -class MateriaLegislativaPesquisaForm(ModelForm): - - autor = forms.CharField(widget=forms.HiddenInput(), required=False) - - localizacao = forms.ModelChoiceField( - label='Localização Atual', - required=False, - queryset=UnidadeTramitacao.objects.all(), - empty_label='Selecione', - ) - - situacao = forms.ModelChoiceField( - label='Situação', - required=False, - queryset=StatusTramitacao.objects.all(), - empty_label='Selecione', - ) - - em_tramitacao = forms.ChoiceField(required=False, - label='Tramitando', - choices=em_tramitacao(), - widget=forms.Select( - attrs={'class': 'selector'})) - - publicacao_inicial = forms.DateField(label=u'Data Publicação Inicial', - input_formats=['%d/%m/%Y'], - required=False, - widget=forms.DateInput( - format='%d/%m/%Y', - attrs={'class': 'dateinput'})) - - publicacao_final = forms.DateField(label=u'Data Publicação Final', - input_formats=['%d/%m/%Y'], - required=False, - widget=forms.DateInput( - format='%d/%m/%Y', - attrs={'class': 'dateinput'})) - - apresentacao_inicial = forms.DateField(label=u'Data Apresentação Inicial', - input_formats=['%d/%m/%Y'], - required=False, - widget=forms.DateInput( - format='%d/%m/%Y', - attrs={'class': 'dateinput'})) - - apresentacao_final = forms.DateField(label=u'Data Apresentação Final', - input_formats=['%d/%m/%Y'], - required=False, - widget=forms.DateInput( - format='%d/%m/%Y', - attrs={'class': 'dateinput'})) - - class Meta: - model = MateriaLegislativa - fields = ['tipo', - 'numero', - 'ano', - 'numero_protocolo', - 'apresentacao_inicial', - 'apresentacao_final', - 'publicacao_inicial', - 'publicacao_final', - 'autor', - 'local_origem_externa', - 'localizacao', - 'em_tramitacao', - 'situacao'] - - def __init__(self, *args, **kwargs): - - row1 = crispy_layout_mixin.to_row( - [('tipo', 12)]) - row2 = crispy_layout_mixin.to_row( - [('numero', 4), - ('ano', 4), - ('numero_protocolo', 4)]) - row3 = crispy_layout_mixin.to_row( - [('apresentacao_inicial', 6), - ('apresentacao_final', 6)]) - row4 = crispy_layout_mixin.to_row( - [('publicacao_inicial', 6), - ('publicacao_final', 6)]) - row5 = crispy_layout_mixin.to_row( - [('autor', 0), - (Button('pesquisar', - 'Pesquisar Autor', - css_class='btn btn-primary btn-sm'), 2), - (Button('limpar', - 'limpar Autor', - css_class='btn btn-primary btn-sm'), 10)]) - row6 = crispy_layout_mixin.to_row( - [('local_origem_externa', 6), - ('localizacao', 6)]) - row7 = crispy_layout_mixin.to_row( - [('em_tramitacao', 6), - ('situacao', 6)]) - - self.helper = FormHelper() - self.helper.layout = Layout( - Fieldset(_('Pesquisa Básica'), - row1, row2, row3, row4, - HTML(sapl.utils.autor_label), - HTML(sapl.utils.autor_modal), - row5, row6, row7, - form_actions(save_label='Pesquisar')) - ) - super(MateriaLegislativaPesquisaForm, self).__init__( - *args, **kwargs) - - class MateriaLegislativaPesquisaFields(FilterSet): numero = django_filters.CharFilter(required=False, @@ -697,22 +587,14 @@ class MateriaLegislativaPesquisaFields(FilterSet): help_text="" ) - data_apresentacao = django_filters.DateFilter( + data_apresentacao = django_filters.DateFromToRangeFilter( label=u'Data de Apresentação', - input_formats=['%d/%m/%Y'], required=False, - widget=forms.DateInput( - format='%d/%m/%Y', - attrs={'class': 'dateinput'}), help_text="") - data_publicacao = django_filters.DateFilter( + data_publicacao = django_filters.DateFromToRangeFilter( label=u'Data da Publicação', - input_formats=['%d/%m/%Y'], required=False, - widget=forms.DateInput( - format='%d/%m/%Y', - attrs={'class': 'dateinput'}), help_text="") autoria__autor = django_filters.ModelChoiceFilter( @@ -784,7 +666,7 @@ class MateriaLegislativaPesquisaFields(FilterSet): class Meta: models = MateriaLegislativa - fields = ['tipo', + fields = {'tipo', 'ano', 'numero_protocolo', 'data_apresentacao', @@ -797,15 +679,59 @@ class MateriaLegislativaPesquisaFields(FilterSet): 'tramitacao__status', 'autoria__autor__tipo', 'autoria__partido', - 'local_origem_externa'] + 'local_origem_externa'} + + # def __init__(self, *args, **kwargs): + + # row1 = crispy_layout_mixin.to_row( + # [('tipo', 12)]) + # row2 = crispy_layout_mixin.to_row( + # [('numero', 4), + # ('ano', 4), + # ('numero_protocolo', 4)]) + # row3 = crispy_layout_mixin.to_row( + # [('data_apresentacao', 6), + # ('data_publicacao', 6)]) + # row4 = crispy_layout_mixin.to_row( + # [('em_tramitacao', 6), + # ('ementa', 6)]) + # row5 = crispy_layout_mixin.to_row( + # [('autoria__autor__id', 0), + # (Button('pesquisar', + # 'Pesquisar Autor', + # css_class='btn btn-primary btn-sm'), 2), + # (Button('limpar', + # 'limpar Autor', + # css_class='btn btn-primary btn-sm'), 10)]) + # row6 = crispy_layout_mixin.to_row( + # [('relatoria__parlamentar__id', 6), + # ('tramitacao__unidade_tramitacao_destino', 6)]) + # row7 = crispy_layout_mixin.to_row( + # [('tramitacao__status', 6), + # ('autoria__autor__tipo', 6)]) + # row8 = crispy_layout_mixin.to_row( + # [('autoria__partido', 6), + # ('local_origem_externa', 6)]) + + # self.helper = FormHelper() + # self.helper.layout = Layout( + # Fieldset(_('Pesquisa Básica'), + # row1, row2, row3, row4, + # HTML(sapl.utils.autor_label), + # HTML(sapl.utils.autor_modal), + # row5, row6, row7, row8, + # form_actions(save_label='Pesquisar')) + # ) def pega_ultima_tramitacao(): ultimas_tramitacoes = Tramitacao.objects.values( - 'materia_id').annotate(data_encaminhamento=Max( - 'data_encaminhamento'), - id=Max('id')) - lista = [ids.get('id') for ids in ultimas_tramitacoes] + 'materia_id').annotate(data_encaminhamento=Max( + 'data_encaminhamento'), + id=Max('id')).values_list('id') + + lista = [item for sublist in ultimas_tramitacoes for item in sublist] + return lista diff --git a/materia/views.py b/materia/views.py index 906692602..346213ad6 100644 --- a/materia/views.py +++ b/materia/views.py @@ -1211,22 +1211,23 @@ class MateriaLegislativaPesquisaView(FilterView): filterset_class = self.get_filterset_class() self.filterset = self.get_filterset(filterset_class) - status_tramitacao = self.filterset.data.get('tramitacao__status') - unidade_destino = self.filterset.data.get( - 'tramitacao__unidade_tramitacao_destino') - if (status_tramitacao and status_tramitacao != '' and - unidade_destino and unidade_destino != ''): + data = self.filterset.data + + status_tramitacao = data.get('tramitacao__status') + unidade_destino = data.get('tramitacao__unidade_tramitacao_destino') + + if status_tramitacao and unidade_destino: lista = filtra_tramitacao_destino_and_status(status_tramitacao, unidade_destino) self.object_list = self.filterset.qs.filter( id__in=lista).distinct().order_by('tipo', 'numero', 'ano') - elif status_tramitacao and status_tramitacao != '': + elif status_tramitacao: lista = filtra_tramitacao_status(status_tramitacao) self.object_list = self.filterset.qs.filter( id__in=lista).distinct().order_by('tipo', 'numero', 'ano') - elif unidade_destino and unidade_destino != '': + elif unidade_destino: lista = filtra_tramitacao_destino(unidade_destino) self.object_list = self.filterset.qs.filter( id__in=lista).distinct().order_by('tipo', 'numero', 'ano') @@ -1234,46 +1235,47 @@ class MateriaLegislativaPesquisaView(FilterView): self.object_list = self.filterset.qs.order_by( 'tipo', 'numero', 'ano') - if (self.filterset.data and - self.filterset.data.get('numero') is not None): - - numero = self.filterset.data.get('numero') - numero_protocolo = self.filterset.data.get('numero_protocolo') - ano = self.filterset.data.get('ano') - tipo = self.filterset.data.get('tipo') - data_a = self.filterset.data.get('data_apresentacao') - data_p = self.filterset.data.get('data_publicacao') - autor = self.filterset.data.get('autoria__autor') - tipo_autor = self.filterset.data.get('autoria__autor__tipo') - partido = self.filterset.data.get('autoria__partido') - relatoria = self.filterset.data.get( - 'relatoria__parlamentar__id') - origem = self.filterset.data.get('local_origem_externa') - destino = self.filterset.data.get( - 'tramitacao__unidade_tramitacao_destino') - status = self.filterset.data.get('tramitacao__status') - em_tram = self.filterset.data.get('em_tramitacao') - ementa = self.filterset.data.get('ementa') - - u1 = "&numero="+numero+"&numero_protocolo="+numero_protocolo - u2 = "&ano="+ano+"&tipo="+tipo+"&data_apresentacao="+data_a+"&" - u3 = "data_publicacao="+data_p+"&autoria__autor="+autor+"&" - u4 = "autoria__autor__tipo="+tipo_autor+"&" - u5 = "autoria__partido="+partido+"&" - u6 = "relatoria__parlamentar__id="+relatoria+"&" - u7 = "local_origem_externa="+origem+"&" - u8 = "tramitacao__unidade_tramitacao_destino="+destino+"&" - u9 = "tramitacao__status="+status+"&" - u10 = "em_tramitacao="+em_tram+"&ementa="+ementa - - url = u1+u2+u3+u4+u5+u6+u7+u8+u9+u10 + if (data and data.get('numero') is not None): + numero = data.get('numero') + numero_protocolo = data.get('numero_protocolo') + ano = data.get('ano') + tipo = data.get('tipo') + data_a1 = data.get('data_apresentacao_1') + data_a0 = data.get('data_apresentacao_0') + data_p = data.get('data_publicacao') + autor = data.get('autoria__autor') + tipo_autor = data.get('autoria__autor__tipo') + partido = data.get('autoria__partido') + relatoria = data.get( + 'relatoria__parlamentar__id') + origem = data.get('local_origem_externa') + destino = data.get( + 'tramitacao__unidade_tramitacao_destino') + status = data.get('tramitacao__status') + em_tram = data.get('em_tramitacao') + ementa = self.filterset.data.get('ementa') + import ipdb; ipdb.set_trace() + u1 = "&numero="+numero+"&numero_protocolo="+numero_protocolo + u2 = "&ano="+ano+"&tipo="+tipo+"&data_apresentacao_1="+data_a1+"&" + u3 = "data_publicacao="+data_p+"&autoria__autor="+autor+"&" + u4 = "autoria__autor__tipo="+tipo_autor+"&" + u5 = "autoria__partido="+partido + u6 = "&data_apresentacao_0="+data_a0+"&" + u7 = "relatoria__parlamentar__id="+relatoria+"&" + u8 = "local_origem_externa="+origem+"&" + u9 = "tramitacao__unidade_tramitacao_destino="+destino+"&" + u10 = "tramitacao__status="+status+"&" + u11 = "em_tramitacao="+em_tram+"&ementa="+ementa + + url = u1+u2+u3+u4+u5+u6+u7+u8+u9+u10+u11 else: url = '' context = self.get_context_data(filter=self.filterset, object_list=self.object_list, - filter_url=url + filter_url=url, + numero_res=len(self.object_list) ) return self.render_to_response(context) diff --git a/templates/materia/materialegislativa_filter.html b/templates/materia/materialegislativa_filter.html index 125b5eb21..94821d1ca 100644 --- a/templates/materia/materialegislativa_filter.html +++ b/templates/materia/materialegislativa_filter.html @@ -9,7 +9,7 @@

Pesquisar Matéria



- {{ filter.form.as_p }} + {{ filter.form | crispy }}

@@ -17,15 +17,27 @@

Resultados

- {% for m in page_obj %} + {% if page_obj|length %} + {% if filter_url %} +

Pesquisa concluída com sucesso! Foram encontradas {{numero_res}} matérias.

+ {% endif %} + {% for m in page_obj %} + + + + {{m.tipo.sigla}} {{m.numero}}/{{m.ano}} - {{m.tipo}}
+ {{ m.ementa|safe }}
+ Localização Atual: {{m.tramitacao_set.last.unidade_tramitacao_destino|default_if_none:"Não Informada"}}
+

+ + {% endfor %} + {% else %} - {{m.tipo.sigla}} {{m.numero}}/{{m.ano}} - {{m.tipo}}
- {{ m.ementa|safe }}
- Localização Atual: {{m.tramitacao_set.last.unidade_tramitacao_destino|default_if_none:"Não Informada"}}
-

- - {% endfor %} +

Nenhuma matéria encontrada com essas especificações

+ + {% endif %} + {% include "paginacao_pesquisa_materia.html" %} From 426ec515b5fa2ed7954c9abcb7da0a2a30f0c183 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Fri, 1 Apr 2016 10:26:27 -0300 Subject: [PATCH 11/17] Arruma problema das URL's --- materia/views.py | 44 +++++++++++--------------------------------- 1 file changed, 11 insertions(+), 33 deletions(-) diff --git a/materia/views.py b/materia/views.py index 346213ad6..12839dc01 100644 --- a/materia/views.py +++ b/materia/views.py @@ -1196,6 +1196,14 @@ class MateriaLegislativaPesquisaView(FilterView): filterset_class = MateriaLegislativaPesquisaFields paginate_by = 10 + # def get_filterset_kwargs(self, filterset_class): + # """ + # Returns the keyword arguments for instanciating the filterset. + # """ + # import ipdb; ipdb.set_trace() + # kwargs = {'data': self.request.GET or None} + # return kwargs + def get_context_data(self, **kwargs): context = super(MateriaLegislativaPesquisaView, self).get_context_data(**kwargs) @@ -1236,39 +1244,9 @@ class MateriaLegislativaPesquisaView(FilterView): 'tipo', 'numero', 'ano') if (data and data.get('numero') is not None): - numero = data.get('numero') - numero_protocolo = data.get('numero_protocolo') - ano = data.get('ano') - tipo = data.get('tipo') - data_a1 = data.get('data_apresentacao_1') - data_a0 = data.get('data_apresentacao_0') - data_p = data.get('data_publicacao') - autor = data.get('autoria__autor') - tipo_autor = data.get('autoria__autor__tipo') - partido = data.get('autoria__partido') - relatoria = data.get( - 'relatoria__parlamentar__id') - origem = data.get('local_origem_externa') - destino = data.get( - 'tramitacao__unidade_tramitacao_destino') - status = data.get('tramitacao__status') - em_tram = data.get('em_tramitacao') - ementa = self.filterset.data.get('ementa') - import ipdb; ipdb.set_trace() - u1 = "&numero="+numero+"&numero_protocolo="+numero_protocolo - u2 = "&ano="+ano+"&tipo="+tipo+"&data_apresentacao_1="+data_a1+"&" - u3 = "data_publicacao="+data_p+"&autoria__autor="+autor+"&" - u4 = "autoria__autor__tipo="+tipo_autor+"&" - u5 = "autoria__partido="+partido - u6 = "&data_apresentacao_0="+data_a0+"&" - u7 = "relatoria__parlamentar__id="+relatoria+"&" - u8 = "local_origem_externa="+origem+"&" - u9 = "tramitacao__unidade_tramitacao_destino="+destino+"&" - u10 = "tramitacao__status="+status+"&" - u11 = "em_tramitacao="+em_tram+"&ementa="+ementa - - url = u1+u2+u3+u4+u5+u6+u7+u8+u9+u10+u11 - + url = "&"+str(self.request.environ['QUERY_STRING']) + if url[:5] == "&page": + url = url[7:] else: url = '' From f6571c8491010975ada4c272866c62f8b21ea0b3 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Fri, 1 Apr 2016 14:29:32 -0300 Subject: [PATCH 12/17] Arruma alguns detalhes. Ainda falta arrumar a paginacao, porque teve outro problema --- materia/forms.py | 36 +++++++++++++---- materia/views.py | 17 ++++---- .../materia/materialegislativa_filter.html | 2 +- templates/paginacao_pesquisa_materia.html | 39 +++++++++++++++++-- 4 files changed, 72 insertions(+), 22 deletions(-) diff --git a/materia/forms.py b/materia/forms.py index e6c2724c2..f48090fce 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -567,6 +567,25 @@ class AutoriaForm(ModelForm): *args, **kwargs) +class RangeWidgetOverride(forms.MultiWidget): + def __init__(self, attrs=None): + widgets = (forms.DateInput( + format='%d/%m/%Y', + attrs={'class': 'dateinput'}), + forms.DateInput( + format='%d/%m/%Y', + attrs={'class': 'dateinput'})) + super(RangeWidgetOverride, self).__init__(widgets, attrs) + + def decompress(self, value): + if value: + return [value.start, value.stop] + return [None, None] + + def format_output(self, rendered_widgets): + return '-'.join(rendered_widgets) + + class MateriaLegislativaPesquisaFields(FilterSet): numero = django_filters.CharFilter(required=False, @@ -588,14 +607,16 @@ class MateriaLegislativaPesquisaFields(FilterSet): ) data_apresentacao = django_filters.DateFromToRangeFilter( - label=u'Data de Apresentação', - required=False, - help_text="") + label=u'Data de Apresentação (Inicial - Final)', + required=False, + help_text="", + widget=RangeWidgetOverride) data_publicacao = django_filters.DateFromToRangeFilter( - label=u'Data da Publicação', - required=False, - help_text="") + label=u'Data da Publicação (Inicial - Final)', + required=False, + help_text="", + widget=RangeWidgetOverride) autoria__autor = django_filters.ModelChoiceFilter( label='Autor', @@ -620,7 +641,6 @@ class MateriaLegislativaPesquisaFields(FilterSet): empty_label='Selecione', help_text="") - # # relatores são os parlamentares ativos? relatoria__parlamentar__id = django_filters.ModelChoiceFilter( label='Relator', required=False, @@ -664,6 +684,8 @@ class MateriaLegislativaPesquisaFields(FilterSet): lookup_expr='icontains', help_text="") + ORDER_BY_FIELD = "'numero', 'ano'" + class Meta: models = MateriaLegislativa fields = {'tipo', diff --git a/materia/views.py b/materia/views.py index 12839dc01..c95bc9ffa 100644 --- a/materia/views.py +++ b/materia/views.py @@ -1223,32 +1223,29 @@ class MateriaLegislativaPesquisaView(FilterView): status_tramitacao = data.get('tramitacao__status') unidade_destino = data.get('tramitacao__unidade_tramitacao_destino') - + # import ipdb; ipdb.set_trace() if status_tramitacao and unidade_destino: lista = filtra_tramitacao_destino_and_status(status_tramitacao, unidade_destino) self.object_list = self.filterset.qs.filter( - id__in=lista).distinct().order_by('tipo', 'numero', 'ano') + id__in=lista).distinct().order_by elif status_tramitacao: lista = filtra_tramitacao_status(status_tramitacao) self.object_list = self.filterset.qs.filter( - id__in=lista).distinct().order_by('tipo', 'numero', 'ano') + id__in=lista).distinct() elif unidade_destino: lista = filtra_tramitacao_destino(unidade_destino) self.object_list = self.filterset.qs.filter( - id__in=lista).distinct().order_by('tipo', 'numero', 'ano') + id__in=lista).distinct() else: - self.object_list = self.filterset.qs.order_by( - 'tipo', 'numero', 'ano') + self.object_list = self.filterset.qs if (data and data.get('numero') is not None): - url = "&"+str(self.request.environ['QUERY_STRING']) - if url[:5] == "&page": - url = url[7:] + url = str(self.request.environ['QUERY_STRING']) else: - url = '' + url = None context = self.get_context_data(filter=self.filterset, object_list=self.object_list, diff --git a/templates/materia/materialegislativa_filter.html b/templates/materia/materialegislativa_filter.html index 94821d1ca..0c72225c5 100644 --- a/templates/materia/materialegislativa_filter.html +++ b/templates/materia/materialegislativa_filter.html @@ -9,7 +9,7 @@

Pesquisar Matéria



- {{ filter.form | crispy }} + {{ filter.form.as_p }}

diff --git a/templates/paginacao_pesquisa_materia.html b/templates/paginacao_pesquisa_materia.html index 380b0f015..0395ab951 100644 --- a/templates/paginacao_pesquisa_materia.html +++ b/templates/paginacao_pesquisa_materia.html @@ -1,12 +1,25 @@ + {% if is_paginated %} -{% endif %} +{% endif %} \ No newline at end of file From 24cd1e38fdb9b2a782b96b55acea5e2e1e9daec2 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Fri, 1 Apr 2016 14:54:44 -0300 Subject: [PATCH 13/17] =?UTF-8?q?Finaliza=20a=20correcao=20da=20pagina?= =?UTF-8?q?=C3=A7ao?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- materia/views.py | 7 +++-- templates/paginacao_pesquisa_materia.html | 34 ++--------------------- 2 files changed, 7 insertions(+), 34 deletions(-) diff --git a/materia/views.py b/materia/views.py index c95bc9ffa..d94acd7c5 100644 --- a/materia/views.py +++ b/materia/views.py @@ -1243,9 +1243,12 @@ class MateriaLegislativaPesquisaView(FilterView): self.object_list = self.filterset.qs if (data and data.get('numero') is not None): - url = str(self.request.environ['QUERY_STRING']) + url = "&"+str(self.request.environ['QUERY_STRING']) + if url[:5] == "&page": + ponto_comeco = url.find('numero=') - 1 + url = url[ponto_comeco:] else: - url = None + url = '' context = self.get_context_data(filter=self.filterset, object_list=self.object_list, diff --git a/templates/paginacao_pesquisa_materia.html b/templates/paginacao_pesquisa_materia.html index 0395ab951..5fb4b1b9f 100644 --- a/templates/paginacao_pesquisa_materia.html +++ b/templates/paginacao_pesquisa_materia.html @@ -3,23 +3,11 @@