diff --git a/sapl/base/forms.py b/sapl/base/forms.py index 37b7d2f3b..59ce5a57f 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -864,22 +864,25 @@ class RelatorioPresencaSessaoFilterSet(django_filters.FilterSet): class Meta(FilterOverridesMetaMixin): model = SessaoPlenaria - fields = ['data_inicio'] + fields = ['data_inicio', + 'sessao_legislativa', + 'legislatura'] def __init__(self, *args, **kwargs): super(RelatorioPresencaSessaoFilterSet, self).__init__( *args, **kwargs) self.filters['data_inicio'].label = 'Período (Inicial - Final)' - self.form.fields['data_inicio'].required = True row1 = to_row([('data_inicio', 12)]) + row2 = to_row([('legislatura', 6), + ('sessao_legislativa', 6)]) self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_('Presença dos parlamentares nas sessões plenárias'), - row1, form_actions(label='Pesquisar')) + row1, row2, form_actions(label='Pesquisar')) ) @property diff --git a/sapl/base/views.py b/sapl/base/views.py index c56b5e880..bc4f9bcd0 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -38,7 +38,7 @@ from sapl.crud.base import CrudAux, make_pagination from sapl.materia.models import (Autoria, MateriaLegislativa, Proposicao, TipoMateriaLegislativa, StatusTramitacao, UnidadeTramitacao) from sapl.norma.models import (NormaJuridica, NormaEstatisticas) -from sapl.parlamentares.models import Parlamentar, Legislatura, Mandato, Filiacao +from sapl.parlamentares.models import Parlamentar, Legislatura, Mandato, Filiacao, SessaoLegislativa from sapl.protocoloadm.models import (Protocolo, TipoDocumentoAdministrativo, StatusTramitacaoAdministrativo, DocumentoAdministrativo) @@ -342,14 +342,57 @@ class RelatorioPresencaSessaoView(FilterView): # Verifica se os campos foram preenchidos if not self.filterset.form.is_valid(): return context + + cd = self.filterset.form.cleaned_data + if not cd['data_inicio'] and not cd['sessao_legislativa'] \ + and not cd['legislatura']: + msg = _("Formulário inválido! Preencha pelo menos algum dos campos.") + messages.error(self.request, msg) + return context + + # Caso a data tenha sido preenchida, verifica se foi preenchida corretamente + if ('data_inicio_0' in self.request.GET) and self.request.GET['data_inicio_0'] and \ + not(('data_inicio_1' in self.request.GET) and self.request.GET['data_inicio_1']): + msg = _("Formulário inválido! Preencha a data do Período Final.") + messages.error(self.request, msg) + return context + + if not(('data_inicio_0' in self.request.GET) and self.request.GET['data_inicio_0']) and \ + ('data_inicio_1' in self.request.GET) and self.request.GET['data_inicio_1']: + msg = _("Formulário inválido! Preencha a data do Período Inicial.") + messages.error(self.request, msg) + return context + + param0 = {} - # if 'salvar' not in self.request.GET: - where = context['object_list'].query.where - _range = where.children[0].rhs + legislatura_pk = self.request.GET.get('legislatura') + if legislatura_pk: + param0['sessao_plenaria__legislatura_id'] = legislatura_pk + legislatura = Legislatura.objects.get(id=legislatura_pk) + context['legislatura'] = legislatura - sufixo = 'sessao_plenaria__data_inicio__range' - param0 = {'%s' % sufixo: _range} + sessao_legislativa_pk = self.request.GET.get('sessao_legislativa') + if sessao_legislativa_pk: + param0['sessao_plenaria__sessao_legislativa_id'] = sessao_legislativa_pk + sessao_legislativa = SessaoLegislativa.objects.get(id=sessao_legislativa_pk) + context['sessao_legislativa'] = sessao_legislativa + _range = [] + + if ('data_inicio_0' in self.request.GET) and self.request.GET['data_inicio_0'] and \ + ('data_inicio_1' in self.request.GET) and self.request.GET['data_inicio_1']: + where = context['object_list'].query.where + _range = where.children[0].rhs + + elif legislatura_pk and not sessao_legislativa_pk: + _range = [legislatura.data_inicio, legislatura.data_fim] + + elif sessao_legislativa_pk: + _range = [sessao_legislativa.data_inicio, sessao_legislativa.data_fim] + + param0 = {'sessao_plenaria__data_inicio__range': _range} + + # Parlamentares com Mandato no intervalo de tempo (Ativos) parlamentares_qs = parlamentares_ativos( _range[0], _range[1]).order_by('nome_parlamentar') @@ -357,16 +400,12 @@ class RelatorioPresencaSessaoView(FilterView): 'id', flat=True) # Presenças de cada Parlamentar em Sessões - presenca_sessao = SessaoPlenariaPresenca.objects.filter( - parlamentar_id__in=parlamentares_id, - sessao_plenaria__data_inicio__range=_range).values_list( + presenca_sessao = SessaoPlenariaPresenca.objects.filter(**param0).values_list( 'parlamentar_id').annotate( sessao_count=Count('id')) # Presenças de cada Ordem do Dia - presenca_ordem = PresencaOrdemDia.objects.filter( - parlamentar_id__in=parlamentares_id, - sessao_plenaria__data_inicio__range=_range).values_list( + presenca_ordem = PresencaOrdemDia.objects.filter(**param0).values_list( 'parlamentar_id').annotate( sessao_count=Count('id')) @@ -433,6 +472,12 @@ class RelatorioPresencaSessaoView(FilterView): context['periodo'] = ( self.request.GET['data_inicio_0'] + ' - ' + self.request.GET['data_inicio_1']) + context['sessao_legislativa'] = '' + context['legislatura'] = '' + if sessao_legislativa_pk: + context['sessao_legislativa'] = SessaoLegislativa.objects.get(id=sessao_legislativa_pk) + if legislatura_pk: + context['legislatura'] = Legislatura.objects.get(id=legislatura_pk) # ===================================================================== qr = self.request.GET.copy() context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index 4c1434333..6e175bafe 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -19,7 +19,8 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, parlamentares_frente_selected, remove_parlamentar_composicao, parlamentares_filiados, BlocoCrud, - PesquisarParlamentarView, VincularParlamentarView) + PesquisarParlamentarView, VincularParlamentarView, + get_sessoes_legislatura) from .apps import AppConfig @@ -90,5 +91,8 @@ urlpatterns = [ url(r'^mesa-diretora/remove-parlamentar-composicao/$', remove_parlamentar_composicao, name='remove_parlamentar_composicao'), + + url(r'^parlamentar/get-sessoes-legislatura/$', + get_sessoes_legislatura, name='get_sessoes_legislatura'), ] diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index 874f53385..c81ed46bb 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -1176,4 +1176,15 @@ class BlocoCrud(CrudAux): form_class = BlocoForm def get_success_url(self): - return reverse('sapl.parlamentares:bloco_list') \ No newline at end of file + return reverse('sapl.parlamentares:bloco_list') + + +def get_sessoes_legislatura(request): + + legislatura_id = request.GET['legislatura'] + + json_response = {'sessoes_legislativas': []} + for s in SessaoLegislativa.objects.filter(legislatura_id=legislatura_id): + json_response['sessoes_legislativas'].append( (s.id, str(s)) ) + + return JsonResponse(json_response) \ No newline at end of file diff --git a/sapl/templates/base/RelatorioPresencaSessao_filter.html b/sapl/templates/base/RelatorioPresencaSessao_filter.html index 71032d36a..f4d9b71a0 100644 --- a/sapl/templates/base/RelatorioPresencaSessao_filter.html +++ b/sapl/templates/base/RelatorioPresencaSessao_filter.html @@ -20,12 +20,15 @@



PERÍODO: {{periodo}}
+ Legislatura: {{legislatura}}
+ Sessão Legislativa: {{sessao_legislativa}}
TOTAIS NO PERÍODO - SESSÕES: {{total_sessao}} - ORDENS DO DIA: {{total_ordemdia}} - + + @@ -40,7 +43,8 @@ {% for p in parlamentares %} - + + @@ -51,3 +55,52 @@
Nome Parlamentar / PartidoTitularTitular?Ativo? Sessão Ordem do Dia
{{p.parlamentar}} / {{p.parlamentar|filiacao_intervalo_filter:date_range|default:"Sem Partido"}}{%if p.titular %} Sim {% else %} Não {% endif %}{% if p.titular %} Sim {% else %} Não {% endif %}{% if p.parlamentar.ativo %} Sim {% else %} Não {% endif %} {{p.sessao_count}} {{p.sessao_porc}} {{p.ordemdia_count}}
{% endif %} {% endblock base_content %} + +{% block extra_js %} + + + +{% endblock %}