Sistema de Apoio ao Processo Legislativo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

270 lines
9.7 KiB

{% extends "crud/detail.html" %}
{% load i18n %}
{% load common_tags %}
{% load staticfiles %}
{% load webpack_static from webpack_loader %}
{% load render_bundle from webpack_loader %}
{% block actions %} {% endblock %}
{% block title %}
<h1 class="page-header">
Painel Eletrônico <small>({{sessaoplenaria}})</small>
</h1>
{% endblock %}
{% block detail_content %}
<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>
<br />
<h1>Operação do Painel Eletrônico</h1>
<h2><span id="relogio"></span></h2>
<br />
{% for cronometro in cronometros %}
<div class="row">
<div class="col-md-12 mb-2"><h3><a href="{% url 'sapl.painel:cronometro_detail' cronometro.id %}">{{cronometro}}</a></h3></div>
</div>
<div class="row">
<div class="col-md-2"><input size="2" id="cronometro_{{cronometro.id}}" name="cronometro_{{cronometro.id}}" value="" readyonly="true" class="form-control"></div>
</div>
<br />
<div class="row">
<div class="col-md-6"><button type="button" id="cronometro_{{cronometro.id}}_Start" class="btn btn-success">Iniciar</button></div>
<div class="col-md-6"><button type="button" id="cronometro_{{cronometro.id}}_Reset" class="btn btn-success">Reiniciar</button></div>
</div>
<br><br>
{% endfor %}
<div class="row">
<div class="col-md-6"><button type="button" id="sinalSonoro" class="btn btn-success" onclick="document.getElementById('audio').play();">Sinal Sonoro</button></div>
</div>
<br><br>
{% endblock detail_content %}
{% block extra_js %}
<script language="JavaScript">
function switch_painel(aberto) {
let pk_sessao = {{root_pk}};
let botao_abrir = $('#id_abrir_painel');
let 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();
}
}
function checkTime(i) {
if (i<10) {
i = "0" + i;
}
return i;
}
function startTime() {
let today=new Date();
let h=today.getHours();
let m=today.getMinutes();
let s=today.getSeconds();
m = checkTime(m);
s = checkTime(s);
$("#relogio").text(h+":"+m+":"+s)
let t = setTimeout(function(){
startTime();
},500);
}
function playAudioNumVezes(audio, times, ended) {
if (times <= 0) {
return;
}
let played = 0;
audio.addEventListener("ended", function() {
played++;
if (played < times) {
audio.play();
} else if (ended) {
ended();
}
});
audio.play();
}
function convertValueToDuration(value){
let h = Math.floor((value/1000) / 3600);
h = checkTime(h);
let m = Math.floor((value/1000) % 3600 / 60);
m = checkTime(m);
let s = Math.floor((value/1000) % 3600 % 60);
s = checkTime(s);
return h.toString() + ":" + m.toString() + ":" + s.toString();
}
function getDifferenceToNow(ultima_alteracao, duracao_cronometro){
var today = new Date();
var djDate = new Date(ultima_alteracao);
var difference = today.getTime() - djDate.getTime();
var dif = convertValueToDuration(difference);
console.log(difference/(1000));
if(dif > convertValueToDuration(duracao_cronometro)){
return 0;
}
return difference/1000;
}
$(document).ready(function(){
let pk_sessao = parseInt("{{root_pk}}");
let botao_abrir = $('#id_abrir_painel');
let 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();
}
},
});
startTime();
let audioAlertFinish = document.getElementById("audio");
// Obtém duração do disparo ao término do tempo e converte para segundos
var duracao_disparo = "{{ painel_config.tempo_disparo_termino }}";
let tmp = duracao_disparo.split(":");
duracao_disparo = parseInt(tmp[0])*3600 + parseInt(tmp[1])*60 + parseInt(tmp[2]);
let num_vezes_toca_audio = Math.round(duracao_disparo/audioAlertFinish.duration);
{% for cron in cronometros %}
$('#cronometro_' + "{{cron.id}}").prop('disabled', false);
console.log("{{cron.status}}", "{{cron.last_stop_duration}}")
{% if cron.status == 'I' %}
$('#cronometro_' + "{{cron.id}}" + '_Reset').hide();
$('#cronometro_' + "{{cron.id}}").runner('start');
$('#cronometro_' + "{{cron.id}}" + '_Start').text('Parar');
//var resposta = getDifferenceToNow({{ cron.ultima_alteracao_status|date:"U" }} * 1000, "{{cron.duracao_cronometro|duration_to_seconds}}");
//console.log(resposta);
{% else %}
$('#cronometro_' + "{{cron.id}}" + '_Reset').show();
$('#cronometro_' + "{{cron.id}}").runner('stop');
$('#cronometro_' + "{{cron.id}}" + '_Start').text('Iniciar');
{% endif %}
$('#cronometro_' + "{{cron.id}}").runner({
autostart: {% if cron.status == "I"%} true {% else %} false {% endif %},
countdown: true,
startAt:
{% if cron.status == "R"%}
parseInt("{{cron.duracao_cronometro|duration_to_seconds}}") * 1000
{% elif cron.status == "S"%}
{% if cron.last_stop_duration %}
parseInt("{{cron.last_stop_duration|duration_to_seconds}}") * 1000
{% else %}
parseInt("{{cron.duracao_cronometro|duration_to_seconds}}") * 1000
{% endif %}
{% elif cron.status == "I" %}
parseInt("{{cron.duracao_cronometro|duration_difference:cron.ultima_alteracao_status}}") * 1000
{% endif %},
stopAt: 0,
milliseconds: false,
format: convertValueToDuration
}).on('runnerFinish', function(eventObject, info){
$.get('/painel/cronometro', { tipo: 'cronometro_' + "{{cron.id}}", action: 'stop', last_time: $('#cronometro_' + "{{c.id}}").val() } );
playAudioNumVezes(audioAlertFinish, num_vezes_toca_audio);
$('#cronometro_' + "{{cron.id}}" + '_Reset').show();
$('#cronometro_' + "{{cron.id}}").runner('stop');
$('#cronometro_' + "{{cron.id}}" + '_Start').text('Iniciar');
})
$('#cronometro_' + "{{cron.id}}" + '_Start').click(function() {
// Como o botão de start e stop está sendo reaproveitado (é o mesmo botão, que fica mudando de texto),
// deve-se checar se é um start ou um stop
// Ação de start
if ($('#cronometro_' + "{{cron.id}}" + '_Start').text() == 'Iniciar'){
// Cronômetro da questão de ordem é tratado separadamente
// porque pode parar os demais quando inicia
{% if painel_config.cronometro_ordem and cron.tipo == "Cronômetro da Questão de Ordem" %}
// cronometro da questão de ordem
{% for c in cronometros %}
{% if c.tipo == "Cronômetro da Questão de Ordem" %}
$.get('/painel/cronometro', { tipo: 'cronometro_' + "{{c.id}}", action: 'start', last_time: '0' } );
$('#cronometro_' + "{{c.id}}" + '_Reset').hide();
$('#cronometro_' + "{{c.id}}").runner('start');
$('#cronometro_' + "{{c.id}}" + '_Start').text('Parar');
{% else %}
$.get('/painel/cronometro', { tipo: 'cronometro_' + "{{c.id}}", action: 'stop', last_time: $('#cronometro_' + "{{c.id}}").val() } );
$('#cronometro_' + "{{c.id}}" + '_Reset').show();
$('#cronometro_' + "{{c.id}}").runner('stop');
$('#cronometro_' + "{{c.id}}" + '_Start').text('Iniciar');
{% endif %}
{% endfor %}
// Demais cronômetros
{% else %}
$.get('/painel/cronometro', { tipo: 'cronometro_' + "{{cron.id}}", action: 'start', last_time: '0' } );
$('#cronometro_' + "{{cron.id}}" + '_Reset').hide();
$('#cronometro_' + "{{cron.id}}").runner('start');
$('#cronometro_' + "{{cron.id}}" + '_Start').text('Parar');
{% endif %}
// Ação de stop é igual para todos os cronômetros
} else{
$.get('/painel/cronometro', { tipo: 'cronometro_' + "{{cron.id}}", action: 'stop', last_time: $('#cronometro_' + "{{cron.id}}").val() } );
$('#cronometro_' + "{{cron.id}}" + '_Reset').show();
$('#cronometro_' + "{{cron.id}}").runner('stop');
$('#cronometro_' + "{{cron.id}}" + '_Start').text('Iniciar');
}
});
// Ação de reset é igual para todos os cronômetros
$('#cronometro_' + "{{cron.id}}" + '_Reset').click(function() {
$.get('/painel/cronometro', { tipo: 'cronometro_' + "{{cron.id}}", action: 'reset', last_time: '0' } );
//$('#cronometro_' + "{{cron.id}}").runner('stop');
//$('#cronometro_' + "{{cron.id}}").runner('reset');
// faz o reset manualmente para que o cronometro retorne para o valor correto
$('#cronometro_' + "{{cron.id}}").val(convertValueToDuration(parseInt("{{cron.duracao_cronometro|duration_to_seconds}}") * 1000));
});
{% endfor %}
});
</script>
{% endblock %}