Browse Source

Relatorio parlamentares sessao (#3323)

* Adiciona campos no formulário de presença parmaentares sessões

* Adiciona campos para filtro na view

* Adiciona filtro para parlamentares ativos

* Filtra opções pela view
faceted-search-2
Vinícius Cantuária 4 years ago
committed by GitHub
parent
commit
963382fc96
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 31
      sapl/base/forms.py
  2. 102
      sapl/base/views.py
  3. 2
      sapl/templates/base/RelatorioPresencaSessao_filter.html

31
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('''
<div class="form-check">
<input name="relatorio" type="checkbox" class="form-check-input" id="relatorio">
<label class="form-check-label" for="relatorio">Gerar relatório PDF</label>
</div>
''')
<div class="form-check">
<input name="relatorio" type="checkbox" class="form-check-input" id="relatorio">
<label class="form-check-label" for="relatorio">Gerar relatório PDF</label>
</div>
''')
],
Submit('pesquisar', _('Pesquisar'), css_class='float-right',
onclick='return true;'),

102
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'

2
sapl/templates/base/RelatorioPresencaSessao_filter.html

@ -46,7 +46,7 @@
<tbody>
{% for p in parlamentares %}
<tr>
<td><b>{{p.parlamentar}}</b> / {{p.parlamentar|filiacao_intervalo_filter:date_range|default:"Sem Partido"}}</td>
<td><b> {{p.parlamentar}}</b> / {{p.parlamentar|filiacao_intervalo_filter:date_range|default:"Sem Partido"}}</td>
<td>{% if p.titular %} Sim {% else %} Não {% endif %}</td>
<td>{% if p.parlamentar.ativo %} Sim {% else %} Não {% endif %}</td>
<td>{{p.sessao_count}}</td>

Loading…
Cancel
Save