From b849151617e330ffcc0e66dc6cd52543401d1dbb Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Thu, 31 Mar 2016 14:08:00 -0300 Subject: [PATCH] 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 7106b5922..8500a4d25 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -578,116 +578,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, @@ -708,22 +598,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( @@ -795,7 +677,7 @@ class MateriaLegislativaPesquisaFields(FilterSet): class Meta: models = MateriaLegislativa - fields = ['tipo', + fields = {'tipo', 'ano', 'numero_protocolo', 'data_apresentacao', @@ -808,15 +690,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 634a6d29d..185bbfe52 100644 --- a/materia/views.py +++ b/materia/views.py @@ -1216,22 +1216,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') @@ -1239,46 +1240,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" %}