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}}
Nome Parlamentar / Partido | -Titular | +Titular? | +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}} | @@ -51,3 +55,52 @@