From e45d56a5a58f0fa5b8d38a33aa5448345acbd65c Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Mon, 10 Jul 2017 13:09:14 -0300 Subject: [PATCH] Cria logica para mostrar somente os ativos --- sapl/parlamentares/urls.py | 4 + sapl/parlamentares/views.py | 73 ++++++++++++++++--- sapl/templates/parlamentares/frente_form.html | 53 ++++++++++++-- 3 files changed, 113 insertions(+), 17 deletions(-) diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index 68ddcc16b..7e381393a 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -15,6 +15,7 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, TipoMilitarCrud, VotanteView, altera_field_mesa, altera_field_mesa_public_view, + frente_atualiza_lista_parlamentares, insere_parlamentar_composicao, remove_parlamentar_composicao) @@ -40,6 +41,9 @@ urlpatterns = [ ComposicaoColigacaoCrud.get_urls())), url(r'^sistema/frente/', include(FrenteCrud.get_urls())), + url(r'^sistema/frente/atualiza-lista-parlamentares', + frente_atualiza_lista_parlamentares, + name='atualiza_lista_parlamentares'), url(r'^sistema/parlamentar/legislatura/', include(LegislaturaCrud.get_urls())), url(r'^sistema/parlamentar/tipo-dependente/', diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index 1e7e77de1..018c0c6b3 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -30,6 +30,10 @@ from sapl.materia.models import Autoria from django.contrib.contenttypes.models import ContentType from django.db.models.aggregates import Count +import datetime +import json + + CargoMesaCrud = CrudAux.build(CargoMesa, 'cargo_mesa') PartidoCrud = CrudAux.build(Partido, 'partidos') SessaoLegislativaCrud = CrudAux.build(SessaoLegislativa, 'sessao_legislativa') @@ -208,20 +212,67 @@ class ColigacaoCrud(CrudAux): subnav_template_name = 'parlamentares/subnav_coligacao.yaml' -def frente_lista_parlamentar(request): - presencas = model.objects.filter( - sessao_plenaria=sessao) +def json_date_convert(date): + ''' + :param date: recebe a data de uma chamada ajax no formato de + string "dd/mm/yyyy" + :return: + ''' + dia, mes, ano = date.split('/') + return datetime.date(day=int(dia), + month=int(mes), + year=int(ano)) + + +def parlamentares_ativos(data_inicio, data_fim=None): + ''' + :param data_inicio: define a data de inicial do período desejado + :param data_fim: define a data final do período desejado + :return: queryset dos parlamentares ativos naquele período + ''' + mandatos_ativos = Mandato.objects.filter(Q( + data_inicio_mandato__lte=data_inicio, + data_fim_mandato__isnull=True)) + if data_fim: + mandatos_ativos = mandatos_ativos | Mandato.objects.filter(Q( + data_inicio_mandato__lte=data_inicio, + data_fim_mandato__gte=data_inicio) | Q( + data_inicio_mandato__gte=data_inicio, + data_inicio_mandato__lte=data_fim)) + else: + mandatos_ativos = mandatos_ativos | Mandato.objects.filter( + data_inicio_mandato__gte=data_inicio) + + parlamentares_id = mandatos_ativos.values_list( + 'parlamentar_id', + flat=True).distinct('parlamentar_id') - presentes = [p.parlamentar for p in presencas] + return Parlamentar.objects.filter(id__in=parlamentares_id) - mandato = Mandato.objects.filter( - legislatura=legislatura).order_by('parlamentar__nome_parlamentar') - for m in mandato: - if m.parlamentar in presentes: - yield (m.parlamentar, True) - else: - yield (m.parlamentar, False) +def frente_atualiza_lista_parlamentares(request): + ''' + :param request: recebe os parâmetros do GET da chamada Ajax + :return: retorna a lista atualizada dos parlamentares + ''' + ativos = json.loads(request.GET['ativos']) + + parlamentares = Parlamentar.objects.all() + + if ativos: + if 'data_criacao' in request.GET and request.GET['data_criacao']: + data_criacao = json_date_convert(request.GET['data_criacao']) + + if 'data_extincao' in request.GET and request.GET['data_extincao']: + data_extincao = json_date_convert(request.GET['data_extincao']) + parlamentares = parlamentares_ativos(data_criacao, + data_extincao) + else: + parlamentares = parlamentares_ativos(data_criacao) + + parlamentares_list = [(p.id, p.__str__()) for p in parlamentares] + + return JsonResponse({'parlamentares_list': parlamentares_list}) class FrenteCrud(CrudAux): diff --git a/sapl/templates/parlamentares/frente_form.html b/sapl/templates/parlamentares/frente_form.html index 2e3a7fe0d..4abbe0ea0 100644 --- a/sapl/templates/parlamentares/frente_form.html +++ b/sapl/templates/parlamentares/frente_form.html @@ -22,9 +22,20 @@ -
-
- {{ form.parlamentares|as_crispy_field }} + @@ -48,12 +59,39 @@ // var ativos; var data_criacao = $("#id_data_criacao").val(); var data_extincao = $("#id_data_extincao").val(); + var ativos = $('#id_selecionar_ativos').prop('checked'); - if (data_criacao == '') { - $('#div_id_parlamentares').hide(); + if (data_criacao === '') { + $('#div_parlamentares').hide(); } else{ - $('#div_id_parlamentares').show(); + $('#div_parlamentares').show(); + // Limpa a listagem para atualizar + $("#id_parlamentares option").remove(); + + $.get("/sistema/frente/atualiza-lista-parlamentares", + {data_criacao: data_criacao, + data_extincao: data_extincao, + ativos: ativos}, + + function(data){ + // Caso não venha nenhum dado da requisição, retorna null + if ($.isEmptyObject(data)){ + return null + } + lista_parlamentares = data['parlamentares_list']; + + console.log(lista_parlamentares.length) + + // Atualiza a listagem de parlamentares + for (i = 0; i < lista_parlamentares.length; i++) { + $('#id_parlamentares').append( + ''); + } + + } + ); } @@ -68,6 +106,9 @@ }); $("#id_data_extincao").change(function () { atualiza_parlamentares(); + }); + $("#id_selecionar_ativos").change(function () { + atualiza_parlamentares(); }); {% endblock %}