From 5f14324c87ba35d2db69de0a4064d172a86da11f Mon Sep 17 00:00:00 2001 From: cristian-longhi Date: Mon, 18 May 2026 13:14:58 -0300 Subject: [PATCH] =?UTF-8?q?Conserta=20bug=20data=20da=20vota=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/relatorios/forms.py | 34 ++++++++++++------- sapl/relatorios/views.py | 16 +++++---- .../materia/materialegislativa_filter.html | 4 +-- .../RelatorioVotacoesNominais_filter.html | 4 +-- .../relatorios/custom_data_ordem_field.html | 7 ++++ .../relatorios/relatorio_votacao_nominal.html | 4 +-- 6 files changed, 43 insertions(+), 26 deletions(-) create mode 100644 sapl/templates/relatorios/custom_data_ordem_field.html diff --git a/sapl/relatorios/forms.py b/sapl/relatorios/forms.py index 23145f899..ee15fc141 100644 --- a/sapl/relatorios/forms.py +++ b/sapl/relatorios/forms.py @@ -6,6 +6,7 @@ from django.forms import ModelChoiceField from django.utils.translation import ugettext_lazy as _ from django.db.models import Q +from django_filters.widgets import RangeWidget from sapl.audiencia.models import AudienciaPublica from sapl.base.models import Autor @@ -20,6 +21,10 @@ choice_anos_com_materias, choice_tipos_normas, autor_label, autor_modal +class CustomDateRangeWidget(RangeWidget): + template_name = 'relatorios/custom_data_ordem_field.html' + + class RelatorioDocumentosAcessoriosFilterSet(django_filters.FilterSet): @property @@ -76,40 +81,43 @@ def ordem_or_expediente(self, queryset, name, value): if value is None: return queryset value = getattr(value, "pk", value) - ordem_q = f"ordem__materia__{name}" - expediente_q = f"expediente__materia__{name}" + if type(value) == slice: + ordem_q = f"ordem__{name}__range" + expediente_q = f"expediente__{name}__range" + return queryset.filter(Q(**{ordem_q: (value.start, value.stop)}) | Q(**{expediente_q: (value.start, value.stop)})) + ordem_q = f"ordem__{name}" + expediente_q = f"expediente__{name}" return queryset.filter(Q(**{ordem_q: value}) | Q(**{expediente_q: value})) - tipo_id = django_filters.ModelChoiceFilter( + materia__tipo_id = django_filters.ModelChoiceFilter( queryset=TipoMateriaLegislativa.objects.all(), method='ordem_or_expediente', label='Tipo de Matéria', empty_label="---------" ) - numero = django_filters.NumberFilter( + materia__numero = django_filters.NumberFilter( widget=forms.NumberInput(attrs={'class': 'form-control', 'step': 'any'}), method='ordem_or_expediente', label='Número' ) - ano = django_filters.ChoiceFilter( + materia__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' ) - - class Meta(FilterOverridesMetaMixin): - model = RegistroVotacao - fields = ['data_hora'] + data_ordem = django_filters.DateFromToRangeFilter( + widget=CustomDateRangeWidget(attrs={'class': 'dateinput form-control'}), + method='ordem_or_expediente', + label='Período (Data Inicial - Data Final)' + ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.filters['data_hora'].label = 'Período (Data Inicial - Data Final)' - - row0 = to_row([('tipo_id', 6), ('numero', 3), ('ano', 3)]) + row0 = to_row([('materia__tipo_id', 6), ('materia__numero', 3), ('materia__ano', 3)]) - row1 = to_row([('data_hora', 12)]) + row1 = to_row([('data_ordem', 12)]) buttons = FormActions( *[ diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py index bc28b3ffc..15d45db26 100755 --- a/sapl/relatorios/views.py +++ b/sapl/relatorios/views.py @@ -7,6 +7,7 @@ import unidecode from django.core.exceptions import ObjectDoesNotExist from django.db.models import Count, Q, F +from django.db.models.functions import Coalesce from django.http import Http404, HttpResponse from django.template.loader import render_to_string from django.utils import timezone @@ -1913,8 +1914,9 @@ def get_queryset(self): order_fields = ['-votacao_id', 'parlamentar'] qs = VotoParlamentar.objects.filter(query_params).order_by(*order_fields) else: - order_fields = ['-id'] - qs = RegistroVotacao.objects.filter(query_params).order_by(*order_fields) + qs = RegistroVotacao.objects.filter(query_params) \ + .annotate(data_votacao=Coalesce('ordem__data_ordem', 'expediente__data_ordem')) \ + .order_by('-data_votacao') return qs def get_context_data(self, **kwargs): @@ -1931,17 +1933,17 @@ def get_context_data(self, **kwargs): 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.get('data_hora_0', '') - data_final = self.request.GET.get('data_hora_1', '') + data_inicial = self.request.GET.get('data_ordem_min', '') + data_final = self.request.GET.get('data_ordem_max', '') if not data_inicial: data_inicial = "Data Inicial não definida" if not data_final: data_final = "Data Final não definida" 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') + tipo_id = self.request.GET.get('materia__tipo_id') + numero = self.request.GET.get('materia__numero') + ano = self.request.GET.get('materia__ano') if tipo_id: context['tipo_materia'] = TipoMateriaLegislativa.objects.get(id=tipo_id) diff --git a/sapl/templates/materia/materialegislativa_filter.html b/sapl/templates/materia/materialegislativa_filter.html index f74c5d5ab..c5f749a6f 100644 --- a/sapl/templates/materia/materialegislativa_filter.html +++ b/sapl/templates/materia/materialegislativa_filter.html @@ -115,7 +115,7 @@

{% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 matéria.'%}

{% for rv in m.registrovotacao_set.all %} {% if rv.ordem %} - {{ rv.ordem.sessao_plenaria.data_inicio }} + {{ rv.ordem.data_ordem }} {% if rv.ordem.tipo_votacao == 2 %} - Votação Nominal >>> @@ -130,7 +130,7 @@

{% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 matéria.'%}

{% endif %} {% elif rv.expediente %} -
{{ rv.expediente.sessao_plenaria.data_inicio }} + {{ rv.expediente.data_ordem }} {% if rv.expediente.tipo_votacao == 2 %} - Votação Nominal >>> diff --git a/sapl/templates/relatorios/RelatorioVotacoesNominais_filter.html b/sapl/templates/relatorios/RelatorioVotacoesNominais_filter.html index 72d6f0212..bf7885475 100644 --- a/sapl/templates/relatorios/RelatorioVotacoesNominais_filter.html +++ b/sapl/templates/relatorios/RelatorioVotacoesNominais_filter.html @@ -51,13 +51,13 @@

Foi encontrada {{qtde_votacoes}} votação.


{{ 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" }}
+ Data da Votação: {{ rv.ordem.data_ordem|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" }}
+ Data da Votação: {{ rv.expediente.data_ordem|date:"d/m/Y" }}
Resultado: {{ rv.expediente.resultado }} {% endif %} diff --git a/sapl/templates/relatorios/custom_data_ordem_field.html b/sapl/templates/relatorios/custom_data_ordem_field.html new file mode 100644 index 000000000..bcc25c2ed --- /dev/null +++ b/sapl/templates/relatorios/custom_data_ordem_field.html @@ -0,0 +1,7 @@ +
+{% for widget in widget.subwidgets %} +
+ {% include widget.template_name %} +
+{% endfor %} +
diff --git a/sapl/templates/relatorios/relatorio_votacao_nominal.html b/sapl/templates/relatorios/relatorio_votacao_nominal.html index 72773a4e8..3558236cd 100644 --- a/sapl/templates/relatorios/relatorio_votacao_nominal.html +++ b/sapl/templates/relatorios/relatorio_votacao_nominal.html @@ -31,12 +31,12 @@

Foi encontrada {{qtde_votacoes}} votação.

{% 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" }}
+ Data da Votação: {{ rv.ordem.data_ordem|date:"d/m/Y" }}
Resultado: {{ rv.ordem.resultado }}

{% else %} 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" }}
+ Data da Votação: {{ rv.expediente.data_ordem|date:"d/m/Y" }}
Resultado: {{ rv.expediente.resultado }}

{% endif %}