Browse Source

Muda query do relatorio de presença

pull/568/head
Eduardo Edson Batista Cordeiro Alves 8 years ago
parent
commit
d137da1831
  1. 88
      sapl/base/views.py
  2. 16
      sapl/templates/base/RelatorioPresencaSessao_filter.html

88
sapl/base/views.py

@ -2,6 +2,7 @@ from itertools import chain
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.core.urlresolvers import reverse
from django.db.models import Count, Q
from django.http import HttpResponseRedirect
from django.utils.translation import ugettext_lazy as _
from django.views.generic.base import TemplateView
@ -35,13 +36,10 @@ class RelatorioPresencaSessaoView(FilterView):
def calcular_porcentagem_presenca(self,
parlamentares,
total_sessao,
total_ordem):
for p in parlamentares.items():
p[1].update({
'porc_sessao': round(
p[1]['qtde_sessao'] * 100 / total_sessao, 1),
'porc_ordem': round(p[1]['qtde_ordem'] * 100 / total_ordem, 1)
})
total_ordemdia):
for p in parlamentares:
p.sessao_porc = round(p.sessao_count * 100 / total_sessao, 1)
p.ordemdia_porc = round(p.ordemdia_count * 100 / total_ordemdia, 1)
return parlamentares
def get_context_data(self, **kwargs):
@ -49,53 +47,37 @@ class RelatorioPresencaSessaoView(FilterView):
self).get_context_data(**kwargs)
context['title'] = _('Presença dos parlamentares nas sessões')
# =====================================================================
# FIXME: Pensar em melhor forma de verificar se formulário está sendo
# submetido.
if 'salvar' in self.request.GET:
qs1 = SessaoPlenariaPresenca.objects.filter(
parlamentar__ativo=True,
sessao_plenaria_id__in=context['object_list'])
qs2 = PresencaOrdemDia.objects.filter(
parlamentar__ativo=True,
sessao_plenaria_id__in=context['object_list'])
q = list(chain(list(qs1)+list(qs2)))
parlamentares = {}
total_sessao = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id__in=context['object_list'])
total_sessao = len(total_sessao.order_by().values_list(
'sessao_plenaria_id', flat=True).distinct())
total_ordem = PresencaOrdemDia.objects.filter(
sessao_plenaria_id__in=context['object_list'])
total_ordem = len(total_ordem.order_by().values_list(
'sessao_plenaria_id', flat=True).distinct())
for i in q:
pid = i.parlamentar.id
if not pid in parlamentares:
parlamentares[pid] = {
'nome': i.parlamentar.nome_parlamentar,
'partido': (
i.parlamentar.filiacao_set.first().partido.sigla
if i.parlamentar.filiacao_set.first()
else 'Sem Partido'),
'qtde_ordem': 0,
'qtde_sessao': 0}
if isinstance(i, SessaoPlenariaPresenca):
parlamentares[pid]['qtde_sessao'] += 1
elif isinstance(i, PresencaOrdemDia):
parlamentares[pid]['qtde_ordem'] += 1
self.calcular_porcentagem_presenca(parlamentares,
total_sessao,
total_ordem)
sorted(parlamentares.items(), key=lambda x: x[1]['nome'])
context['total_ordem'] = total_ordem
context['total_sessao'] = total_sessao
context['parlamentares'] = parlamentares
where = context['object_list'].query.where
_range = where.children[0].rhs
sufixo = 'sessao_plenaria__data_inicio__range'
param0 = {'%s' % sufixo: _range}
param1 = {'presencaordemdia__%s' % sufixo: _range}
param2 = {'sessaoplenariapresenca__%s' % sufixo: _range}
pls = Parlamentar.objects.filter(
Q(**param1) & Q(**param2)).annotate(
sessao_count=Count(
'sessaoplenariapresenca__sessao_plenaria__data_inicio',
distinct=True),
ordemdia_count=Count(
'presencaordemdia__sessao_plenaria__data_inicio',
distinct=True),
sessao_porc=Count(0),
ordemdia_porc=Count(0))
total_ordemdia = OrdemDia.objects.order_by(
'sessao_plenaria').filter(**param0).distinct(
'sessao_plenaria').count()
self.calcular_porcentagem_presenca(pls,
context['object_list'].count(),
total_ordemdia)
context['total_ordemdia'] = total_ordemdia
context['total_sessao'] = context['object_list'].count()
context['parlamentares'] = pls
context['periodo'] = (self.request.GET['data_inicio_0'] +
' - ' + self.request.GET['data_inicio_1'])
# =====================================================================

16
sapl/templates/base/RelatorioPresencaSessao_filter.html

@ -19,11 +19,11 @@
</div>
<br /><br /><br /><br />
<b>PERÍODO: {{periodo}}</b><br />
<b>TOTAIS NO PERÍODO - SESSÕES: {{total_sessao}} - ORDENS DO DIA: {{total_ordem}}</b>
<b>TOTAIS NO PERÍODO - SESSÕES: {{total_sessao}} - ORDENS DO DIA: {{total_ordemdia}}</b>
<table class="table table-bordered table-hover presenca_table">
<thead class="thead-default" align="center">
<tr class="active">
<th rowspan="2">Nome Parlamentar | Partido</th>
<th rowspan="2">Nome Parlamentar / Partido</th>
<th colspan="2">Sessão</th>
<th colspan="2">Ordem do Dia</th>
</tr>
@ -35,13 +35,13 @@
</tr>
</thead>
<tbody>
{% for pid, p in parlamentares.items %}
{% for p in parlamentares %}
<tr>
<td><b>{{p.nome}}</b> | {{p.partido}}</td>
<td>{{p.qtde_sessao}}</td>
<td>{{p.porc_sessao}}</td>
<td>{{p.qtde_ordem}}</td>
<td>{{p.porc_ordem}}</td>
<td><b>{{p}}</b> / {{p.filiacao_set.first.partido.sigla|default:"Sem Partido"}}</td>
<td>{{p.sessao_count}}</td>
<td>{{p.sessao_porc}}</td>
<td>{{p.ordemdia_count}}</td>
<td>{{p.ordemdia_porc}}</td>
</tr>
{% endfor %}
</tbody>

Loading…
Cancel
Save