diff --git a/sapl/base/forms.py b/sapl/base/forms.py
index 64b3e43f9..25b8dda55 100644
--- a/sapl/base/forms.py
+++ b/sapl/base/forms.py
@@ -1061,36 +1061,41 @@ class RelatorioPresencaSessaoFilterSet(django_filters.FilterSet):
'legislatura']
def __init__(self, *args, **kwargs):
- super(RelatorioPresencaSessaoFilterSet, self).__init__(
- *args, **kwargs)
+ super().__init__(*args, **kwargs)
- self.form.fields['exibir_ordem_dia'] = forms.BooleanField(required=False,
- label='Exibir presença das Ordens do Dia')
+ self.form.fields['exibir_ordem_dia'] = forms.BooleanField(required=False, label='Exibir presença das Ordens do Dia')
self.form.initial['exibir_ordem_dia'] = True
- self.filters['data_inicio'].label = 'Período (Inicial - Final)'
-
+ self.form.fields['exibir_somente_titular'] = forms.BooleanField(required=False, label='Exibir somente parlamentares titulares')
+ self.form.initial['exibir_somente_titular'] = False
+
+ self.form.fields['exibir_somente_ativo'] = forms.BooleanField(required=False, label='Exibir somente parlamentares ativos')
+ self.form.initial['exibir_somente_ativo'] = False
+
self.form.fields['legislatura'].required = True
- tipo_sessao_ordinaria = self.filters['tipo'].queryset.filter(
- nome='Ordinária')
+ self.filters['data_inicio'].label = 'Período (Inicial - Final)'
+
+ tipo_sessao_ordinaria = self.filters['tipo'].queryset.filter(nome='Ordinária')
if tipo_sessao_ordinaria:
self.form.initial['tipo'] = tipo_sessao_ordinaria.first()
row1 = to_row([('legislatura', 4),
('sessao_legislativa', 4),
('tipo', 4)])
- row2 = to_row([('exibir_ordem_dia', 12)])
+ row2 = to_row([('exibir_ordem_dia', 12),
+ ('exibir_somente_titular', 12),
+ ('exibir_somente_ativo', 12)])
row3 = to_row([('data_inicio', 12)])
buttons = FormActions(
*[
HTML('''
-
-
-
-
- ''')
+
+
+
+
+ ''')
],
Submit('pesquisar', _('Pesquisar'), css_class='float-right',
onclick='return true;'),
diff --git a/sapl/base/views.py b/sapl/base/views.py
index 50ce62832..91b1523bf 100644
--- a/sapl/base/views.py
+++ b/sapl/base/views.py
@@ -461,8 +461,7 @@ class RelatorioPresencaSessaoView(RelatorioMixin, FilterView):
def get_context_data(self, **kwargs):
- context = super(RelatorioPresencaSessaoView,
- self).get_context_data(**kwargs)
+ context = super().get_context_data(**kwargs)
context['title'] = _('Presença dos parlamentares nas sessões')
# Verifica se os campos foram preenchidos
@@ -524,32 +523,28 @@ class RelatorioPresencaSessaoView(RelatorioMixin, FilterView):
# Parlamentares com Mandato no intervalo de tempo (Ativos)
- parlamentares_qs = parlamentares_ativos(
- _range[0], _range[1]).order_by('nome_parlamentar')
- parlamentares_id = parlamentares_qs.values_list(
- 'id', flat=True)
+ parlamentares_qs = parlamentares_ativos(_range[0], _range[1]).order_by('nome_parlamentar')
+ parlamentares_id = parlamentares_qs.values_list('id', flat=True)
# Presenças de cada Parlamentar em Sessões
- presenca_sessao = SessaoPlenariaPresenca.objects.filter(**param0).values_list(
- 'parlamentar_id').annotate(
- sessao_count=Count('id'))
+ presenca_sessao = SessaoPlenariaPresenca.objects.filter(**param0).values_list('parlamentar_id').annotate(sessao_count=Count('id'))
# Presenças de cada Ordem do Dia
- presenca_ordem = PresencaOrdemDia.objects.filter(**param0).values_list(
- 'parlamentar_id').annotate(
- sessao_count=Count('id'))
+ presenca_ordem = PresencaOrdemDia.objects.filter(**param0).values_list('parlamentar_id').annotate(sessao_count=Count('id'))
- total_ordemdia = PresencaOrdemDia.objects.filter(
- **param0).distinct('sessao_plenaria__id').order_by(
- 'sessao_plenaria__id').count()
+ total_ordemdia = PresencaOrdemDia.objects.filter(**param0).distinct('sessao_plenaria__id').order_by('sessao_plenaria__id').count()
total_sessao = context['object_list'].count()
username = self.request.user.username
+ context['exibir_somente_titular'] = self.request.GET.get('exibir_somente_titular') == 'on'
+ context['exibir_somente_ativo'] = self.request.GET.get('exibir_somente_ativo') == 'on'
+
# Completa o dicionario as informacoes parlamentar/sessao/ordem
parlamentares_presencas = []
- for i, p in enumerate(parlamentares_qs):
+ for p in parlamentares_qs:
+ parlamentar = {}
m = p.mandato_set.filter(Q(data_inicio_mandato__lte=_range[0], data_fim_mandato__gte=_range[1]) |
Q(data_inicio_mandato__lte=_range[0], data_fim_mandato__isnull=True) |
Q(data_inicio_mandato__gte=_range[0], data_fim_mandato__lte=_range[1]) |
@@ -557,51 +552,78 @@ class RelatorioPresencaSessaoView(RelatorioMixin, FilterView):
Q(data_inicio_mandato__gte=_range[0], data_fim_mandato__lte=_range[1]))
m = m.last()
- parlamentares_presencas.append({
- 'parlamentar': p,
- 'titular': m.titular if m else False,
- 'sessao_porc': 0,
- 'ordemdia_porc': 0
- })
+
+ if not context['exibir_somente_titular'] and not context['exibir_somente_ativo']:
+ parlamentar = {
+ 'parlamentar': p,
+ 'titular': m.titular if m else False,
+ 'sessao_porc': 0,
+ 'ordemdia_porc': 0
+ }
+ elif context['exibir_somente_titular'] and not context['exibir_somente_ativo']:
+ if m and m.titular:
+ parlamentar = {
+ 'parlamentar': p,
+ 'titular': m.titular if m else False,
+ 'sessao_porc': 0,
+ 'ordemdia_porc': 0
+ }
+ else:
+ continue
+ elif not context['exibir_somente_titular'] and context['exibir_somente_ativo']:
+ if p.ativo:
+ parlamentar = {
+ 'parlamentar': p,
+ 'titular': m.titular if m else False,
+ 'sessao_porc': 0,
+ 'ordemdia_porc': 0
+ }
+ else:
+ continue
+ elif context['exibir_somente_titular'] and context['exibir_somente_ativo']:
+ if m and m.titular and p.ativo:
+ parlamentar = {
+ 'parlamentar': p,
+ 'titular': m.titular if m else False,
+ 'sessao_porc': 0,
+ 'ordemdia_porc': 0
+ }
+ else:
+ continue
+ else:
+ continue
+
try:
- self.logger.debug(
- 'user=' + username + '. Tentando obter presença do parlamentar (pk={}).'.format(p.id))
+ self.logger.debug(F'user={username}. Tentando obter presença do parlamentar (pk={p.id}).')
sessao_count = presenca_sessao.get(parlamentar_id=p.id)[1]
except ObjectDoesNotExist as e:
- self.logger.error(
- 'user=' + username + '. Erro ao obter presença do parlamentar (pk={}). Definido como 0. '.format(p.id) + str(e))
+ self.logger.error(F'user={username}. Erro ao obter presença do parlamentar (pk={p.id}). Definido como 0. {str(e)}')
sessao_count = 0
try:
# Presenças de cada Ordem do Dia
- self.logger.info(
- 'user=' + username + '. Tentando obter PresencaOrdemDia para o parlamentar pk={}.'.format(p.id))
+ self.logger.info(F'user={username}. Tentando obter PresencaOrdemDia para o parlamentar pk={p.id}.')
ordemdia_count = presenca_ordem.get(parlamentar_id=p.id)[1]
except ObjectDoesNotExist:
- self.logger.error('user=' + username + '. Erro ao obter PresencaOrdemDia para o parlamentar pk={}. '
- 'Definido como 0.'.format(p.id))
+ self.logger.error(F'user={username}. Erro ao obter PresencaOrdemDia para o parlamentar pk={p.id}. Definido como 0.')
ordemdia_count = 0
- parlamentares_presencas[i].update({
+ parlamentar.update({
'sessao_count': sessao_count,
'ordemdia_count': ordemdia_count
})
if total_sessao != 0:
- parlamentares_presencas[i].update(
- {'sessao_porc': round(
- sessao_count * 100 / total_sessao, 2)})
+ parlamentar.update({'sessao_porc': round(sessao_count * 100 / total_sessao, 2)})
if total_ordemdia != 0:
- parlamentares_presencas[i].update(
- {'ordemdia_porc': round(
- ordemdia_count * 100 / total_ordemdia, 2)})
+ parlamentar.update({'ordemdia_porc': round(ordemdia_count * 100 / total_ordemdia, 2)})
+
+ parlamentares_presencas.append(parlamentar)
context['date_range'] = _range
context['total_ordemdia'] = total_ordemdia
context['total_sessao'] = context['object_list'].count()
context['parlamentares'] = parlamentares_presencas
- context['periodo'] = (
- self.request.GET['data_inicio_0'] +
- ' - ' + self.request.GET['data_inicio_1'])
+ context['periodo'] = f"{self.request.GET['data_inicio_0']} - {self.request.GET['data_inicio_1']}"
context['sessao_legislativa'] = ''
context['legislatura'] = ''
context['exibir_ordem'] = self.request.GET.get('exibir_ordem_dia') == 'on'
diff --git a/sapl/templates/base/RelatorioPresencaSessao_filter.html b/sapl/templates/base/RelatorioPresencaSessao_filter.html
index c3ad733af..9688ab33f 100644
--- a/sapl/templates/base/RelatorioPresencaSessao_filter.html
+++ b/sapl/templates/base/RelatorioPresencaSessao_filter.html
@@ -46,12 +46,12 @@
{% for p in parlamentares %}
- {{p.parlamentar}} / {{p.parlamentar|filiacao_intervalo_filter:date_range|default:"Sem Partido"}} |
+ {{p.parlamentar}} / {{p.parlamentar|filiacao_intervalo_filter:date_range|default:"Sem Partido"}} |
{% if p.titular %} Sim {% else %} Não {% endif %} |
{% if p.parlamentar.ativo %} Sim {% else %} Não {% endif %} |
{{p.sessao_count}} |
{{p.sessao_porc}} |
- {% if exibir_ordem %}
+ {% if exibir_ordem %}
{{p.ordemdia_count}} |
{{p.ordemdia_porc}} |
{% endif %}