diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 1c9dea1d4..d2368f96c 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -490,6 +490,10 @@ class MateriaLegislativaFilterSet(django_filters.FilterSet): autoria__autor = django_filters.CharFilter(widget=forms.HiddenInput()) + autoria__primeiro_autor = django_filters.BooleanFilter(required=False, + label=u'Primeiro Autor', + widget=forms.HiddenInput()) + ementa = django_filters.CharFilter(lookup_expr='icontains') em_tramitacao = django_filters.ChoiceFilter(required=False, @@ -516,6 +520,7 @@ class MateriaLegislativaFilterSet(django_filters.FilterSet): 'data_apresentacao', 'data_publicacao', 'autoria__autor__tipo', + 'autoria__primeiro_autor', # FIXME 'autoria__autor__partido', 'relatoria__parlamentar_id', 'local_origem_externa', @@ -545,6 +550,7 @@ class MateriaLegislativaFilterSet(django_filters.FilterSet): ('data_publicacao', 6)]) row4 = to_row( [('autoria__autor', 0), + ('autoria__primeiro_autor', 0), (Button('pesquisar', 'Pesquisar Autor', css_class='btn btn-primary btn-sm'), 2), diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index 870090ad4..68ddcc16b 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -6,6 +6,7 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, LegislaturaCrud, MandatoCrud, MesaDiretoraView, NivelInstrucaoCrud, ParlamentarCrud, + ParlamentarMateriasView, ParticipacaoParlamentarCrud, PartidoCrud, ProposicaoParlamentarCrud, RelatoriaParlamentarCrud, @@ -31,6 +32,9 @@ urlpatterns = [ VotanteView.get_urls() )), + url(r'^parlamentar/(?P\d+)/materias$', + ParlamentarMateriasView.as_view(), name='parlamentar_materias'), + url(r'^sistema/coligacao/', include(ColigacaoCrud.get_urls() + ComposicaoColigacaoCrud.get_urls())), diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index 5182474ba..b57e5af0d 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -25,6 +25,11 @@ from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa, NivelInstrucao, Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar, TipoAfastamento, TipoDependente, Votante) +from sapl.base.models import Autor +from sapl.materia.models import Autoria +from django.contrib.contenttypes.models import ContentType +from django.db.models.aggregates import Count + CargoMesaCrud = CrudAux.build(CargoMesa, 'cargo_mesa') PartidoCrud = CrudAux.build(Partido, 'partidos') SessaoLegislativaCrud = CrudAux.build(SessaoLegislativa, 'sessao_legislativa') @@ -459,6 +464,63 @@ class ParlamentarCrud(Crud): return context +class ParlamentarMateriasView(FormView): + template_name = "parlamentares/materias.html" + success_url = reverse_lazy('sapl.parlamentares:parlamentar_materia') + + def get_autoria(self, resultset): + autoria = {} + total_autoria = 0 + + for i in resultset: + row = autoria.get(i['materia__ano'], []) + columns = (i['materia__tipo__pk'], + i['materia__tipo__sigla'], + i['materia__tipo__descricao'], + int(i['total'])) + row.append(columns) + autoria[i['materia__ano']] = row + total_autoria += columns[3] + autoria = sorted(autoria.items(), reverse=True) + return autoria, total_autoria + + @xframe_options_exempt + def get(self, request, *args, **kwargs): + parlamentar_pk = kwargs['pk'] + autor = Autor.objects.get( + content_type=ContentType.objects.get_for_model(Parlamentar), + object_id=parlamentar_pk) + + autoria = Autoria.objects.filter( + autor=autor, primeiro_autor=True).values( + 'materia__ano', + 'materia__tipo__pk', + 'materia__tipo__sigla', + 'materia__tipo__descricao').annotate( + total=Count('materia__tipo__pk')).order_by( + '-materia__ano', 'materia__tipo') + + coautoria = Autoria.objects.filter( + autor=autor, primeiro_autor=False).values( + 'materia__ano', + 'materia__tipo__pk', + 'materia__tipo__sigla', + 'materia__tipo__descricao').annotate( + total=Count('materia__tipo__pk')).order_by( + '-materia__ano', 'materia__tipo') + + autor_list = self.get_autoria(autoria) + coautor_list = self.get_autoria(coautoria) + + nome_parlamentar = autor.autor_related.nome_parlamentar + + return self.render_to_response({'autor_pk': autor.pk, + 'autoria': autor_list, + 'coautoria': coautor_list, + 'nome_parlamentar': nome_parlamentar + }) + + class MesaDiretoraView(FormView): template_name = 'parlamentares/composicaomesa_form.html' success_url = reverse_lazy('sapl.parlamentares:mesa_diretora') diff --git a/sapl/templates/parlamentares/materias.html b/sapl/templates/parlamentares/materias.html new file mode 100644 index 000000000..78444c11e --- /dev/null +++ b/sapl/templates/parlamentares/materias.html @@ -0,0 +1,52 @@ +{% extends "crud/detail.html" %} +{% load i18n %} +{% load common_tags %} + +{% block actions %}{% endblock %} + +{% block detail_content %} + +

{{nome_parlamentar}}


+

Primeiro Autor

+
+ +{% for autoria in autoria.0 %} + + {% for materias in autoria.1 %} + + + + + + {% endfor %} +{%endfor %} +

Ano: {{ autoria.0 }}

{{ materias.1 }}  + + {{ materias.2}} + +  {{ materias.3}}
+ +

Total: {{ autoria.1 }}


+ +

Co-Autor

+
+ +{% for coautoria in coautoria.0 %} + + {% for materias in coautoria.1 %} + + + + + + {% endfor %} +{%endfor %} + +

Total: {{ coautoria.1 }}


+ + +{% endblock detail_content %} diff --git a/sapl/templates/parlamentares/subnav.yaml b/sapl/templates/parlamentares/subnav.yaml index 603e357f3..07632e5ca 100644 --- a/sapl/templates/parlamentares/subnav.yaml +++ b/sapl/templates/parlamentares/subnav.yaml @@ -3,6 +3,8 @@ url: parlamentar_detail - title: {% trans 'Mandatos' %} url: mandato_list +- title: {% trans 'Matérias' %} + url: parlamentar_materias - title: {% trans 'Filiações Partidárias' %} url: filiacao_list - title: {% trans 'Dependentes' %}

Ano: {{ coautoria.0 }}

{{ materias.1 }}  + + {{ materias.2}} + +  {{ materias.3}}