Browse Source

Fix #2840 - Adiciona campos em relatório de presença de parlamentares (#2842)

* Fix #2840 - Adiciona campo em relatório de presença de parlamentares

* Fix #2840 - Adiciona campo em relatório de presença de parlamentares

* Mostra opções de SessaoLegislativa de acordo com a Legislatura escolhida

* Todos os campos como opcionais e tratamento de erros
pull/2866/head
Cesar Augusto de Carvalho 6 years ago
committed by Edward
parent
commit
769adc7cac
  1. 9
      sapl/base/forms.py
  2. 69
      sapl/base/views.py
  3. 6
      sapl/parlamentares/urls.py
  4. 13
      sapl/parlamentares/views.py
  5. 57
      sapl/templates/base/RelatorioPresencaSessao_filter.html

9
sapl/base/forms.py

@ -864,22 +864,25 @@ class RelatorioPresencaSessaoFilterSet(django_filters.FilterSet):
class Meta(FilterOverridesMetaMixin): class Meta(FilterOverridesMetaMixin):
model = SessaoPlenaria model = SessaoPlenaria
fields = ['data_inicio'] fields = ['data_inicio',
'sessao_legislativa',
'legislatura']
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(RelatorioPresencaSessaoFilterSet, self).__init__( super(RelatorioPresencaSessaoFilterSet, self).__init__(
*args, **kwargs) *args, **kwargs)
self.filters['data_inicio'].label = 'Período (Inicial - Final)' self.filters['data_inicio'].label = 'Período (Inicial - Final)'
self.form.fields['data_inicio'].required = True
row1 = to_row([('data_inicio', 12)]) row1 = to_row([('data_inicio', 12)])
row2 = to_row([('legislatura', 6),
('sessao_legislativa', 6)])
self.form.helper = SaplFormHelper() self.form.helper = SaplFormHelper()
self.form.helper.form_method = 'GET' self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout( self.form.helper.layout = Layout(
Fieldset(_('Presença dos parlamentares nas sessões plenárias'), Fieldset(_('Presença dos parlamentares nas sessões plenárias'),
row1, form_actions(label='Pesquisar')) row1, row2, form_actions(label='Pesquisar'))
) )
@property @property

69
sapl/base/views.py

@ -38,7 +38,7 @@ from sapl.crud.base import CrudAux, make_pagination
from sapl.materia.models import (Autoria, MateriaLegislativa, Proposicao, from sapl.materia.models import (Autoria, MateriaLegislativa, Proposicao,
TipoMateriaLegislativa, StatusTramitacao, UnidadeTramitacao) TipoMateriaLegislativa, StatusTramitacao, UnidadeTramitacao)
from sapl.norma.models import (NormaJuridica, NormaEstatisticas) 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, from sapl.protocoloadm.models import (Protocolo, TipoDocumentoAdministrativo,
StatusTramitacaoAdministrativo, StatusTramitacaoAdministrativo,
DocumentoAdministrativo) DocumentoAdministrativo)
@ -342,14 +342,57 @@ class RelatorioPresencaSessaoView(FilterView):
# Verifica se os campos foram preenchidos # Verifica se os campos foram preenchidos
if not self.filterset.form.is_valid(): if not self.filterset.form.is_valid():
return context 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: legislatura_pk = self.request.GET.get('legislatura')
where = context['object_list'].query.where if legislatura_pk:
_range = where.children[0].rhs param0['sessao_plenaria__legislatura_id'] = legislatura_pk
legislatura = Legislatura.objects.get(id=legislatura_pk)
context['legislatura'] = legislatura
sufixo = 'sessao_plenaria__data_inicio__range' sessao_legislativa_pk = self.request.GET.get('sessao_legislativa')
param0 = {'%s' % sufixo: _range} 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 com Mandato no intervalo de tempo (Ativos)
parlamentares_qs = parlamentares_ativos( parlamentares_qs = parlamentares_ativos(
_range[0], _range[1]).order_by('nome_parlamentar') _range[0], _range[1]).order_by('nome_parlamentar')
@ -357,16 +400,12 @@ class RelatorioPresencaSessaoView(FilterView):
'id', flat=True) 'id', flat=True)
# Presenças de cada Parlamentar em Sessões # Presenças de cada Parlamentar em Sessões
presenca_sessao = SessaoPlenariaPresenca.objects.filter( presenca_sessao = SessaoPlenariaPresenca.objects.filter(**param0).values_list(
parlamentar_id__in=parlamentares_id,
sessao_plenaria__data_inicio__range=_range).values_list(
'parlamentar_id').annotate( 'parlamentar_id').annotate(
sessao_count=Count('id')) sessao_count=Count('id'))
# Presenças de cada Ordem do Dia # Presenças de cada Ordem do Dia
presenca_ordem = PresencaOrdemDia.objects.filter( presenca_ordem = PresencaOrdemDia.objects.filter(**param0).values_list(
parlamentar_id__in=parlamentares_id,
sessao_plenaria__data_inicio__range=_range).values_list(
'parlamentar_id').annotate( 'parlamentar_id').annotate(
sessao_count=Count('id')) sessao_count=Count('id'))
@ -433,6 +472,12 @@ class RelatorioPresencaSessaoView(FilterView):
context['periodo'] = ( context['periodo'] = (
self.request.GET['data_inicio_0'] + self.request.GET['data_inicio_0'] +
' - ' + self.request.GET['data_inicio_1']) ' - ' + 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() qr = self.request.GET.copy()
context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else ''

6
sapl/parlamentares/urls.py

@ -19,7 +19,8 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud,
parlamentares_frente_selected, parlamentares_frente_selected,
remove_parlamentar_composicao, remove_parlamentar_composicao,
parlamentares_filiados, BlocoCrud, parlamentares_filiados, BlocoCrud,
PesquisarParlamentarView, VincularParlamentarView) PesquisarParlamentarView, VincularParlamentarView,
get_sessoes_legislatura)
from .apps import AppConfig from .apps import AppConfig
@ -90,5 +91,8 @@ urlpatterns = [
url(r'^mesa-diretora/remove-parlamentar-composicao/$', url(r'^mesa-diretora/remove-parlamentar-composicao/$',
remove_parlamentar_composicao, name='remove_parlamentar_composicao'), remove_parlamentar_composicao, name='remove_parlamentar_composicao'),
url(r'^parlamentar/get-sessoes-legislatura/$',
get_sessoes_legislatura, name='get_sessoes_legislatura'),
] ]

13
sapl/parlamentares/views.py

@ -1176,4 +1176,15 @@ class BlocoCrud(CrudAux):
form_class = BlocoForm form_class = BlocoForm
def get_success_url(self): def get_success_url(self):
return reverse('sapl.parlamentares:bloco_list') 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)

57
sapl/templates/base/RelatorioPresencaSessao_filter.html

@ -20,12 +20,15 @@
</div> </div>
<br /><br /><br /><br /> <br /><br /><br /><br />
<b>PERÍODO: {{periodo}}</b><br /> <b>PERÍODO: {{periodo}}</b><br />
<b>Legislatura: {{legislatura}}</b><br />
<b>Sessão Legislativa: {{sessao_legislativa}}</b><br />
<b>TOTAIS NO PERÍODO - SESSÕES: {{total_sessao}} - ORDENS DO DIA: {{total_ordemdia}}</b> <b>TOTAIS NO PERÍODO - SESSÕES: {{total_sessao}} - ORDENS DO DIA: {{total_ordemdia}}</b>
<table class="table table-bordered table-hover presenca_table"> <table class="table table-bordered table-hover presenca_table">
<thead class="thead-default" align="center"> <thead class="thead-default" align="center">
<tr class="active"> <tr class="active">
<th rowspan="2">Nome Parlamentar / Partido</th> <th rowspan="2">Nome Parlamentar / Partido</th>
<th rowspan="2">Titular</th> <th rowspan="2">Titular?</th>
<th rowspan="2">Ativo?</th>
<th colspan="2">Sessão</th> <th colspan="2">Sessão</th>
<th colspan="2">Ordem do Dia</th> <th colspan="2">Ordem do Dia</th>
</tr> </tr>
@ -40,7 +43,8 @@
{% for p in parlamentares %} {% for p in parlamentares %}
<tr> <tr>
<td><b>{{p.parlamentar}}</b> / {{p.parlamentar|filiacao_intervalo_filter:date_range|default:"Sem Partido"}}</td> <td><b>{{p.parlamentar}}</b> / {{p.parlamentar|filiacao_intervalo_filter:date_range|default:"Sem Partido"}}</td>
<td>{%if p.titular %} Sim {% else %} Não {% endif %}</td> <td>{% if p.titular %} Sim {% else %} Não {% endif %}</td>
<td>{% if p.parlamentar.ativo %} Sim {% else %} Não {% endif %}</td>
<td>{{p.sessao_count}}</td> <td>{{p.sessao_count}}</td>
<td>{{p.sessao_porc}}</td> <td>{{p.sessao_porc}}</td>
<td>{{p.ordemdia_count}}</td> <td>{{p.ordemdia_count}}</td>
@ -51,3 +55,52 @@
</table> </table>
{% endif %} {% endif %}
{% endblock base_content %} {% endblock base_content %}
{% block extra_js %}
<script type="text/javascript">
$(document).ready(function(){
var original_options = [];
$.each($("#id_sessao_legislativa").children(), function(idx, obj) {
original_options.push($(obj));
});
$('#id_legislatura').change(function(event) {
let legislatura = $("#id_legislatura").val();
var json_data = {
legislatura : legislatura,
}
if(legislatura){
$.getJSON("{% url 'sapl.parlamentares:get_sessoes_legislatura' %}", json_data, function(data){
if (data) {
$("#id_sessao_legislativa").children().remove();
if (data.sessoes_legislativas.length > 1) {
sel = $("#id_sessao_legislativa").append("<option>---------</option>");
sel.children().last().attr("value", "");
}
$.each(data.sessoes_legislativas, function(idx, obj) {
$("#id_sessao_legislativa")
.append($("<option></option>")
.attr("value", obj[0])
.text(obj[1]));
});
}
});
}else{
$("#id_sessao_legislativa").children().remove();
$.each(original_options, function(idx, obj) {
$("#id_sessao_legislativa").append(obj);
});
$("#id_sessao_legislativa").children().first().attr('selected', true);
}
})
});
</script>
{% endblock %}

Loading…
Cancel
Save