From 2c01f30f86bfaf1ad0403bb6672a776b3128166b Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Mon, 21 Aug 2017 18:54:59 -0300 Subject: [PATCH] Fixes #1284 --- sapl/base/views.py | 42 +++++++++++++++- ...latorioMateriasPorAnoAutorTipo_filter.html | 48 +++++++++---------- 2 files changed, 64 insertions(+), 26 deletions(-) diff --git a/sapl/base/views.py b/sapl/base/views.py index b2ce6ad50..1fc24b783 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,41 @@ 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: + if a['autor'] not in visitados: + if curr: + relatorio.append(curr) + curr = {} + curr['materia'] = [] + curr['total'] = 0 + visitados.add(a['autor']) + curr['autor'] = autores[a['autor']] + curr['materia'].append((a['materia__tipo__descricao'], a['total'])) + curr['total'] += a['total'] + relatorio.append(curr) + + return relatorio + + def get_filterset_kwargs(self, filterset_class): super(RelatorioMateriasPorAnoAutorTipoView, self).get_filterset_kwargs(filterset_class) @@ -368,6 +404,10 @@ class RelatorioMateriasPorAnoAutorTipoView(FilterView): qr = self.request.GET.copy() context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' + ano = int(self.request.GET['ano']) + + context['relatorio'] = self.get_materias_autor_ano(ano) + 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 %}