From 33f06da9f521187eee10e108acfb09fe2fc8d98a Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 29 Mar 2016 11:21:24 -0300 Subject: [PATCH] =?UTF-8?q?Finaliza=20a=20funcionalidade=20de=20todos=20os?= =?UTF-8?q?=20campos=20de=20pesquisa.=20Finaliza=20os=20campos=20situacao?= =?UTF-8?q?=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)