diff --git a/sapl/relatorios/forms.py b/sapl/relatorios/forms.py
index a7f42e8e5..5523d7514 100644
--- a/sapl/relatorios/forms.py
+++ b/sapl/relatorios/forms.py
@@ -5,6 +5,7 @@ from crispy_forms.layout import (HTML, Button, Fieldset,
from django import forms
from django.forms import ModelChoiceField
from django.utils.translation import ugettext_lazy as _
+from django.db.models import Q
from sapl.audiencia.models import AudienciaPublica
from sapl.base.models import Autor
@@ -14,7 +15,7 @@ from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa, MateriaE
StatusTramitacao, TipoMateriaLegislativa
from sapl.norma.models import NormaJuridica
from sapl.protocoloadm.models import DocumentoAdministrativo
-from sapl.sessao.models import SessaoPlenaria, VotoParlamentar
+from sapl.sessao.models import SessaoPlenaria, VotoParlamentar, RegistroVotacao
from sapl.utils import FilterOverridesMetaMixin, choice_anos_com_normas, qs_override_django_filter, \
choice_anos_com_materias, choice_tipos_normas, autor_label, autor_modal
@@ -71,51 +72,56 @@ class RelatorioDocumentosAcessoriosFilterSet(django_filters.FilterSet):
class RelatorioVotacoesNominaisFilterSet(django_filters.FilterSet):
- @property
- def qs(self):
- parent = super(RelatorioVotacoesNominaisFilterSet, self).qs
- return parent.distinct().order_by('-votacao_id', 'parlamentar')
+ tipo_id = django_filters.ModelChoiceFilter(
+ queryset=TipoMateriaLegislativa.objects.all(),
+ method='ordem_or_expediente',
+ label='Tipo de Matéria',
+ empty_label="---------"
+ )
+ numero = django_filters.NumberFilter(
+ widget=forms.NumberInput(attrs={'class': 'form-control', 'step': 'any'}),
+ method='ordem_or_expediente',
+ label='Número'
+ )
+ ano = django_filters.ChoiceFilter(
+ choices=list(choice_anos_com_materias()),
+ widget=forms.Select(attrs={'class': 'form-control'}),
+ method='ordem_or_expediente',
+ label='Ano da Matéria'
+ )
+
+ def ordem_or_expediente(self, queryset, name, value):
+ if value:
+ try:
+ val = value.id
+ except AttributeError:
+ val = value
+ return queryset.filter(
+ eval(f'Q(ordem__materia__{name}={val}) | Q(expediente__materia__{name}={val})')
+ )
+ return queryset
class Meta(FilterOverridesMetaMixin):
- model = VotoParlamentar
+ model = RegistroVotacao
fields = ['data_hora']
def __init__(self, *args, **kwargs):
- super(
- RelatorioVotacoesNominaisFilterSet, self
- ).__init__(*args, **kwargs)
+ super().__init__(*args, **kwargs)
self.filters['data_hora'].label = 'Período (Data Inicial - Data Final)'
- tipo_materia = '''
'
-
- numero = ''''''
-
- ano = '''Ano da Matéria
-
--------- '''
- for ano_materia in choice_anos_com_materias():
- ano += '' + str(ano_materia[1]) + ' '
-
- ano += '
'
-
- row0= HTML('' + tipo_materia + numero + ano + '
')
+ row0= to_row([('tipo_id', 6), ('numero', 3), ('ano', 3)])
row1 = to_row([('data_hora', 12)])
buttons = FormActions(
*[
- HTML('''
+ HTML("""
Gerar relatório PDF
- ''')
+ """)
],
Submit('pesquisar', _('Pesquisar'), css_class='float-right',
onclick='return true;'),
diff --git a/sapl/relatorios/urls.py b/sapl/relatorios/urls.py
index 5244ea3d6..235becfab 100644
--- a/sapl/relatorios/urls.py
+++ b/sapl/relatorios/urls.py
@@ -101,3 +101,4 @@ urlpatterns = [
url(r'^sistema/relatorios/normas-por-autor$',
RelatorioNormasPorAutorView.as_view(), name='normas_por_autor'),
]
+
diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py
index 4c5eaab42..1708b420b 100755
--- a/sapl/relatorios/views.py
+++ b/sapl/relatorios/views.py
@@ -1886,10 +1886,10 @@ class RelatorioDocumentosAcessoriosView(RelatorioMixin, FilterView):
class RelatorioVotacoesNominaisView(RelatorioMixin, VotacoesMultiFormatOutputMixin, FilterView):
- model = VotoParlamentar
filterset_class = RelatorioVotacoesNominaisFilterSet
template_name = 'relatorios/RelatorioVotacoesNominais_filter.html'
relatorio = relatorio_votacao_nominal
+ paginate_by = 20
fields_base_report = [
'votacao_id', 'votacao', 'parlamentar__nome_parlamentar', 'voto'
@@ -1901,10 +1901,18 @@ class RelatorioVotacoesNominaisView(RelatorioMixin, VotacoesMultiFormatOutputMix
'json': fields_base_report,
}
+ def get_queryset(self):
+ if 'format' in self.request.GET:
+ self.model = VotoParlamentar
+ order_fields = ['-votacao_id', 'parlamentar']
+ else:
+ self.model = RegistroVotacao
+ order_fields = ['-id']
+ qs = self.model.objects.filter(Q(ordem__tipo_votacao=2)|Q(expediente__tipo_votacao=2)).order_by(*order_fields)
+ return qs
+
def get_context_data(self, **kwargs):
- context = super(
- RelatorioVotacoesNominaisView, self
- ).get_context_data(**kwargs)
+ context = super().get_context_data(**kwargs)
context['title'] = _('Votações Nominais')
@@ -1912,44 +1920,41 @@ class RelatorioVotacoesNominaisView(RelatorioMixin, VotacoesMultiFormatOutputMix
return context
query_dict = self.request.GET.copy()
- context['filter_url'] = ('&' + query_dict.urlencode()) if len(query_dict) > 0 else ''
+ if 'page' in query_dict:
+ del query_dict['page']
+ context['filter_url'] = f"&{query_dict.urlencode()}" if query_dict else ''
context['show_results'] = show_results_filter_set(query_dict)
- data_inicial = self.request.GET['data_hora_0']
- data_final = self.request.GET['data_hora_1']
+ data_inicial = self.request.GET.get('data_hora_0', '')
+ data_final = self.request.GET.get('data_hora_1', '')
if not data_inicial:
data_inicial = "Data Inicial não definida"
if not data_final:
data_final = "Data Final não definida"
- context['periodo'] = (
- data_inicial + ' - ' + data_final
- )
+ context['periodo'] = f"{data_inicial} - {data_final}"
+
+ tipo_id = self.request.GET.get('tipo_id')
+ numero = self.request.GET.get('numero')
+ ano = self.request.GET.get('ano')
+
+ if tipo_id:
+ context['tipo_materia'] = TipoMateriaLegislativa.objects.get(id=tipo_id)
+ if numero:
+ context['numero'] = int(numero)
+ if ano:
+ context['ano'] = ano
- if self.request.GET['tipo_materia'] or self.request.GET['numero'] or self.request.GET['ano']:
- object_list = context['object_list']
- if self.request.GET['tipo_materia']:
- tipo_id = self.request.GET['tipo_materia']
- context['tipo_materia'] = TipoMateriaLegislativa.objects.get(id=tipo_id)
- object_list = object_list.filter(
- Q(ordem__materia__tipo_id=tipo_id) |
- Q(expediente__materia__tipo_id=tipo_id))
- if self.request.GET['numero']:
- numero = self.request.GET['numero']
- context['numero'] = numero
- object_list = object_list.filter(
- Q(ordem__materia__numero=numero) |
- Q(expediente__materia__numero=numero))
- if self.request.GET['ano']:
- ano = self.request.GET['ano']
- context['ano'] = ano
- object_list = object_list.filter(
- Q(ordem__materia__ano=ano) |
- Q(expediente__materia__ano=ano))
- context['object_list'] = object_list
-
-
- if not 'format' in query_dict:
- context['qtde_votacoes'] = context['object_list'].distinct('votacao_id').count()
+ if 'relatorio' not in self.request.GET:
+ paginator = context['paginator']
+ page_obj = context['page_obj']
+
+ context['page_range'] = make_pagination(
+ page_obj.number, paginator.num_pages)
+
+ context['qtde_votacoes'] = paginator.count
+ else:
+ self.paginate_by = None
+ context['qtde_votacoes'] = len(context['object_list'])
return context
diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py
index d20ba930c..613068afe 100644
--- a/sapl/sessao/models.py
+++ b/sapl/sessao/models.py
@@ -699,7 +699,7 @@ class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar
class Meta:
verbose_name = _('Registro de Votação de Parlamentar')
verbose_name_plural = _('Registros de Votações de Parlamentares')
- ordering = ('parlamentar',)
+ ordering = ('id',)
def __str__(self):
return _('Votação: %(votacao)s - Parlamentar: %(parlamentar)s') % {
diff --git a/sapl/templates/materia/materialegislativa_filter.html b/sapl/templates/materia/materialegislativa_filter.html
index cddba92e4..6412ef7f0 100644
--- a/sapl/templates/materia/materialegislativa_filter.html
+++ b/sapl/templates/materia/materialegislativa_filter.html
@@ -116,14 +116,14 @@
{% for rv in m.registrovotacao_set.all %}
{% if rv.ordem %}
{{ rv.ordem.sessao_plenaria.data_inicio }}
- {% if rv.ordem.get_tipo_votacao_display == 'Nominal' %}
+ {% if rv.ordem.tipo_votacao == 2 %}
-
Votação Nominal >>>
{{ rv.ordem.resultado }}
- {% for voto in rv.ordem.votoparlamentar_set.all %}
+ {% for voto in rv.ordem.votoparlamentar_set.all|dictsort:"parlamentar.nome_parlamentar" %}
{{ voto.parlamentar }} - {{ voto.voto }}
{% endfor %}
@@ -131,14 +131,14 @@
{% endif %}
{% elif rv.expediente %}
{{ rv.expediente.sessao_plenaria.data_inicio }}
- {% if rv.expediente.get_tipo_votacao_display == 'Nominal' %}
+ {% if rv.expediente.tipo_votacao == 2 %}
-
Votação Nominal >>>
{{ rv.expediente.resultado }}
- {% for voto in rv.expediente.votoparlamentar_set.all %}
+ {% for voto in rv.expediente.votoparlamentar_set.all|dictsort:"parlamentar.nome_parlamentar" %}
{{ voto.parlamentar }} - {{ voto.voto }}
{% endfor %}
@@ -263,16 +263,16 @@
}
};
-function votacaoNominal(id){
-$('#div_' + id).toggle();
+ function votacaoNominal(id){
+ $('#div_' + id).toggle();
-var id_link = "#link_votacao_nominal_" + id;
-if ($(id_link).text().indexOf('>>>') > -1){
-$(id_link).text($(id_link).text().replace('>>>', '<<<'))
-}else{
-$(id_link).text($(id_link).text().replace('<<<', '>>>'))
-}
-};
+ var id_link = "#link_votacao_nominal_" + id;
+ if ($(id_link).text().indexOf('>>>') > -1){
+ $(id_link).text($(id_link).text().replace('>>>', '<<<'))
+ }else{
+ $(id_link).text($(id_link).text().replace('<<<', '>>>'))
+ }
+ };
{% endblock extra_js %}
diff --git a/sapl/templates/relatorios/RelatorioVotacoesNominais_filter.html b/sapl/templates/relatorios/RelatorioVotacoesNominais_filter.html
index 36561fa7e..72d6f0212 100644
--- a/sapl/templates/relatorios/RelatorioVotacoesNominais_filter.html
+++ b/sapl/templates/relatorios/RelatorioVotacoesNominais_filter.html
@@ -42,38 +42,41 @@
Dados da Votação / Matéria
Parlamentar - Voto
-
- {% for voto in object_list %}
- {% ifchanged voto.votacao_id %}
- {% if not forloop.first %}
-
- {% endif %}
-
- {% if voto.ordem %}
- {{ voto.ordem.materia }} - {{ voto.ordem.materia.ementa }}
- Momento da Votação: Ordem do Dia -
- {{ voto.ordem.sessao_plenaria }}
- Data da Votação: {{ voto.data_hora|date:"d/m/Y" }}
- Resultado: {{ voto.ordem.resultado }}
- {% else %}
- {{ voto.expediente.materia }} - {{ voto.expediente.materia.ementa }}
- Momento da Votação: Expediente -
- {{ voto.expediente.sessao_plenaria }}
- Data da Votação: {{ voto.data_hora|date:"d/m/Y" }}
- Resultado: {{ voto.expediente.resultado }}
-
- {% endif %}
-
- {% endifchanged %}
-
- {{ voto.parlamentar }} - {{ voto.voto }}
-
- {% endfor %}
-
+
+
+ {% for rv in object_list %}
+
+
+ {% if rv.ordem %}
+ {{ rv.ordem.materia }} - {{ rv.ordem.materia.ementa }}
+ Momento da Votação: Ordem do Dia -
+ {{ rv.ordem.sessao_plenaria }}
+ Data da Votação: {{ rv.data_hora|date:"d/m/Y" }}
+ Resultado: {{ rv.ordem.resultado }}
+ {% else %}
+ {{ rv.expediente.materia }} - {{ rv.expediente.materia.ementa }}
+ Momento da Votação: Expediente -
+ {{ rv.expediente.sessao_plenaria }}
+ Data da Votação: {{ rv.data_hora|date:"d/m/Y" }}
+ Resultado: {{ rv.expediente.resultado }}
+ {% endif %}
+
+
+ {% for voto in rv.votoparlamentar_set.all|dictsort:"parlamentar.nome_parlamentar" %}
+
+ {{ voto.parlamentar }} - {{ voto.voto }}
+
+ {% endfor %}
+
+
+ {% endfor %}
+
{% else %}
Nenhuma votação encontrada com esses parâmetros.
{% endif %}
{% endif %}
- {% include "paginacao.html" %}
+ {% if filter_url %}
+ {% include "paginacao.html" %}
+ {% endif %}
{% endblock base_content %}
diff --git a/sapl/templates/relatorios/relatorio_votacao_nominal.html b/sapl/templates/relatorios/relatorio_votacao_nominal.html
index cb0605b20..72773a4e8 100644
--- a/sapl/templates/relatorios/relatorio_votacao_nominal.html
+++ b/sapl/templates/relatorios/relatorio_votacao_nominal.html
@@ -4,44 +4,48 @@
{% load static %}
{% block content %}
-
Votações Nominais
-
- PARÂMETROS DE PESQUISA:
- {% if tipo_materia %}
- Tipo de matéria: {{ tipo_materia }}
- {% endif %}
- Período: {{ periodo }}
-
+
Votações Nominais
+
+ PARÂMETROS DE PESQUISA:
+ {% if tipo_materia %}
+ Tipo de matéria: {{ tipo_materia }}
+ {% endif %}
+ {% if numero %}
+ Número: {{ numero }}
+ {% endif %}
+ {% if ano %}
+ Ano: {{ ano }}
+ {% endif %}
+ Período: {{ periodo }}
+
{% if object_list %}
-
{% if qtde_votacoes > 1 %}
Foram encontradas {{qtde_votacoes}} votações.
{% elif qtde_votacoes == 1 %}
Foi encontrada {{qtde_votacoes}} votação.
{% endif %}
- {% for voto in object_list %}
- {% ifchanged voto.votacao_id %}
- {% if not forloop.first %}{% endif %}
+ {% for rv in object_list %}
- {% if voto.ordem %}
- Matéria: {{ voto.ordem.materia }} - {{ voto.ordem.materia.ementa }}
- Momento da Votação: Ordem do Dia - {{ voto.ordem.sessao_plenaria }}
- Data da Votação: {{ voto.data_hora|date:"d/m/Y" }}
- Resultado: {{ voto.ordem.resultado }}
+ {% if rv.ordem %}
+ Matéria: {{ rv.ordem.materia }} - {{ rv.ordem.materia.ementa }}
+ Momento da Votação: Ordem do Dia - {{ rv.ordem.sessao_plenaria }}
+ Data da Votação: {{ rv.data_hora|date:"d/m/Y" }}
+ Resultado: {{ rv.ordem.resultado }}
{% else %}
- Matéria: {{ voto.expediente.materia }} - {{ voto.expediente.materia.ementa }}
- Momento da Votação: Expediente - {{ voto.expediente.sessao_plenaria }}
- Data da Votação: {{ voto.data_hora|date:"d/m/Y" }}
- Resultado: {{ voto.expediente.resultado }}
+ Matéria: {{ rv.expediente.materia }} - {{ rv.expediente.materia.ementa }}
+ Momento da Votação: Expediente - {{ rv.expediente.sessao_plenaria }}
+ Data da Votação: {{ rv.data_hora|date:"d/m/Y" }}
+ Resultado: {{ rv.expediente.resultado }}
{% endif %}
- {% endifchanged %}
- {{ voto.parlamentar }} - {{ voto.voto }}
+ {% for voto in rv.votoparlamentar_set.all|dictsort:"parlamentar.nome_parlamentar" %}
+ {{ voto.parlamentar }} - {{ voto.voto }}
+ {% endfor %}
+
{% endfor %}
-
{% else %}
Nenhuma votação encontrada com esses parâmetros.
{% endif %}