Browse Source

Adiciona opção de duração do disparo

pull/2871/head
Cesar Carvalho 7 years ago
parent
commit
e5c4d17c0b
  1. 4
      sapl/painel/forms.py
  2. 20
      sapl/painel/migrations/0007_painelconfig_tempo_disparo_termino.py
  3. 6
      sapl/painel/models.py
  4. 26
      sapl/templates/painel/index.html
  5. 1
      sapl/templates/painel/layouts.yaml
  6. 24
      sapl/templates/sessao/painel.html

4
sapl/painel/forms.py

@ -20,8 +20,10 @@ class ConfiguracoesPainelForm(forms.ModelForm):
model = PainelConfig model = PainelConfig
fields = ['cronometro_ordem', fields = ['cronometro_ordem',
'disparo_cronometro', 'disparo_cronometro',
'tempo_disparo_antecedencia'] 'tempo_disparo_antecedencia',
'tempo_disparo_termino']
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(ConfiguracoesPainelForm, self).__init__(*args, **kwargs) super(ConfiguracoesPainelForm, self).__init__(*args, **kwargs)
self.fields['tempo_disparo_antecedencia'].widget.attrs['class'] = 'cronometro' self.fields['tempo_disparo_antecedencia'].widget.attrs['class'] = 'cronometro'
self.fields['tempo_disparo_termino'].widget.attrs['class'] = 'cronometro'

20
sapl/painel/migrations/0007_painelconfig_tempo_disparo_termino.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.20 on 2019-06-14 14:04
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('painel', '0006_auto_20190612_1347'),
]
operations = [
migrations.AddField(
model_name='painelconfig',
name='tempo_disparo_termino',
field=models.DurationField(blank=True, default='00:00:05', null=True, verbose_name='Cronômetros devem permanecer tocando por quanto tempo ao término tempo?'),
),
]

6
sapl/painel/models.py

@ -84,6 +84,12 @@ class PainelConfig(models.Model):
blank=True, blank=True,
null=True) null=True)
tempo_disparo_termino = models.DurationField(
verbose_name=_('Cronômetros devem permanecer tocando por quanto tempo ao término tempo?'),
default="00:00:05",
blank=True,
null=True)
class Meta: class Meta:
verbose_name = _('Configurações do Painel') verbose_name = _('Configurações do Painel')
verbose_name_plural = _('Configurações do Painel') verbose_name_plural = _('Configurações do Painel')

26
sapl/templates/painel/index.html

@ -149,12 +149,34 @@
return voto return voto
} }
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();
}
$(document).ready(function() { $(document).ready(function() {
//TODO: replace by a fancy jQuery clock //TODO: replace by a fancy jQuery clock
startTime(); startTime();
var audioAlertFinish = document.getElementById("audio"); var 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]);
var num_vezes_toca_audio = Math.round(duracao_disparo/audioAlertFinish.duration);
var cronometros_previous = []; var cronometros_previous = [];
{% for cron in cronometros %} {% for cron in cronometros %}
cronometros_previous.push(0); cronometros_previous.push(0);
@ -174,12 +196,12 @@
return h.toString() + ":" + m.toString() + ":" + s.toString(); return h.toString() + ":" + m.toString() + ":" + s.toString();
} }
}).on('runnerFinish', function(eventObject, info){ }).on('runnerFinish', function(eventObject, info){
audioAlertFinish.play(); playAudioNumVezes(audioAlertFinish, num_vezes_toca_audio);
}) })
{% endfor %} {% endfor %}
var tempo_disparo_antecedencia = "{{ painel_config.tempo_disparo_antecedencia }}" var tempo_disparo_antecedencia = "{{ painel_config.tempo_disparo_antecedencia }}"
let tmp = tempo_disparo_antecedencia.split(":"); tmp = tempo_disparo_antecedencia.split(":");
tempo_disparo_antecedencia = checkTime(parseInt(tmp[0])) + ":" + checkTime(parseInt(tmp[1])) + ":" + checkTime(parseInt(tmp[2])); tempo_disparo_antecedencia = checkTime(parseInt(tmp[0])) + ":" + checkTime(parseInt(tmp[1])) + ":" + checkTime(parseInt(tmp[2]));
var counter = 1; var counter = 1;

1
sapl/templates/painel/layouts.yaml

@ -7,3 +7,4 @@ PainelConfig:
{% trans 'Configurações do Painel' %}: {% trans 'Configurações do Painel' %}:
- cronometro_ordem - cronometro_ordem
- disparo_cronometro:6 tempo_disparo_antecedencia:6 - disparo_cronometro:6 tempo_disparo_antecedencia:6
- tempo_disparo_termino:8

24
sapl/templates/sessao/painel.html

@ -99,6 +99,22 @@ function startTime() {
},500); },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();
}
$(document).ready(function(){ $(document).ready(function(){
let pk_sessao = parseInt("{{root_pk}}"); let pk_sessao = parseInt("{{root_pk}}");
@ -127,6 +143,12 @@ $(document).ready(function(){
startTime(); startTime();
let audioAlertFinish = document.getElementById("audio"); 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 %} {% for cron in cronometros %}
$('#cronometro_' + "{{cron.id}}").prop('disabled', false); $('#cronometro_' + "{{cron.id}}").prop('disabled', false);
@ -147,7 +169,7 @@ $(document).ready(function(){
} }
}).on('runnerFinish', function(eventObject, info){ }).on('runnerFinish', function(eventObject, info){
$.get('/painel/cronometro', { tipo: 'cronometro_' + "{{cron.id}}", action: 'stop' } ); $.get('/painel/cronometro', { tipo: 'cronometro_' + "{{cron.id}}", action: 'stop' } );
audioAlertFinish.play(); playAudioNumVezes(audioAlertFinish, num_vezes_toca_audio);
$('#cronometro_' + "{{cron.id}}" + '_Reset').show(); $('#cronometro_' + "{{cron.id}}" + '_Reset').show();
$('#cronometro_' + "{{cron.id}}").runner('stop'); $('#cronometro_' + "{{cron.id}}").runner('stop');
$('#cronometro_' + "{{cron.id}}" + '_Start').text('Iniciar'); $('#cronometro_' + "{{cron.id}}" + '_Start').text('Iniciar');

Loading…
Cancel
Save