diff --git a/sapl/painel/urls.py b/sapl/painel/urls.py index 66ef92ac1..2dc5dcdb9 100644 --- a/sapl/painel/urls.py +++ b/sapl/painel/urls.py @@ -3,7 +3,7 @@ from django.conf.urls import url from .apps import AppConfig from .views import (cronometro_painel, get_dados_painel, painel_mensagem_view, painel_parlamentar_view, painel_view, painel_votacao_view, - votante_view) + switch_painel, verifica_painel, votante_view) app_name = AppConfig.name @@ -14,10 +14,15 @@ urlpatterns = [ url(r'^painel/mensagem$', painel_mensagem_view, name="painel_mensagem"), url(r'^painel/parlamentar$', painel_parlamentar_view, name='painel_parlamentar'), + url(r'^painel/switch-painel$', switch_painel, + name="switch_painel"), url(r'^painel/votacao$', painel_votacao_view, name='painel_votacao'), + url(r'^painel/verifica-painel$', verifica_painel, + name="verifica_painel"), url(r'^painel/cronometro$', cronometro_painel, name='cronometro_painel'), # url(r'^painel/cronometro$', include(CronometroPainelCrud.get_urls())), url(r'^voto-individual/$', votante_view, name='voto_individual'), ] + diff --git a/sapl/painel/views.py b/sapl/painel/views.py index 4be056640..cc01cbf34 100644 --- a/sapl/painel/views.py +++ b/sapl/painel/views.py @@ -1,3 +1,4 @@ +import json from django.contrib import messages from django.contrib.auth.decorators import user_passes_test from django.core.exceptions import ObjectDoesNotExist @@ -224,6 +225,27 @@ def painel_view(request, pk): return render(request, 'painel/index.html', context) +@user_passes_test(check_permission) +def switch_painel(request): + sessao = SessaoPlenaria.objects.get(id=request.POST['pk_sessao']) + switch = json.loads(request.POST['aberto']) + + if switch: + sessao.painel_aberto = True + else: + sessao.painel_aberto = False + + sessao.save() + return JsonResponse({}) + +@user_passes_test(check_permission) +def verifica_painel(request): + sessao = SessaoPlenaria.objects.get(id=request.GET['pk_sessao']) + status = sessao.painel_aberto + resposta = JsonResponse(dict(status=status)) + return resposta + + @user_passes_test(check_permission) def painel_mensagem_view(request): return render(request, 'painel/mensagem.html') @@ -262,12 +284,13 @@ def get_presentes(pk, response, materia): if type(materia) == OrdemDia: presentes = PresencaOrdemDia.objects.filter( sessao_plenaria_id=pk) - elif type(materia) == ExpedienteMateria: + else: presentes = SessaoPlenariaPresenca.objects.filter( sessao_plenaria_id=pk) + sessao = SessaoPlenaria.objects.get(id=pk) num_presentes = len(presentes) - data_sessao = materia.sessao_plenaria.data_inicio + data_sessao = sessao.data_inicio presentes_list = [] for p in presentes: @@ -286,24 +309,29 @@ def get_presentes(pk, response, materia): 'voto': '' }) - if materia.tipo_votacao == 1: - tipo_votacao = 'Simbólica' - elif materia.tipo_votacao == 2: - tipo_votacao = 'Nominal' - elif materia.tipo_votacao == 3: - tipo_votacao = 'Secreta' + if materia: + if materia.tipo_votacao == 1: + tipo_votacao = 'Simbólica' + elif materia.tipo_votacao == 2: + tipo_votacao = 'Nominal' + elif materia.tipo_votacao == 3: + tipo_votacao = 'Secreta' + + response.update({ + 'tipo_resultado': materia.resultado, + 'observacao_materia': materia.observacao, + 'tipo_votacao': tipo_votacao, + 'materia_legislativa_texto': str(materia.materia) + }) + presentes_list = sort_lista_chave(presentes_list, 'nome') response.update({ 'presentes': presentes_list, 'num_presentes': num_presentes, - 'status_painel': 'ABERTO', 'msg_painel': str(_('Votação aberta!')), - 'tipo_resultado': materia.resultado, - 'tipo_votacao': tipo_votacao, - 'observacao_materia': materia.observacao, - 'materia_legislativa_texto': str(materia.materia)}) + }) return response @@ -315,7 +343,6 @@ def get_materia_expediente_aberta(pk): def response_nenhuma_materia(response): response.update({ - 'status_painel': 'FECHADO', 'msg_painel': str(_('Nenhuma matéria disponivel para votação.'))}) return JsonResponse(response) @@ -378,6 +405,7 @@ def get_dados_painel(request, pk): 'cronometro_aparte': get_cronometro_status(request, 'aparte'), 'cronometro_discurso': get_cronometro_status(request, 'discurso'), 'cronometro_ordem': get_cronometro_status(request, 'ordem'), + 'status_painel': sessao.painel_aberto } ordem_dia = get_materia_aberta(pk) @@ -426,4 +454,4 @@ def get_dados_painel(request, pk): materia)) # Retorna que não há nenhuma matéria já votada ou aberta - return response_nenhuma_materia(response) + return response_nenhuma_materia(get_presentes(pk, response, None)) diff --git a/sapl/sessao/migrations/0015_sessaoplenaria_painel_aberto.py b/sapl/sessao/migrations/0015_sessaoplenaria_painel_aberto.py new file mode 100644 index 000000000..73f7b1cc2 --- /dev/null +++ b/sapl/sessao/migrations/0015_sessaoplenaria_painel_aberto.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.13 on 2017-09-21 17:44 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0014_auto_20170905_1617'), + ] + + operations = [ + migrations.AddField( + model_name='sessaoplenaria', + name='painel_aberto', + field=models.BooleanField(default=False, verbose_name='Painel está aberto?'), + ), + ] diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py index a874fb5f4..b5d31fff7 100644 --- a/sapl/sessao/models.py +++ b/sapl/sessao/models.py @@ -111,6 +111,7 @@ class SessaoPlenaria(models.Model): # TODO analyze querying all hosted databases ! cod_andamento_sessao = models.PositiveIntegerField(blank=True, null=True) + painel_aberto = models.BooleanField(blank=True, default=False, verbose_name=_('Painel está aberto?')) tipo = models.ForeignKey(TipoSessaoPlenaria, on_delete=models.PROTECT, verbose_name=_('Tipo')) diff --git a/sapl/sessao/tests/test_sessao.py b/sapl/sessao/tests/test_sessao.py index ed28bf6ef..b0258312c 100644 --- a/sapl/sessao/tests/test_sessao.py +++ b/sapl/sessao/tests/test_sessao.py @@ -37,7 +37,8 @@ def test_sessao_plenaria_form_valido(): 'tipo': str(tipo.pk), 'sessao_legislativa': str(sessao.pk), 'data_inicio': '10/11/2017', - 'hora_inicio': '10:10' + 'hora_inicio': '10:10', + 'painel_aberto': False }) assert form.is_valid() diff --git a/sapl/sessao/tests/test_sessao_view.py b/sapl/sessao/tests/test_sessao_view.py index 50a94d970..8868d7abd 100644 --- a/sapl/sessao/tests/test_sessao_view.py +++ b/sapl/sessao/tests/test_sessao_view.py @@ -11,7 +11,7 @@ from sapl.sessao.models import SessaoPlenaria, TipoSessaoPlenaria def test_incluir_sessao_plenaria_submit(admin_client): legislatura = mommy.make(Legislatura) sessao = mommy.make(SessaoLegislativa) - tipo = mommy.make(TipoSessaoPlenaria) + tipo = mommy.make(TipoSessaoPlenaria, id=1) response = admin_client.post(reverse('sapl.sessao:sessaoplenaria_create'), {'legislatura': str(legislatura.pk), @@ -46,4 +46,4 @@ def test_incluir_sessao_errors(admin_client): assert (response.context_data['form'].errors['data_inicio'] == [_('Este campo é obrigatório.')]) assert (response.context_data['form'].errors['hora_inicio'] == - [_('Este campo é obrigatório.')]) + [_('Este campo é obrigatório.')]) \ No newline at end of file diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 6fe3087f1..1d92772d4 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -148,6 +148,9 @@ def abrir_votacao(request, pk, spk): verifica_sessao_iniciada(request, spk)): materia_votacao = model.objects.get(id=pk) materia_votacao.votacao_aberta = True + sessao = SessaoPlenaria.objects.get(id=spk) + sessao.painel_aberto = True + sessao.save() materia_votacao.save() return HttpResponseRedirect( diff --git a/sapl/templates/painel/index.html b/sapl/templates/painel/index.html index 68e5cdf78..c6701b462 100644 --- a/sapl/templates/painel/index.html +++ b/sapl/templates/painel/index.html @@ -161,10 +161,10 @@ $("#sessao_plenaria").text(data["sessao_plenaria"]) $("#sessao_plenaria_data").text("Data Início: " + data["sessao_plenaria_data"]) $("#sessao_plenaria_hora_inicio").text("Hora Início: " + data["sessao_plenaria_hora_inicio"]) - if (data["status_painel"] == "FECHADO") { + if (data["status_painel"] == false) { $("#message").text("PAINEL ENCONTRA-SE FECHADO"); } - else{ + else { $("#message").text(""); } @@ -176,7 +176,7 @@ var presentes_list = data["presentes"]; - if (presentes_list) { + if (data["status_painel"] == true) { presentes.append(''); jQuery.each(presentes_list, function (index, parlamentar) { $('#parlamentares_list').append('
' + @@ -190,7 +190,7 @@ else{ presentes.append(''); $('#parlamentares_list').append( - '
A listagem de parlamentares só aparecerá quando alguma matéria estiver em votação ou já tiver sido votada.
') + '
A listagem de parlamentares só aparecerá quando o painel estiver aberto.
') presentes.append('
'); } diff --git a/sapl/templates/sessao/painel.html b/sapl/templates/sessao/painel.html index 5cd84ec32..005e5a27d 100644 --- a/sapl/templates/sessao/painel.html +++ b/sapl/templates/sessao/painel.html @@ -14,6 +14,8 @@
+
+

@@ -257,6 +259,56 @@ $(function() { }); }); + +function switch_painel(aberto) { + var pk_sessao = {{root_pk}}; + var botao_abrir = $('#id_abrir_painel'); + var botao_fechar = $('#id_fechar_painel'); + + + $.ajax({ + data: {pk_sessao: pk_sessao, aberto: aberto}, + type: 'POST', + url: "{% url 'sapl.painel:switch_painel' %}", + headers: {'X-CSRFToken': getCookie('csrftoken')}, + }); + + if (aberto) { + botao_abrir.hide(); + botao_fechar.show(); + } else { + botao_abrir.show(); + botao_fechar.hide(); + } +} + +$(document).ready(function(){ + var pk_sessao = {{root_pk}}; + var botao_abrir = $('#id_abrir_painel'); + var botao_fechar = $('#id_fechar_painel'); + + $.ajax({ + data: {pk_sessao: pk_sessao}, + type: 'GET', + dataType: 'json', + url: "{% url 'sapl.painel:verifica_painel' %}", + error: function () { + alert("Erro ao verificar o Painel"); + }, + success: function (data) { + if (data['status']) { + botao_abrir.hide(); + botao_fechar.show(); + } else { + botao_abrir.show(); + botao_fechar.hide(); + } + }, + }); + + +}); + {% endblock %}