diff --git a/sapl/base/views.py b/sapl/base/views.py index c3acdda65..f54cd2e84 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -1,3 +1,5 @@ +from itertools import chain + from django.contrib.auth.mixins import PermissionRequiredMixin from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect @@ -34,10 +36,11 @@ class RelatorioPresencaSessaoView(FilterView): parlamentares, total_sessao, total_ordem): - for p in parlamentares: - p.update({ - 'porc_sessao': round(p['qtde_sessao'] * 100 / total_sessao, 1), - 'porc_ordem': round(p['qtde_ordem'] * 100 / total_ordem, 1) + 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) }) return parlamentares @@ -45,51 +48,50 @@ class RelatorioPresencaSessaoView(FilterView): context = super(RelatorioPresencaSessaoView, 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: - if 'data_inicio_0' and 'data_inicio_1' in self.request.GET: - context['periodo'] = ( - self.request.GET['data_inicio_0'] + - ' - ' + self.request.GET['data_inicio_1']) - parlamentares = [] + 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 = 0 total_ordem = 0 - for p in Parlamentar.objects.filter(ativo=True): - parlamentar = {} - qtde_sessao = 0 - qtde_ordem = 0 - - for s in context['object_list']: - if SessaoPlenariaPresenca.objects.filter( - sessao_plenaria_id=s.id, - parlamentar_id=p.id).exists(): - qtde_sessao += 1 - total_sessao += 1 - if PresencaOrdemDia.objects.filter( - sessao_plenaria_id=s.id, - parlamentar_id=p.id).exists(): - qtde_ordem += 1 - total_ordem += 1 - - if qtde_sessao >= 1 or qtde_ordem >= 1: - parlamentar = { - 'nome': p.nome_parlamentar, + for i in q: + pid = i.parlamentar.id + if not pid in parlamentares: + parlamentares[pid] = { + 'nome': i.parlamentar.nome_parlamentar, 'partido': ( - p.filiacao_set.first().partido.sigla - if p.filiacao_set.first() else 'Sem Partido'), - 'qtde_sessao': qtde_sessao, - 'qtde_ordem': qtde_ordem - } - parlamentares.append(parlamentar) + 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 + total_sessao += 1 + elif isinstance(i, PresencaOrdemDia): + parlamentares[pid]['qtde_ordem'] += 1 + total_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'] + + ' - ' + self.request.GET['data_inicio_1']) + # ===================================================================== qr = self.request.GET.copy() context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' return context diff --git a/sapl/templates/base/RelatorioPresencaSessao_filter.html b/sapl/templates/base/RelatorioPresencaSessao_filter.html index 5d38671bd..71377846c 100644 --- a/sapl/templates/base/RelatorioPresencaSessao_filter.html +++ b/sapl/templates/base/RelatorioPresencaSessao_filter.html @@ -35,7 +35,7 @@ - {% for p in parlamentares %} + {% for pid, p in parlamentares.items %} {{p.nome}} | {{p.partido}} {{p.qtde_sessao}}