diff --git a/sapl/comissoes/forms.py b/sapl/comissoes/forms.py index 03f40f517..e395fdf90 100644 --- a/sapl/comissoes/forms.py +++ b/sapl/comissoes/forms.py @@ -1,7 +1,9 @@ +import django_filters import logging +from crispy_forms.layout import Fieldset, Layout + from django import forms -from sapl.settings import MAX_DOC_UPLOAD_SIZE from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError from django.db import transaction @@ -11,10 +13,12 @@ from django.utils.translation import ugettext_lazy as _ from sapl.base.models import Autor, TipoAutor from sapl.comissoes.models import (Comissao, Composicao, DocumentoAcessorio, - Participacao, Reuniao, Periodo) -from sapl.materia.models import PautaReuniao + Participacao, Periodo, Reuniao) +from sapl.crispy_layout_mixin import form_actions, SaplFormHelper, to_row +from sapl.materia.models import MateriaEmTramitacao, PautaReuniao from sapl.parlamentares.models import Legislatura, Mandato, Parlamentar -from sapl.utils import FileFieldCheckMixin +from sapl.settings import MAX_DOC_UPLOAD_SIZE +from sapl.utils import FileFieldCheckMixin, FilterOverridesMetaMixin class ComposicaoForm(forms.ModelForm): @@ -416,6 +420,32 @@ class ReuniaoForm(ModelForm): return self.cleaned_data +class PautaReuniaoFilterSet(django_filters.FilterSet): + + class Meta(FilterOverridesMetaMixin): + model = MateriaEmTramitacao + fields = ['materia__tipo', 'materia__ano', 'materia__numero', 'materia__data_apresentacao'] + + def __init__(self, *args, **kwargs): + super(PautaReuniaoFilterSet, self).__init__(*args, **kwargs) + + self.filters['materia__tipo'].label = "Tipo da Matéria" + self.filters['materia__ano'].label = "Ano da Matéria" + self.filters['materia__data_apresentacao'].label = "Data (Inicial - Final)" + + row1 = to_row([('materia__numero', 4), ('materia__tipo', 4), ('materia__ano', 4)]) + row2 = to_row([('materia__data_apresentacao', 12)]) + + self.form.helper = SaplFormHelper() + self.form.helper.form_method = "GET" + self.form.helper.layout = Layout( + Fieldset( + _("Pesquisa de Matérias"), row1, row2, + form_actions(label="Pesquisar") + ) + ) + + class PautaReuniaoForm(forms.ModelForm): class Meta: diff --git a/sapl/comissoes/views.py b/sapl/comissoes/views.py index 35d066d3c..4d37d735a 100644 --- a/sapl/comissoes/views.py +++ b/sapl/comissoes/views.py @@ -12,18 +12,22 @@ from django.views.generic.detail import DetailView from django.views.generic.edit import FormMixin, UpdateView from django.utils.translation import ugettext_lazy as _ +from django_filters.views import FilterView + from sapl.base.models import AppConfig as AppsAppConfig from sapl.comissoes.apps import AppConfig from sapl.comissoes.forms import (ComissaoForm, ComposicaoForm, DocumentoAcessorioCreateForm, DocumentoAcessorioEditForm, ParticipacaoCreateForm, ParticipacaoEditForm, - PautaReuniaoForm, PeriodoForm, ReuniaoForm) + PautaReuniaoForm, PeriodoForm, ReuniaoForm, + PautaReuniaoFilterSet) from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux, MasterDetailCrud, PermissionRequiredForAppCrudMixin) from sapl.materia.models import (MateriaLegislativa, Tramitacao, PautaReuniao, MateriaEmTramitacao) +from sapl.utils import show_results_filter_set from .models import (CargoComissao, Comissao, Composicao, DocumentoAcessorio, Participacao, Periodo, Reuniao, TipoComissao) @@ -218,7 +222,7 @@ class ReuniaoCrud(MasterDetailCrud): context['mats'] = MateriaLegislativa.objects.filter( pk__in=materias_pk - ).order_by('tipo', '-ano', '-numero') + ).order_by('tipo', '-ano', 'numero') context['num_mats'] = len(context['mats']) context['reuniao_pk'] = self.kwargs['pk'] @@ -296,8 +300,8 @@ class RemovePautaView(PermissionRequiredMixin, CreateView): context['materias'] = MateriaLegislativa.objects.filter( pk__in=materias_pk - ).order_by('tipo', '-ano', '-numero') - context['num_materias'] = len(context['materias']) + ).order_by('tipo', '-ano', 'numero') + context['numero_materias'] = len(context['materias']) return context @@ -319,9 +323,8 @@ class RemovePautaView(PermissionRequiredMixin, CreateView): return HttpResponseRedirect(success_url) -class AdicionaPautaView(PermissionRequiredMixin, CreateView): - model = PautaReuniao - form_class = PautaReuniaoForm +class AdicionaPautaView(PermissionRequiredMixin, FilterView): + filterset_class = PautaReuniaoFilterSet template_name = 'comissoes/pauta.html' permission_required = ('comissoes.add_reuniao', ) @@ -336,12 +339,19 @@ class AdicionaPautaView(PermissionRequiredMixin, CreateView): context['object'] = Reuniao.objects.get(pk=self.kwargs['pk']) context['root_pk'] = context['object'].comissao.pk - materias_comissao = lista_materias_comissao(context['object'].comissao.pk) - materias_pauta = PautaReuniao.objects.filter(reuniao=context['object']) + qr = self.request.GET.copy() + materias_pauta = PautaReuniao.objects.filter(reuniao=context['object']) nao_listar = [mp.materia.pk for mp in materias_pauta] - context['materias'] = materias_comissao.exclude(pk__in=nao_listar) - context['num_materias'] = len(context['materias']) + + context['object_list'] = context['object_list'].filter( + tramitacao__unidade_tramitacao_destino__comissao=context['root_pk'] + ).exclude(materia__pk__in=nao_listar).order_by( + "materia__tipo", "-materia__ano", "materia__numero" + ) + + context['numero_resultados'] = len(context['object_list']) + context['show_results'] = show_results_filter_set(qr) return context diff --git a/sapl/templates/comissoes/pauta.html b/sapl/templates/comissoes/pauta.html index 757c4cf86..63214ff60 100644 --- a/sapl/templates/comissoes/pauta.html +++ b/sapl/templates/comissoes/pauta.html @@ -5,64 +5,109 @@ {% block title %}
Total de Registros: {{num_mats}}
-| Matéria | -
|---|
| - {{mat}} - | -
Total de Registros: {{ num_mats }}
+| Matéria |
|---|
| {{mat}} |
Total de registros: {{num_docs}}
-| Documento Acessório | -
|---|
| - {{ doc.nome }} - | -
Total de registros: {{ num_docs }}
+| Documento Acessório |
|---|
| {{ doc.nome }} |