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(
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='')
class Meta(FilterOverridesMetaMixin):
model = NormaJuridica
fields = ['orgao', 'tipo', 'numero', 'ano', 'data', 'data_vigencia',
'data_publicacao', 'ementa', 'assuntos']
fields = ['orgao', 'tipo', 'numero', 'ano', 'data',
'data_vigencia', 'data_publicacao', 'ementa', 'assuntos',
'autorianorma__autor', 'autorianorma__primeiro_autor']
def __init__(self, *args, **kwargs):
super(NormaFilterSet, self).__init__(*args, **kwargs)
@ -112,6 +116,11 @@ class NormaFilterSet(django_filters.FilterSet):
return queryset.filter(q)
def filter_autoria(self, queryset, name, value):
return queryset.filter(**{
name: value,
})
class NormaJuridicaForm(FileFieldCheckMixin, ModelForm):

5
sapl/parlamentares/urls.py

@ -6,7 +6,7 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud,
FiliacaoCrud, FrenteCrud, FrenteList,
LegislaturaCrud, MandatoCrud,
MesaDiretoraView, NivelInstrucaoCrud,
ParlamentarCrud, ParlamentarMateriasView,
ParlamentarCrud, ParlamentarMateriasView, ParlamentarNormasView,
ParticipacaoParlamentarCrud, PartidoCrud,
ProposicaoParlamentarCrud,
RelatoriaParlamentarCrud,
@ -45,6 +45,9 @@ urlpatterns = [
url(r'^parlamentar/(?P<pk>\d+)/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/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,
MasterDetailCrud, make_pagination)
from sapl.materia.models import Autoria, Proposicao, Relatoria
from sapl.norma.models import AutoriaNorma, NormaJuridica
from sapl.parlamentares.apps import AppConfig
from sapl.rules import SAPL_GROUP_VOTANTE
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):
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
- title: {% trans 'Matérias' %}
url: parlamentar_materias
- title: {% trans 'Normas' %}
url: parlamentar_normas
- title: {% trans 'Filiações Partidárias' %}
url: filiacao_list
- title: {% trans 'Dependentes' %}

Loading…
Cancel
Save