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. 33
      sapl/base/forms.py
  2. 102
      sapl/base/views.py
  3. 4
      sapl/templates/base/RelatorioPresencaSessao_filter.html

33
sapl/base/forms.py

@ -1061,36 +1061,41 @@ class RelatorioPresencaSessaoFilterSet(django_filters.FilterSet):
'legislatura'] 'legislatura']
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(RelatorioPresencaSessaoFilterSet, self).__init__( super().__init__(*args, **kwargs)
*args, **kwargs)
self.form.fields['exibir_ordem_dia'] = forms.BooleanField(required=False, self.form.fields['exibir_ordem_dia'] = forms.BooleanField(required=False, label='Exibir presença das Ordens do Dia')
label='Exibir presença das Ordens do Dia')
self.form.initial['exibir_ordem_dia'] = True 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 self.form.fields['legislatura'].required = True
tipo_sessao_ordinaria = self.filters['tipo'].queryset.filter( self.filters['data_inicio'].label = 'Período (Inicial - Final)'
nome='Ordinária')
tipo_sessao_ordinaria = self.filters['tipo'].queryset.filter(nome='Ordinária')
if tipo_sessao_ordinaria: if tipo_sessao_ordinaria:
self.form.initial['tipo'] = tipo_sessao_ordinaria.first() self.form.initial['tipo'] = tipo_sessao_ordinaria.first()
row1 = to_row([('legislatura', 4), row1 = to_row([('legislatura', 4),
('sessao_legislativa', 4), ('sessao_legislativa', 4),
('tipo', 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)]) row3 = to_row([('data_inicio', 12)])
buttons = FormActions( buttons = FormActions(
*[ *[
HTML(''' HTML('''
<div class="form-check"> <div class="form-check">
<input name="relatorio" type="checkbox" class="form-check-input" id="relatorio"> <input name="relatorio" type="checkbox" class="form-check-input" id="relatorio">
<label class="form-check-label" for="relatorio">Gerar relatório PDF</label> <label class="form-check-label" for="relatorio">Gerar relatório PDF</label>
</div> </div>
''') ''')
], ],
Submit('pesquisar', _('Pesquisar'), css_class='float-right', Submit('pesquisar', _('Pesquisar'), css_class='float-right',
onclick='return true;'), onclick='return true;'),

102
sapl/base/views.py

@ -461,8 +461,7 @@ class RelatorioPresencaSessaoView(RelatorioMixin, FilterView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(RelatorioPresencaSessaoView, context = super().get_context_data(**kwargs)
self).get_context_data(**kwargs)
context['title'] = _('Presença dos parlamentares nas sessões') context['title'] = _('Presença dos parlamentares nas sessões')
# Verifica se os campos foram preenchidos # Verifica se os campos foram preenchidos
@ -524,32 +523,28 @@ class RelatorioPresencaSessaoView(RelatorioMixin, FilterView):
# Parlamentares com Mandato no intervalo de tempo (Ativos) # Parlamentares com Mandato no intervalo de tempo (Ativos)
parlamentares_qs = parlamentares_ativos( parlamentares_qs = parlamentares_ativos(_range[0], _range[1]).order_by('nome_parlamentar')
_range[0], _range[1]).order_by('nome_parlamentar') parlamentares_id = parlamentares_qs.values_list('id', flat=True)
parlamentares_id = parlamentares_qs.values_list(
'id', flat=True)
# Presenças de cada Parlamentar em Sessões # Presenças de cada Parlamentar em Sessões
presenca_sessao = SessaoPlenariaPresenca.objects.filter(**param0).values_list( presenca_sessao = SessaoPlenariaPresenca.objects.filter(**param0).values_list('parlamentar_id').annotate(sessao_count=Count('id'))
'parlamentar_id').annotate(
sessao_count=Count('id'))
# Presenças de cada Ordem do Dia # Presenças de cada Ordem do Dia
presenca_ordem = PresencaOrdemDia.objects.filter(**param0).values_list( presenca_ordem = PresencaOrdemDia.objects.filter(**param0).values_list('parlamentar_id').annotate(sessao_count=Count('id'))
'parlamentar_id').annotate(
sessao_count=Count('id'))
total_ordemdia = PresencaOrdemDia.objects.filter( total_ordemdia = PresencaOrdemDia.objects.filter(**param0).distinct('sessao_plenaria__id').order_by('sessao_plenaria__id').count()
**param0).distinct('sessao_plenaria__id').order_by(
'sessao_plenaria__id').count()
total_sessao = context['object_list'].count() total_sessao = context['object_list'].count()
username = self.request.user.username 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 # Completa o dicionario as informacoes parlamentar/sessao/ordem
parlamentares_presencas = [] 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]) | 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__lte=_range[0], data_fim_mandato__isnull=True) |
Q(data_inicio_mandato__gte=_range[0], data_fim_mandato__lte=_range[1]) | 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])) Q(data_inicio_mandato__gte=_range[0], data_fim_mandato__lte=_range[1]))
m = m.last() m = m.last()
parlamentares_presencas.append({
'parlamentar': p, if not context['exibir_somente_titular'] and not context['exibir_somente_ativo']:
'titular': m.titular if m else False, parlamentar = {
'sessao_porc': 0, 'parlamentar': p,
'ordemdia_porc': 0 '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: try:
self.logger.debug( self.logger.debug(F'user={username}. Tentando obter presença do parlamentar (pk={p.id}).')
'user=' + username + '. Tentando obter presença do parlamentar (pk={}).'.format(p.id))
sessao_count = presenca_sessao.get(parlamentar_id=p.id)[1] sessao_count = presenca_sessao.get(parlamentar_id=p.id)[1]
except ObjectDoesNotExist as e: except ObjectDoesNotExist as e:
self.logger.error( self.logger.error(F'user={username}. Erro ao obter presença do parlamentar (pk={p.id}). Definido como 0. {str(e)}')
'user=' + username + '. Erro ao obter presença do parlamentar (pk={}). Definido como 0. '.format(p.id) + str(e))
sessao_count = 0 sessao_count = 0
try: try:
# Presenças de cada Ordem do Dia # Presenças de cada Ordem do Dia
self.logger.info( self.logger.info(F'user={username}. Tentando obter PresencaOrdemDia para o parlamentar pk={p.id}.')
'user=' + username + '. Tentando obter PresencaOrdemDia para o parlamentar pk={}.'.format(p.id))
ordemdia_count = presenca_ordem.get(parlamentar_id=p.id)[1] ordemdia_count = presenca_ordem.get(parlamentar_id=p.id)[1]
except ObjectDoesNotExist: except ObjectDoesNotExist:
self.logger.error('user=' + username + '. Erro ao obter PresencaOrdemDia para o parlamentar pk={}. ' self.logger.error(F'user={username}. Erro ao obter PresencaOrdemDia para o parlamentar pk={p.id}. Definido como 0.')
'Definido como 0.'.format(p.id))
ordemdia_count = 0 ordemdia_count = 0
parlamentares_presencas[i].update({ parlamentar.update({
'sessao_count': sessao_count, 'sessao_count': sessao_count,
'ordemdia_count': ordemdia_count 'ordemdia_count': ordemdia_count
}) })
if total_sessao != 0: if total_sessao != 0:
parlamentares_presencas[i].update( parlamentar.update({'sessao_porc': round(sessao_count * 100 / total_sessao, 2)})
{'sessao_porc': round(
sessao_count * 100 / total_sessao, 2)})
if total_ordemdia != 0: if total_ordemdia != 0:
parlamentares_presencas[i].update( parlamentar.update({'ordemdia_porc': round(ordemdia_count * 100 / total_ordemdia, 2)})
{'ordemdia_porc': round(
ordemdia_count * 100 / total_ordemdia, 2)}) parlamentares_presencas.append(parlamentar)
context['date_range'] = _range context['date_range'] = _range
context['total_ordemdia'] = total_ordemdia context['total_ordemdia'] = total_ordemdia
context['total_sessao'] = context['object_list'].count() context['total_sessao'] = context['object_list'].count()
context['parlamentares'] = parlamentares_presencas context['parlamentares'] = parlamentares_presencas
context['periodo'] = ( context['periodo'] = f"{self.request.GET['data_inicio_0']} - {self.request.GET['data_inicio_1']}"
self.request.GET['data_inicio_0'] +
' - ' + self.request.GET['data_inicio_1'])
context['sessao_legislativa'] = '' context['sessao_legislativa'] = ''
context['legislatura'] = '' context['legislatura'] = ''
context['exibir_ordem'] = self.request.GET.get('exibir_ordem_dia') == 'on' context['exibir_ordem'] = self.request.GET.get('exibir_ordem_dia') == 'on'

4
sapl/templates/base/RelatorioPresencaSessao_filter.html

@ -46,12 +46,12 @@
<tbody> <tbody>
{% for p in parlamentares %} {% for p in parlamentares %}
<tr> <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.titular %} Sim {% else %} Não {% endif %}</td>
<td>{% if p.parlamentar.ativo %} Sim {% else %} Não {% endif %}</td> <td>{% if p.parlamentar.ativo %} Sim {% else %} Não {% endif %}</td>
<td>{{p.sessao_count}}</td> <td>{{p.sessao_count}}</td>
<td>{{p.sessao_porc}}</td> <td>{{p.sessao_porc}}</td>
{% if exibir_ordem %} {% if exibir_ordem %}
<td>{{p.ordemdia_count}}</td> <td>{{p.ordemdia_count}}</td>
<td>{{p.ordemdia_porc}}</td> <td>{{p.ordemdia_porc}}</td>
{% endif %} {% endif %}

Loading…
Cancel
Save