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

16
sapl/templates/base/RelatorioPresencaSessao_filter.html

@ -19,11 +19,11 @@
</div> </div>
<br /><br /><br /><br /> <br /><br /><br /><br />
<b>PERÍODO: {{periodo}}</b><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"> <table class="table table-bordered table-hover presenca_table">
<thead class="thead-default" align="center"> <thead class="thead-default" align="center">
<tr class="active"> <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">Sessão</th>
<th colspan="2">Ordem do Dia</th> <th colspan="2">Ordem do Dia</th>
</tr> </tr>
@ -35,13 +35,13 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for pid, p in parlamentares.items %} {% for p in parlamentares %}
<tr> <tr>
<td><b>{{p.nome}}</b> | {{p.partido}}</td> <td><b>{{p}}</b> / {{p.filiacao_set.first.partido.sigla|default:"Sem Partido"}}</td>
<td>{{p.qtde_sessao}}</td> <td>{{p.sessao_count}}</td>
<td>{{p.porc_sessao}}</td> <td>{{p.sessao_porc}}</td>
<td>{{p.qtde_ordem}}</td> <td>{{p.ordemdia_count}}</td>
<td>{{p.porc_ordem}}</td> <td>{{p.ordemdia_porc}}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>

Loading…
Cancel
Save