Browse Source

Adiciona tela de relatório de matéria por ano, autor e tipo

pull/550/head
Eduardo Edson Batista Cordeiro Alves 8 years ago
parent
commit
1af3b794ab
  1. 29
      sapl/base/forms.py
  2. 7
      sapl/base/urls.py
  3. 36
      sapl/base/views.py
  4. 60
      sapl/templates/base/RelatorioMateriasPorAnoAutorTipo_filter.html
  5. 2
      sapl/templates/base/relatorios_list.html

29
sapl/base/forms.py

@ -11,7 +11,8 @@ from django.utils.translation import ugettext_lazy as _
from sapl.crispy_layout_mixin import form_actions, to_row from sapl.crispy_layout_mixin import form_actions, to_row
from sapl.materia.models import MateriaLegislativa from sapl.materia.models import MateriaLegislativa
from sapl.settings import MAX_IMAGE_UPLOAD_SIZE from sapl.settings import MAX_IMAGE_UPLOAD_SIZE
from sapl.utils import ImageThumbnailFileInput, autor_label, autor_modal from sapl.utils import (RANGE_ANOS, ImageThumbnailFileInput, autor_label,
autor_modal)
from .models import CasaLegislativa from .models import CasaLegislativa
@ -36,6 +37,32 @@ class RangeWidgetOverride(forms.MultiWidget):
return ''.join(rendered_widgets) return ''.join(rendered_widgets)
class RelatorioMateriasPorAnoAutorTipoFilterSet(django_filters.FilterSet):
ano = django_filters.ChoiceFilter(required=True,
label=u'Ano da Matéria',
choices=RANGE_ANOS)
class Meta:
model = MateriaLegislativa
fields = ['ano']
def __init__(self, *args, **kwargs):
super(RelatorioMateriasPorAnoAutorTipoFilterSet, self).__init__(
*args, **kwargs)
row1 = to_row(
[('ano', 12)])
self.form.helper = FormHelper()
self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout(
Fieldset(_('Pesquisar'),
row1,
form_actions(save_label='Pesquisar'))
)
class RelatorioMateriasPorAutorFilterSet(django_filters.FilterSet): class RelatorioMateriasPorAutorFilterSet(django_filters.FilterSet):
filter_overrides = {models.DateField: { filter_overrides = {models.DateField: {

7
sapl/base/urls.py

@ -4,7 +4,9 @@ from django.views.generic.base import TemplateView
from .apps import AppConfig from .apps import AppConfig
from .forms import LoginForm from .forms import LoginForm
from .views import CasaLegislativaCrud, HelpView, RelatorioMateriasPorAutorView from .views import (CasaLegislativaCrud, HelpView,
RelatorioMateriasPorAnoAutorTipoView,
RelatorioMateriasPorAutorView)
app_name = AppConfig.name app_name = AppConfig.name
@ -26,4 +28,7 @@ urlpatterns = [
url(r'^relatorio/materia-por-autor$', url(r'^relatorio/materia-por-autor$',
RelatorioMateriasPorAutorView.as_view(), name='materia_por_autor'), RelatorioMateriasPorAutorView.as_view(), name='materia_por_autor'),
url(r'^relatorio/materia-por-ano-autor-tipo$',
RelatorioMateriasPorAnoAutorTipoView.as_view(),
name='materia_por_ano_autor_tipo'),
] ]

36
sapl/base/views.py

@ -10,7 +10,9 @@ from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView,
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.utils import permissao_tb_aux from sapl.utils import permissao_tb_aux
from .forms import CasaLegislativaForm, RelatorioMateriasPorAutorFilterSet from .forms import (CasaLegislativaForm,
RelatorioMateriasPorAnoAutorTipoFilterSet,
RelatorioMateriasPorAutorFilterSet)
from .models import CasaLegislativa from .models import CasaLegislativa
@ -18,6 +20,38 @@ def get_casalegislativa():
return CasaLegislativa.objects.first() return CasaLegislativa.objects.first()
class RelatorioMateriasPorAnoAutorTipoView(FilterView):
model = MateriaLegislativa
filterset_class = RelatorioMateriasPorAnoAutorTipoFilterSet
template_name = 'base/RelatorioMateriasPorAnoAutorTipo_filter.html'
def get_filterset_kwargs(self, filterset_class):
super(RelatorioMateriasPorAnoAutorTipoView,
self).get_filterset_kwargs(filterset_class)
kwargs = {'data': self.request.GET or None}
return kwargs
def get_context_data(self, **kwargs):
context = super(RelatorioMateriasPorAnoAutorTipoView,
self).get_context_data(**kwargs)
context['title'] = _('Matérias por Ano, Autor e Tipo')
qtdes = {}
for tipo in TipoMateriaLegislativa.objects.all():
qs = kwargs['object_list']
qtde = len(qs.filter(tipo_id=tipo.id))
if qtde > 0:
qtdes[tipo] = qtde
context['qtdes'] = qtdes
qr = self.request.GET.copy()
context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else ''
return context
class RelatorioMateriasPorAutorView(FilterView): class RelatorioMateriasPorAutorView(FilterView):
model = MateriaLegislativa model = MateriaLegislativa
filterset_class = RelatorioMateriasPorAutorFilterSet filterset_class = RelatorioMateriasPorAutorFilterSet

60
sapl/templates/base/RelatorioMateriasPorAnoAutorTipo_filter.html

@ -0,0 +1,60 @@
{% extends "crud/list.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block base_content %}
{% if not filter_url %}
{% crispy filter.form %}
{% endif %}
{% if filter_url %}
<div class="actions btn-group pull-right" role="group">
<a href="{% url 'sapl.base:materia_por_ano_autor_tipo' %}" class="btn btn-default">{% trans 'Fazer nova pesquisa' %}</a>
</div>
<br /><br /><br /><br />
<table class="table table-bordered table-hover">
<thead class="thead-default" >
<tr class="active"><th colspan="2" class="text-center">QUADRO GERAL</th></tr>
<tr class="active">
<th>Tipo Matéria</th>
<th>Quantidade</th>
</tr>
</thead>
<tbody>
{% for key, value in qtdes.items %}
<tr>
<td>{{key.sigla}} - {{key}}</td>
<td>{{value}}</td>
</tr>
{% endfor %}
</tbody>
</table>
<table class="table table-bordered table-hover">
<thead class="thead-default" >
<tr class="active">
<th>Matéria</th>
<th>Ementa</th>
<th>Autor(es)</th>
</tr>
</thead>
<tbody>
{% for materia in object_list %}
<tr>
<td><a href="{% url 'sapl.materia:materialegislativa_detail' materia.pk %}">
{{materia.tipo.descricao}} - {{materia.tipo.sigla}} {{materia.numero}}/{{materia.ano}}
</a></td>
<td>{{materia.ementa}}</td>
<td>
{% for autor in materia.autoria_set.all %}
{{autor.autor}}<br />
{% endfor %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
{% endblock base_content %}

2
sapl/templates/base/relatorios_list.html

@ -21,7 +21,7 @@
<td> Listagem e totalização de matérias por autor, com filtros para tipo e período. </td> <td> Listagem e totalização de matérias por autor, com filtros para tipo e período. </td>
</tr> </tr>
<tr> <tr>
<td><a href="">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> <tr>

Loading…
Cancel
Save