Browse Source

Fix #2913 - Painel eletrônico modular (#2922)

* Fix #2913 - Painel eletrônico modular

* Adiciona mudanças sugeridas no PR
pull/2995/head
Cesar Augusto de Carvalho 5 years ago
committed by Edward
parent
commit
361d65fa2c
  1. 5
      sapl/painel/urls.py
  2. 32
      sapl/painel/views.py
  3. 13
      sapl/templates/painel/index.html
  4. 56
      sapl/templates/sessao/painel.html

5
sapl/painel/urls.py

@ -4,7 +4,7 @@ from .apps import AppConfig
from .views import (cronometro_painel, get_dados_painel, painel_mensagem_view,
painel_parlamentar_view, painel_view, painel_votacao_view,
switch_painel, verifica_painel, votante_view, CronometroPainelCrud,
PainelConfigCrud)
PainelConfigCrud, painel_parcial_view)
app_name = AppConfig.name
@ -27,4 +27,7 @@ urlpatterns = [
url(r'^voto-individual/$', votante_view,
name='voto_individual'),
url(r'^painel-parcial/(?P<pk>\d+)/(?P<opcoes>\d+)/$', painel_parcial_view,
name="painel_parcial"),
]

32
sapl/painel/views.py

@ -336,11 +336,41 @@ def votante_view(request):
@user_passes_test(check_permission)
def painel_view(request, pk):
exibicao = {
'parlamentares': True,
'oradores': True,
'cronometros': True,
'resultado': True,
'materia': True
}
context = {'head_title': str(_('Painel Plenário')),
'sessao_id': pk,
'cronometros': Cronometro.objects.filter(ativo=True).order_by('ordenacao'),
'painel_config': PainelConfig.objects.first(),
'casa': CasaLegislativa.objects.last(),
'exibicao': exibicao
}
return render(request, 'painel/index.html', context)
def bit_is_set(number, bit):
return (number & (1 << bit)) != 0
@user_passes_test(check_permission)
def painel_parcial_view(request, pk, opcoes):
opcoes = int(opcoes)
exibicao = {
'parlamentares': bit_is_set(opcoes,0),
'oradores': bit_is_set(opcoes,1),
'cronometros': bit_is_set(opcoes, 2),
'resultado': bit_is_set(opcoes, 3),
'materia': bit_is_set(opcoes, 4)
}
context = {'head_title': str(_('Painel Plenário')),
'sessao_id': pk,
'cronometros': Cronometro.objects.filter(ativo=True).order_by('ordenacao'),
'painel_config': PainelConfig.objects.first(),
'casa': CasaLegislativa.objects.last()
'casa': CasaLegislativa.objects.last(),
'exibicao': exibicao
}
return render(request, 'painel/index.html', context)

13
sapl/templates/painel/index.html

@ -70,18 +70,25 @@
<div class="">
<div class="d-flex justify-content-start">
{% if exibicao.parlamentares %}
<div class="col-md-4">
<div class="text-center painel">
<h2 class="text-subtitle">Parlamentares</h2>
<span id="parlamentares" class="text-value text-center"></span>
</div>
</div>
{% endif %}
<div class="d-flex col-md-8 painels">
{% if exibicao.oradores %}
<div class="col-md-6 text-center painel" id="aparecer_oradores">
<h2 class="text-subtitle">Oradores</h2>
<span id="orador" class="text-value" align="center"></span>
</div>
{% endif %}
{% if exibicao.cronometros %}
<div class="col-md-6 text-center painel">
<h2 class="text-subtitle">{% if cronometros|length == 1 %}Cronômetro{% elif cronometros|length > 1%}Cronômetros{% endif %}</h2>
<div class="text-value">
@ -90,17 +97,23 @@
{% endfor %}
</div>
</div>
{% endif %}
{% if exibicao.resultado %}
<div class="col-md-6 text-center painel" id="resultado_votacao_div">
<h2 class="text-subtitle">Resultado</h2>
<span id="votacao" class="text-value"></span>
<h2><span id="resultado_votacao" lass="text-title"></span>
</div>
{% endif %}
{% if exibicao.materia %}
<div class="col-md-6 text-center painel" id="obs_materia_div">
<h2 class="text-subtitle" id="mat_em_votacao">Matéria em Votação</h2>
<span id="materia_legislativa_texto" class="text-value"></span>
<span id="observacao_materia" class="text-value"></span>
</div>
{% endif %}
<div class="col-md-6 text-center painel" id="tema_solene_div" style="display: none">
<h2 class="text-subtitle">Tema da Sessão Solene</h2>

56
sapl/templates/sessao/painel.html

@ -19,9 +19,19 @@
<audio type="hidden" id="audio" src="{% webpack_static 'audio/ring.mp3' %}"></audio>
<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 class="col-md-4"><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-4">
<select id="sel-painel-modular" multiple="multiple" class="btn btn-primary btn-sm active">
<option value="parlamentares">Parlamentares</option>
<option value="oradores">Oradores</option>
<option value="cronometros">Cronômetros</option>
<option value="resultado-votacao">Resultado da votação</option>
<option value="materia-votacao">Matéria em votação / votada</option>
</select>
<button class="btn btn-primary btn-sm active" onclick="painel_parcial();">Iniciar</button>
</div>
<div class="col-md-2"><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-2"><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 />
@ -58,6 +68,37 @@
{% block extra_js %}
<script language="JavaScript">
function painel_parcial(){
let selecionados = $('#sel-painel-modular').find(":selected");
let param = 0;
// Seleciona um bit diferente do número para cada escolha
// Exemplo: se "Parlamentares" estiver selecionado, o bit 0
// do parâmetro estará marcado como 1
for(var sel of selecionados){
switch (sel.text) {
case 'Parlamentares':
param += 1;
break;
case 'Oradores':
param += 2;
break;
case 'Cronômetros':
param += 4;
break;
case 'Resultado da votação':
param += 8;
break;
case 'Matéria em votação / votada':
param += 16;
}
}
// Monta a URL passando o parâmetros dos selecionados
let url = "{% url 'sapl.painel:painel_parcial' pk 12345 %}";
url = url.replace('12345', param.toString());
window.open(url,"_blank",'Comprovante', 'width=800, height=800, scrollbars=yes');
return false;
}
function switch_painel(aberto) {
let pk_sessao = {{root_pk}};
let botao_abrir = $('#id_abrir_painel');
@ -127,6 +168,15 @@ function convertValueToDuration(value){
$(document).ready(function(){
$('#sel-painel-modular').multiselect({
inheritClass: true,
buttonText: function(options, select) {
return "Painel modular";
},
includeSelectAllOption: true,
selectAllText: 'Selecionar todos',
selectAllValue: 'select-all-value'
});
let pk_sessao = parseInt("{{root_pk}}");
let botao_abrir = $('#id_abrir_painel');
let botao_fechar = $('#id_fechar_painel');

Loading…
Cancel
Save