Browse Source

Fix #435 pesquisa sessao plenaria (#447)

* Cria o formulario da pesquisa

* Conclui a implementacao da pesquisa de sessao plenaria

* Conserta QA e conflitos de merge com master
pull/456/head
eduardocalil 9 years ago
committed by Edward
parent
commit
15aeb9b6f9
  1. 3
      painel/urls.py
  2. 17
      sapl/utils.py
  3. 62
      sessao/forms.py
  4. 14
      sessao/urls.py
  5. 69
      sessao/views.py
  6. 47
      templates/sessao/sessaoplenaria_filter.html
  7. 7
      templates/sessao/sessaoplenaria_list.html

3
painel/urls.py

@ -8,7 +8,8 @@ from .views import (cronometro_painel, get_dados_painel, painel_mensagem_view,
app_name = AppConfig.name
urlpatterns = [
url(r'^painel_principal/(?P<pk>\d+)$', painel_view, name="painel_principal"),
url(r'^painel_principal/(?P<pk>\d+)$', painel_view,
name="painel_principal"),
url(r'^painel/(?P<pk>\d+)/dados$', get_dados_painel, name='dados_painel'),
url(r'^painel/controlador$',
controlador_painel, name='painel_controlador'),

17
sapl/utils.py

@ -131,6 +131,23 @@ UF = [
RANGE_ANOS = [(year, year) for year in range(date.today().year, 1889, -1)]
RANGE_MESES = [
(1, 'Janeiro'),
(2, 'Fevereiro'),
(3, 'Março'),
(4, 'Abril'),
(5, 'Maio'),
(6, 'Junho'),
(7, 'Julho'),
(8, 'Agosto'),
(9, 'Setembro'),
(10, 'Outubro'),
(11, 'Novembro'),
(12, 'Dezembro'),
]
RANGE_DIAS_MES = [(n, n) for n in range(1, 32)]
TIPOS_TEXTO_PERMITIDOS = (
'application/vnd.oasis.opendocument.text',
'application/x-vnd.oasis.opendocument.text',

62
sessao/forms.py

@ -1,10 +1,29 @@
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.forms import ModelForm
from .models import ExpedienteMateria
from materia.models import TipoMateriaLegislativa, MateriaLegislativa
from datetime import datetime
import django_filters
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Fieldset, Layout
from django import forms
from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
import crispy_layout_mixin
from crispy_layout_mixin import form_actions
from materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.utils import RANGE_DIAS_MES, RANGE_MESES
from .models import ExpedienteMateria, SessaoPlenaria
def pega_anos():
anos_list = SessaoPlenaria.objects.all().dates('data_inicio', 'year')
anos = [(k.year, k.year) for k in anos_list]
return anos
ANO_CHOICES = [('', '---------')] + pega_anos()
MES_CHOICES = [('', '---------')] + RANGE_MESES
DIA_CHOICES = [('', '---------')] + RANGE_DIAS_MES
class ExpedienteMateriaForm(ModelForm):
@ -101,3 +120,36 @@ class VotacaoForm(forms.Form):
class VotacaoEditForm(forms.Form):
pass
class SessaoPlenariaFilterSet(django_filters.FilterSet):
data_inicio__year = django_filters.ChoiceFilter(required=False,
label=u'Ano',
choices=ANO_CHOICES)
data_inicio__month = django_filters.ChoiceFilter(required=False,
label=u'Mês',
choices=MES_CHOICES)
data_inicio__day = django_filters.ChoiceFilter(required=False,
label=u'Dia',
choices=DIA_CHOICES)
class Meta:
model = SessaoPlenaria
fields = ['tipo']
def __init__(self, *args, **kwargs):
super(SessaoPlenariaFilterSet, self).__init__(*args, **kwargs)
row1 = crispy_layout_mixin.to_row(
[('data_inicio__year', 3),
('data_inicio__month', 3),
('data_inicio__day', 3),
('tipo', 3)])
self.form.helper = FormHelper()
self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout(
Fieldset(_('Pesquisa de Sessao Plenária'),
row1,
form_actions(save_label='Pesquisar'))
)

14
sessao/urls.py

@ -2,21 +2,21 @@ from django.conf.urls import include, url
from django.views.static import serve
from sapl import settings
from sessao.views import (EditMateriaOrdemDiaView,
ExpedienteView,
ListMateriaOrdemDiaView,
from sessao.views import (EditMateriaOrdemDiaView, ExpedienteMateriaCrud,
ExpedienteView, ListMateriaOrdemDiaView,
MateriaOrdemDiaView, MesaView, OradorCrud,
OradorExpedienteCrud, PainelView,
PautaExpedienteDetail, PautaOrdemDetail,
PautaSessaoDetailView, PautaSessaoListView,
PresencaOrdemDiaView, PresencaView, ResumoView,
SessaoCrud, SessaoPlenariaView, TipoExpedienteCrud,
PesquisarSessaoPlenariaView, PresencaOrdemDiaView,
PresencaView, ResumoView, SessaoCrud,
SessaoPlenariaView, TipoExpedienteCrud,
TipoResultadoVotacaoCrud, TipoSessaoCrud,
VotacaoEditView, VotacaoExpedienteEditView,
VotacaoExpedienteView, VotacaoNominalEditView,
VotacaoNominalExpedienteEditView,
VotacaoNominalExpedienteView, VotacaoNominalView,
VotacaoView, ExpedienteMateriaCrud, abrir_votacao_view)
VotacaoView, abrir_votacao_view)
from .apps import AppConfig
@ -74,6 +74,8 @@ urlpatterns = [
MateriaOrdemDiaView.as_view(), name='materiaordemdia_create'),
url(r'^(?P<pk>\d+)/resumo$',
ResumoView.as_view(), name='resumo'),
url(r'^sessao/pesquisar-sessao$',
PesquisarSessaoPlenariaView.as_view(), name='pesquisar_sessao'),
url(r'^(?P<pk>\d+)/matordemdia/votnom/(?P<oid>\d+)/(?P<mid>\d+)$',
VotacaoNominalView.as_view(), name='votacaonominal'),
url(r'^(?P<pk>\d+)/matordemdia/votnom/edit/(?P<oid>\d+)/(?P<mid>\d+)$',

69
sessao/views.py

@ -5,10 +5,12 @@ from django.contrib import messages
from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.core.urlresolvers import reverse
from django.forms.utils import ErrorList
from django.http.response import HttpResponseRedirect
from django.utils.html import strip_tags
from django.utils.translation import ugettext_lazy as _
from django.views.generic import ListView, TemplateView
from django.views.generic.edit import FormMixin
from django_filters.views import FilterView
from rest_framework import generics
import crud.base
@ -20,11 +22,11 @@ from materia.models import (Autoria, DocumentoAcessorio,
from norma.models import NormaJuridica
from parlamentares.models import Parlamentar
from sessao.serializers import SessaoPlenariaSerializer
from django.http.response import HttpResponseRedirect
from .forms import (ExpedienteForm, ListMateriaForm, MateriaOrdemDiaForm,
MesaForm, PresencaForm, VotacaoEditForm, VotacaoForm,
VotacaoNominalForm, ExpedienteMateriaForm)
from .forms import (ExpedienteForm, ExpedienteMateriaForm, ListMateriaForm,
MateriaOrdemDiaForm, MesaForm, PresencaForm,
SessaoPlenariaFilterSet, VotacaoEditForm, VotacaoForm,
VotacaoNominalForm)
from .models import (CargoMesa, ExpedienteMateria, ExpedienteSessao,
IntegranteMesa, MateriaLegislativa, Orador,
OradorExpediente, OrdemDia, PresencaOrdemDia,
@ -118,7 +120,7 @@ class ExpedienteMateriaCrud(MasterDetailCrud):
url = reverse('sessao:votacaonominalexpedit',
kwargs={
'pk': obj.sessao_plenaria_id,
'oid': bj.materia_id,
'oid': obj.materia_id,
'mid': obj.pk})
elif obj.tipo_votacao == 3:
url = reverse('sessao:votacaosecretaexpedit',
@ -1865,3 +1867,60 @@ class PautaOrdemDetail(SessaoCrud.CrudDetailView):
'norma': norma,
'doc_ace': doc_ace,
'tramitacao': tramitacao})
class PesquisarSessaoPlenariaView(FilterView):
model = SessaoPlenaria
filterset_class = SessaoPlenariaFilterSet
paginate_by = 10
def get_filterset_kwargs(self, filterset_class):
super(PesquisarSessaoPlenariaView,
self).get_filterset_kwargs(filterset_class)
kwargs = {'data': self.request.GET or None}
qs = self.get_queryset()
qs = qs.distinct()
kwargs.update({
'queryset': qs,
})
return kwargs
def get_context_data(self, **kwargs):
context = super(PesquisarSessaoPlenariaView,
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):
super(PesquisarSessaoPlenariaView, self).get(request)
# Se a pesquisa estiver quebrando com a paginação
# Olhe esta função abaixo
# 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('data_inicio__year') is not None):
url = "&" + str(self.request.environ['QUERY_STRING'])
if url.startswith("&page"):
ponto_comeco = url.find('data_inicio__year=') - 1
url = url[ponto_comeco:]
else:
url = ''
context = self.get_context_data(filter=self.filterset,
object_list=self.object_list,
filter_url=url,
numero_res=len(self.object_list)
)
return self.render_to_response(context)

47
templates/sessao/sessaoplenaria_filter.html

@ -0,0 +1,47 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %}{% endblock %}
{% block sections_nav %} {% endblock %}
{% block detail_content %}
<h1><b>Pesquisar Sessão Plenária</b></h1>
<br></br>
{% crispy filter.form %}
{% if filter_url %}
<p></p>
<table class="table table-striped table-bordered">
<thead class="thead-default">
<tr><td><h3>Resultados</h3></td></tr>
</thead>
{% if page_obj|length %}
{% if numero_res > 1 %}
<h3>Pesquisa concluída com sucesso! Foram encontradas {{numero_res}} sessões.</h3>
{% elif numero_res == 1 %}
<h3>Pesquisa concluída com sucesso! Foi encontrada {{numero_res}} sessão.</h3>
{% endif %}
{% for s in page_obj %}
<tr>
<td>
<strong><a href="{% url 'sessao:sessaoplenaria_detail' s.id %}">{{s.numero}}ª Sessão {{s.tipo.nome}} da {{s.sessao_legislativa.numero}}ª Sessão Legislativa da {{s.legislatura.id}}ª Legislatura</strong></a></br>
<p></p>
</tr>
{% endfor %}
{% else %}
<tr>
<td>
<h3>Nenhuma Sessão Plenária encontrada com essas especificações</h3>
</tr>
{% endif %}
</table>
{% include "paginacao.html" %}
{% endif %}
{% endblock detail_content %}

7
templates/sessao/sessaoplenaria_list.html

@ -0,0 +1,7 @@
{% extends "crud/list.html" %}
{% load i18n %}
{% block more_buttons %}
<a href="{% url 'sessao:pesquisar_sessao' %}" class="btn btn-default">
{% blocktrans with verbose_name=view.verbose_name %} Pesquisar {{ verbose_name }} {% endblocktrans %}
</a>
{% endblock %}
Loading…
Cancel
Save