From dea929d8bca5cd9b45554201927ffca249d9b87b Mon Sep 17 00:00:00 2001 From: Edward Date: Mon, 21 Aug 2017 19:15:36 -0300 Subject: [PATCH] Fixes #1284 (#1416) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fixes #1284 * Conserta bug em pesquisa * Adiciona condição de prosseguimento --- sapl/base/views.py | 50 ++++++++++++++++++- ...latorioMateriasPorAnoAutorTipo_filter.html | 48 +++++++++--------- 2 files changed, 72 insertions(+), 26 deletions(-) diff --git a/sapl/base/views.py b/sapl/base/views.py index b2ce6ad50..9f53e957f 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -19,7 +19,8 @@ from haystack.views import SearchView from sapl.base.forms import AutorForm, AutorFormForAdmin, TipoAutorForm from sapl.base.models import Autor, TipoAutor from sapl.crud.base import CrudAux -from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa +from sapl.materia.models import (Autoria, MateriaLegislativa, + TipoMateriaLegislativa) from sapl.sessao.models import (PresencaOrdemDia, SessaoPlenaria, SessaoPlenariaPresenca) from sapl.utils import parlamentares_ativos, sapl_logger @@ -344,6 +345,47 @@ class RelatorioMateriasPorAnoAutorTipoView(FilterView): filterset_class = RelatorioMateriasPorAnoAutorTipoFilterSet template_name = 'base/RelatorioMateriasPorAnoAutorTipo_filter.html' + def get_materias_autor_ano(self, ano): + + autorias = Autoria.objects.filter(materia__ano=ano).values( + 'autor', + 'materia__tipo__sigla', + 'materia__tipo__descricao').annotate( + total=Count('materia__tipo')).order_by( + 'autor', + 'materia__tipo') + + autores_ids = set([i['autor'] for i in autorias]) + + autores = dict((a.id, a) for a in Autor.objects.filter( + id__in=autores_ids)) + + relatorio = [] + visitados = set() + curr = None + + for a in autorias: + # se mudou autor, salva atual, caso existente, e reinicia `curr` + if a['autor'] not in visitados: + if curr: + relatorio.append(curr) + + curr = {} + curr['autor'] = autores[a['autor']] + curr['materia'] = [] + curr['total'] = 0 + + visitados.add(a['autor']) + + # atualiza valores + curr['materia'].append((a['materia__tipo__descricao'], a['total'])) + curr['total'] += a['total'] + # adiciona o ultimo + relatorio.append(curr) + + return relatorio + + def get_filterset_kwargs(self, filterset_class): super(RelatorioMateriasPorAnoAutorTipoView, self).get_filterset_kwargs(filterset_class) @@ -368,6 +410,12 @@ class RelatorioMateriasPorAnoAutorTipoView(FilterView): qr = self.request.GET.copy() context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' + if 'ano' in self.request.GET and self.request.GET['ano']: + ano = int(self.request.GET['ano']) + context['relatorio'] = self.get_materias_autor_ano(ano) + else: + context['relatorio'] = [] + return context diff --git a/sapl/templates/base/RelatorioMateriasPorAnoAutorTipo_filter.html b/sapl/templates/base/RelatorioMateriasPorAnoAutorTipo_filter.html index 2498c08be..23ef5e275 100644 --- a/sapl/templates/base/RelatorioMateriasPorAnoAutorTipo_filter.html +++ b/sapl/templates/base/RelatorioMateriasPorAnoAutorTipo_filter.html @@ -13,6 +13,29 @@



+ {% for r in relatorio %} +

{{r.autor}}


+ + + + + + + + + {% for i in r.materia %} + + + + {% endfor %} + +
Natureza da ProposituraQuantidade
{{i.0}}{{i.1}}
+

Total: {{r.total}}


+
+
+ {% endfor %} +

+ @@ -30,31 +53,6 @@ {% endfor %}
QUADRO GERAL
- - - - - - - - - - - {% for materia in object_list %} - - - - - - {% endfor %} - -
MatériaEmentaAutor(es)
- {{materia.tipo.descricao}} - {{materia.tipo.sigla}} {{materia.numero}}/{{materia.ano}} - {{materia.ementa}} - {% for autor in materia.autoria_set.all %} - {{autor.autor}}
- {% endfor %} -
{% endif %} {% endblock base_content %}