Browse Source

Adiciona relatório de matéria por assunto/ano

pull/3359/head
eribeiro 4 years ago
parent
commit
4c17e9b416
  1. 5
      sapl/base/urls.py
  2. 30
      sapl/base/views.py
  3. 53
      sapl/templates/base/RelatorioMateriasAnoAssunto.html
  4. 4
      sapl/templates/base/relatorios_list.html

5
sapl/base/urls.py

@ -11,7 +11,7 @@ from django.views.generic.base import RedirectView, TemplateView
from sapl.base.views import (AutorCrud, ConfirmarEmailView, TipoAutorCrud, get_estatistica, DetailUsuarioView, from sapl.base.views import (AutorCrud, ConfirmarEmailView, TipoAutorCrud, get_estatistica, DetailUsuarioView,
PesquisarAutorView, RecuperarSenhaEmailView, RecuperarSenhaFinalizadoView, PesquisarAutorView, RecuperarSenhaEmailView, RecuperarSenhaFinalizadoView,
RecuperarSenhaConfirmaView, RecuperarSenhaCompletoView) RecuperarSenhaConfirmaView, RecuperarSenhaCompletoView, RelatorioMateriaAnoAssuntoView)
from sapl.settings import EMAIL_SEND_USER, MEDIA_URL, LOGOUT_REDIRECT_URL from sapl.settings import EMAIL_SEND_USER, MEDIA_URL, LOGOUT_REDIRECT_URL
from .apps import AppConfig from .apps import AppConfig
@ -86,6 +86,9 @@ urlpatterns = [
url(r'^sistema/relatorios/materia-por-tramitacao$', url(r'^sistema/relatorios/materia-por-tramitacao$',
RelatorioMateriasTramitacaoView.as_view(), RelatorioMateriasTramitacaoView.as_view(),
name='materia_por_tramitacao'), name='materia_por_tramitacao'),
url(r'^sistema/relatorios/materia-por-assunto$',
RelatorioMateriaAnoAssuntoView.as_view(),
name='materia_por_ano_assunto'),
url(r'^sistema/relatorios/historico-tramitacoes$', url(r'^sistema/relatorios/historico-tramitacoes$',
RelatorioHistoricoTramitacaoView.as_view(), RelatorioHistoricoTramitacaoView.as_view(),
name='historico_tramitacoes'), name='historico_tramitacoes'),

30
sapl/base/views.py

@ -15,7 +15,7 @@ from django.contrib.auth.views import (PasswordResetView, PasswordResetConfirmVi
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied, ValidationError from django.core.exceptions import ObjectDoesNotExist, PermissionDenied, ValidationError
from django.core.mail import send_mail from django.core.mail import send_mail
from django.db import connection from django.db import connection
from django.db.models import Count, Q, ProtectedError, Max from django.db.models import Count, Q, ProtectedError, Max, F
from django.http import Http404, HttpResponseRedirect, JsonResponse from django.http import Http404, HttpResponseRedirect, JsonResponse
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from django.template import TemplateDoesNotExist from django.template import TemplateDoesNotExist
@ -42,7 +42,7 @@ from sapl.comissoes.models import Comissao, Reuniao
from sapl.crud.base import CrudAux, make_pagination from sapl.crud.base import CrudAux, make_pagination
from sapl.materia.models import (Anexada, Autoria, DocumentoAcessorio, MateriaEmTramitacao, MateriaLegislativa, from sapl.materia.models import (Anexada, Autoria, DocumentoAcessorio, MateriaEmTramitacao, MateriaLegislativa,
Proposicao, StatusTramitacao, TipoDocumento, TipoMateriaLegislativa, UnidadeTramitacao, Proposicao, StatusTramitacao, TipoDocumento, TipoMateriaLegislativa, UnidadeTramitacao,
Tramitacao) MateriaAssunto, Tramitacao)
from sapl.norma.models import NormaJuridica, TipoNormaJuridica from sapl.norma.models import NormaJuridica, TipoNormaJuridica
from sapl.parlamentares.models import ( from sapl.parlamentares.models import (
Filiacao, Legislatura, Mandato, Parlamentar, SessaoLegislativa) Filiacao, Legislatura, Mandato, Parlamentar, SessaoLegislativa)
@ -1095,6 +1095,32 @@ class RelatorioMateriasPorAutorView(RelatorioMixin, FilterView):
return context return context
class RelatorioMateriaAnoAssuntoView(ListView):
template_name = 'base/RelatorioMateriasAnoAssunto.html'
def get_queryset(self):
return MateriaAssunto.objects.all().values(
'assunto_id',
assunto_materia=F('assunto__assunto'),
ano=F('materia__ano')).annotate(
total=Count('assunto_id')).order_by('-materia__ano', 'assunto_id')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = _('Matérias por Ano e Assunto')
mat = MateriaLegislativa.objects.exclude(id__in=
MateriaAssunto.objects.distinct(
'materia_id').values_list(
'materia_id',
flat=True
).order_by(
'materia_id'
)).values(
'ano').annotate(total=Count('ano')).order_by('-ano')
context.update({"materias_sem_assunto": mat})
return context
class RelatorioNormasPublicadasMesView(RelatorioMixin, FilterView): class RelatorioNormasPublicadasMesView(RelatorioMixin, FilterView):
model = NormaJuridica model = NormaJuridica
filterset_class = RelatorioNormasMesFilterSet filterset_class = RelatorioNormasMesFilterSet

53
sapl/templates/base/RelatorioMateriasAnoAssunto.html

@ -0,0 +1,53 @@
{% extends "crud/list.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block base_content %}
<fieldset>
<legend>Matérias por Ano e Assunto</legend>
{% if not object_list %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Ano</th>
<th>Assunto</th>
<th>Total</th>
</tr>
</thead>
<tbody>
{% for o in object_list %}
<tr>
<td><a href="{% url 'sapl.materia:pesquisar_materia' %}?ano={{o.ano}}&materiaassunto__assunto={{o.assunto_id}}">
{{o.ano}}
</a></td>
<td>{{o.assunto_materia}}</td>
<td>{{o.total}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
<br/>
<legend>Matérias sem Assunto</legend>
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Ano</th>
<th>Total</th>
</tr>
</thead>
<tbody>
{% for o in materias_sem_assunto %}
<tr>
<td><a href="{% url 'sapl.materia:pesquisar_materia' %}?ano={{o.ano}}">
{{o.ano}}
</a></td>
<td>{{o.total}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</fieldset>
{% include 'paginacao.html'%}
{% endblock %}

4
sapl/templates/base/relatorios_list.html

@ -24,6 +24,10 @@
<td><a href="{% url 'sapl.base:materia_por_ano_autor_tipo' %}">Matérias por Ano, Autor e Tipo</a></td> <td><a href="{% url 'sapl.base:materia_por_ano_autor_tipo' %}">Matérias por Ano, Autor e Tipo</a></td>
<td> Totalização anual de matérias agrupadas por autor e tipo. </td> <td> Totalização anual de matérias agrupadas por autor e tipo. </td>
</tr> </tr>
<tr>
<td><a href="{% url 'sapl.base:materia_por_ano_assunto' %}">Matérias por Ano, Assunto</a></td>
<td> Totalização de matérias agrupadas por ano e assunto. </td>
</tr>
<tr> <tr>
<td><a href="{% url 'sapl.base:presenca_sessao' %}">Presença nas sessões</a></td> <td><a href="{% url 'sapl.base:presenca_sessao' %}">Presença nas sessões</a></td>
<td>Presença dos parlamentares nas sessões plenárias.</td> <td>Presença dos parlamentares nas sessões plenárias.</td>

Loading…
Cancel
Save