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 %}