Browse Source

Fix #1487 abertura do painel (#1499)

* Adiciona teste de vie em SessaoPlenaria

* Adiciona teste de view no CasaLegislativa e TipoAutor

* Corrigi erros relacionados a PEP8

* Adiciona teste ao ExpedienteMateriaForm

* Fix erro

* Adicionando o atributo de painel aberto e a função para alterar o status pela view

* Verificação do status do painel na abertura da página

* Pequena correção

* Mudando a estrutura do painel para que seja possível a abertura em dias que não haja matérias para votação (#1487)

Signed-off-by: João Pedro Sconetto <sconetto.joao@gmail.com>

* Modifica a lógica para quando abrir a matéria, abrir o painel

* Pequena correção

* Pequena correção
pull/1526/head
João Pedro Sconetto 7 years ago
committed by Edward
parent
commit
d1c60ea100
  1. 7
      sapl/painel/urls.py
  2. 58
      sapl/painel/views.py
  3. 20
      sapl/sessao/migrations/0015_sessaoplenaria_painel_aberto.py
  4. 1
      sapl/sessao/models.py
  5. 3
      sapl/sessao/tests/test_sessao.py
  6. 4
      sapl/sessao/tests/test_sessao_view.py
  7. 3
      sapl/sessao/views.py
  8. 8
      sapl/templates/painel/index.html
  9. 52
      sapl/templates/sessao/painel.html

7
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'),
]

58
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))

20
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?'),
),
]

1
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'))

3
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()

4
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.')])

3
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(

8
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('<table id="parlamentares_list">');
jQuery.each(presentes_list, function (index, parlamentar) {
$('#parlamentares_list').append('<tr> <td style="padding-right:20px">' +
@ -190,7 +190,7 @@
else{
presentes.append('<span id="parlamentares_list">');
$('#parlamentares_list').append(
'<center>A listagem de parlamentares só aparecerá quando alguma matéria estiver em votação ou já tiver sido votada.</center>')
'<center>A listagem de parlamentares só aparecerá quando o painel estiver aberto.</center>')
presentes.append('</span>');
}

52
sapl/templates/sessao/painel.html

@ -14,6 +14,8 @@
<div class="row">
<div class="col-md-6"><a href="" onclick="window.open('{% url 'sapl.painel:painel_principal' pk %}','Comprovante','width=800, height=800, scrollbars=yes'); return false;" class="btn btn-primary btn-sm active">Iniciar painel completo</a></div>
<div class="col-md-3"><button onclick="switch_painel(true)" id="id_abrir_painel" class="btn btn-primary btn-sm active" style="display: none">Abrir Painel</button></div>
<div class="col-md-3"><button onclick="switch_painel(false)" id="id_fechar_painel" class="btn btn-danger btn-sm active" style="display: none;">Fechar Painel</button></div>
</div>
<br />
@ -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();
}
},
});
});
</script>
{% endblock %}

Loading…
Cancel
Save