Browse Source

Adiciona tab Norma na pág de Parlamentar

Fixes #3498
pull/3545/head
Edward Ribeiro 3 years ago
parent
commit
b951d60296
  1. 13
      sapl/norma/forms.py
  2. 5
      sapl/parlamentares/urls.py
  3. 75
      sapl/parlamentares/views.py
  4. 71
      sapl/templates/norma/normas.html
  5. 2
      sapl/templates/parlamentares/subnav.yaml

13
sapl/norma/forms.py

@ -80,12 +80,16 @@ class NormaFilterSet(django_filters.FilterSet):
assuntos = django_filters.ModelChoiceFilter( assuntos = django_filters.ModelChoiceFilter(
queryset=AssuntoNorma.objects.all()) queryset=AssuntoNorma.objects.all())
autorianorma__autor = django_filters.CharFilter(method='filter_autoria')
autorianorma__primeiro_autor = django_filters.CharFilter(method='filter_autoria')
o = NormaPesquisaOrderingFilter(help_text='') o = NormaPesquisaOrderingFilter(help_text='')
class Meta(FilterOverridesMetaMixin): class Meta(FilterOverridesMetaMixin):
model = NormaJuridica model = NormaJuridica
fields = ['orgao', 'tipo', 'numero', 'ano', 'data', 'data_vigencia', fields = ['orgao', 'tipo', 'numero', 'ano', 'data',
'data_publicacao', 'ementa', 'assuntos'] 'data_vigencia', 'data_publicacao', 'ementa', 'assuntos',
'autorianorma__autor', 'autorianorma__primeiro_autor']
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(NormaFilterSet, self).__init__(*args, **kwargs) super(NormaFilterSet, self).__init__(*args, **kwargs)
@ -112,6 +116,11 @@ class NormaFilterSet(django_filters.FilterSet):
return queryset.filter(q) return queryset.filter(q)
def filter_autoria(self, queryset, name, value):
return queryset.filter(**{
name: value,
})
class NormaJuridicaForm(FileFieldCheckMixin, ModelForm): class NormaJuridicaForm(FileFieldCheckMixin, ModelForm):

5
sapl/parlamentares/urls.py

@ -6,7 +6,7 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud,
FiliacaoCrud, FrenteCrud, FrenteList, FiliacaoCrud, FrenteCrud, FrenteList,
LegislaturaCrud, MandatoCrud, LegislaturaCrud, MandatoCrud,
MesaDiretoraView, NivelInstrucaoCrud, MesaDiretoraView, NivelInstrucaoCrud,
ParlamentarCrud, ParlamentarMateriasView, ParlamentarCrud, ParlamentarMateriasView, ParlamentarNormasView,
ParticipacaoParlamentarCrud, PartidoCrud, ParticipacaoParlamentarCrud, PartidoCrud,
ProposicaoParlamentarCrud, ProposicaoParlamentarCrud,
RelatoriaParlamentarCrud, RelatoriaParlamentarCrud,
@ -45,6 +45,9 @@ urlpatterns = [
url(r'^parlamentar/(?P<pk>\d+)/materias$', url(r'^parlamentar/(?P<pk>\d+)/materias$',
ParlamentarMateriasView.as_view(), name='parlamentar_materias'), ParlamentarMateriasView.as_view(), name='parlamentar_materias'),
url(r'^parlamentar/(?P<pk>\d+)/normas$',
ParlamentarNormasView.as_view(), name='parlamentar_normas'),
url(r'^parlamentar/(?P<pk>\d+)/frentes/$', get_parlamentar_frentes, name='parlamentar_frentes'), url(r'^parlamentar/(?P<pk>\d+)/frentes/$', get_parlamentar_frentes, name='parlamentar_frentes'),
url(r'^parlamentar/vincular-parlamentar/$', url(r'^parlamentar/vincular-parlamentar/$',

75
sapl/parlamentares/views.py

@ -30,6 +30,7 @@ from sapl.crud.base import (RP_CHANGE, RP_DETAIL, RP_LIST, Crud, CrudAux,
CrudBaseForListAndDetailExternalAppView, CrudBaseForListAndDetailExternalAppView,
MasterDetailCrud, make_pagination) MasterDetailCrud, make_pagination)
from sapl.materia.models import Autoria, Proposicao, Relatoria from sapl.materia.models import Autoria, Proposicao, Relatoria
from sapl.norma.models import AutoriaNorma, NormaJuridica
from sapl.parlamentares.apps import AppConfig from sapl.parlamentares.apps import AppConfig
from sapl.rules import SAPL_GROUP_VOTANTE from sapl.rules import SAPL_GROUP_VOTANTE
from sapl.utils import (parlamentares_ativos, show_results_filter_set) from sapl.utils import (parlamentares_ativos, show_results_filter_set)
@ -890,6 +891,80 @@ class ParlamentarMateriasView(FormView):
}) })
class ParlamentarNormasView(FormView):
template_name = "norma/normas.html"
success_url = reverse_lazy('sapl.parlamentares:parlamentar_normas')
logger = logging.getLogger(__name__)
def get_autoria(self, resultset):
autoria = {}
total_autoria = 0
for i in resultset:
row = autoria.get(i['norma__ano'], [])
columns = (i['norma__tipo__pk'],
i['norma__tipo__sigla'],
i['norma__tipo__descricao'],
int(i['total']))
row.append(columns)
autoria[i['norma__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']
username = request.user.username
try:
self.logger.debug(
"user=" + username + ". Tentando obter Autor (object_id={}).".format(parlamentar_pk))
autor = Autor.objects.get(
content_type=ContentType.objects.get_for_model(Parlamentar),
object_id=parlamentar_pk)
except ObjectDoesNotExist:
mensagem = _(
'Este Parlamentar não está associado como autor de matéria.'.format(parlamentar_pk))
self.logger.error(
"user=" + username + ". Este Parlamentar (pk={}) não é Autor de matéria.".format(parlamentar_pk))
messages.add_message(request, messages.ERROR, mensagem)
return HttpResponseRedirect(
reverse(
'sapl.parlamentares:parlamentar_detail',
kwargs={'pk': parlamentar_pk}))
autoria = AutoriaNorma.objects.filter(
autor=autor, primeiro_autor=True).values(
'norma__ano',
'norma__tipo__pk',
'norma__tipo__sigla',
'norma__tipo__descricao').annotate(
total=Count('norma__tipo__pk')).order_by(
'-norma__ano', 'norma__tipo')
coautoria = AutoriaNorma.objects.filter(
autor=autor, primeiro_autor=False).values(
'norma__ano',
'norma__tipo__pk',
'norma__tipo__sigla',
'norma__tipo__descricao').annotate(
total=Count('norma__tipo__pk')).order_by(
'-norma__ano', 'norma__tipo')
autor_list = self.get_autoria(autoria)
coautor_list = self.get_autoria(coautoria)
parlamentar_pk = autor.autor_related.pk
nome_parlamentar = autor.autor_related.nome_parlamentar
return self.render_to_response({'autor_pk': autor.pk,
'root_pk': parlamentar_pk,
'autoria': autor_list,
'coautoria': coautor_list,
'nome_parlamentar': nome_parlamentar
})
def get_data_filicao(parlamentar): def get_data_filicao(parlamentar):
return parlamentar.filiacao_set.order_by('-data').first().data.strftime('%d/%m/%Y') return parlamentar.filiacao_set.order_by('-data').first().data.strftime('%d/%m/%Y')

71
sapl/templates/norma/normas.html

@ -0,0 +1,71 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load common_tags %}
{% load static %}
{% block actions %}{% endblock %}
{% block detail_content %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/ancora.css'%}">
</head>
<div class="clearfix">
<h1 class="page-header">
Normas <small>({{nome_parlamentar}})</small>
</h1>
</div>
<div class="ancora">
<p class="titulo-conteudo">Conteúdo</p>
<ol>
<li><a href="#primeiro-autor">Primeiro Autor</a></li>
<li><a href="#co-autor">Co-Autor</a></li>
</ol>
</div>
<h2 id="primeiro-autor" style="text-align: center">Primeiro Autor</h2>
<br/>
<table class="table table-striped table-bordered">
{% for autoria in autoria.0 %}
<thead class="thead-default"><tr><td><h3>Ano: {{ autoria.0 }}</h3></td></tr></thead>
{% for normas in autoria.1 %}
<tr>
<td>{{ normas.1 }}&nbsp;</td>
<td>
<a href="{% url 'sapl.norma:norma_pesquisa'%}?tipo={{normas.0}}&ano={{autoria.0}}&autorianorma__autor={{autor_pk}}&autorianorma__primeiro_autor=True">
{{ normas.2}}
</a>
</td>
<td>&nbsp;{{ normas.3}}</td>
</tr>
{% endfor %}
{%endfor %}
</table>
<h2>Total: {{ autoria.1 }}</h2><br/>
<h2 id="co-autor" style="text-align: center">Co-Autor</h2>
<br/>
<table class="table table-striped table-bordered">
{% for coautoria in coautoria.0 %}
<thead class="thead-default"><tr><td><h3>Ano: {{ coautoria.0 }}</h3></td></tr></thead>
{% for normas in coautoria.1 %}
<tr>
<td>{{ normas.1 }}&nbsp;</td>
<td>
<a href="{% url 'sapl.norma:norma_pesquisa'%}?tipo={{normas.0}}&ano={{coautoria.0}}&autorianorma__autor={{autor_pk}}&autorianorma__primeiro_autor=False">
{{ normas.2}}
</a>
</td>
<td>&nbsp;{{ normas.3}}</td>
</tr>
{% endfor %}
{%endfor %}
</table>
<h2>Total: {{ coautoria.1 }}</h2><br/>
{% endblock detail_content %}

2
sapl/templates/parlamentares/subnav.yaml

@ -5,6 +5,8 @@
url: mandato_list url: mandato_list
- title: {% trans 'Matérias' %} - title: {% trans 'Matérias' %}
url: parlamentar_materias url: parlamentar_materias
- title: {% trans 'Normas' %}
url: parlamentar_normas
- title: {% trans 'Filiações Partidárias' %} - title: {% trans 'Filiações Partidárias' %}
url: filiacao_list url: filiacao_list
- title: {% trans 'Dependentes' %} - title: {% trans 'Dependentes' %}

Loading…
Cancel
Save