Browse Source

FIX #1906 (#1943)

* Fix #1906

* Fix #1906
pull/1962/head
Mariana Mendes 7 years ago
committed by Edward
parent
commit
116b053a70
  1. 3
      sapl/base/forms.py
  2. 20
      sapl/base/migrations/0017_appconfig_cronometro_consideracoes.py
  3. 5
      sapl/base/models.py
  4. 20
      sapl/painel/migrations/0002_auto_20180523_1430.py
  5. 3
      sapl/painel/models.py
  6. 1
      sapl/painel/views.py
  7. 10
      sapl/sessao/views.py
  8. 2
      sapl/templates/base/layouts.yaml
  9. 30
      sapl/templates/painel/index.html
  10. 92
      sapl/templates/sessao/painel.html

3
sapl/base/forms.py

@ -834,6 +834,7 @@ class ConfiguracoesAppForm(ModelForm):
'cronometro_discurso', 'cronometro_discurso',
'cronometro_aparte', 'cronometro_aparte',
'cronometro_ordem', 'cronometro_ordem',
'cronometro_consideracoes',
'mostrar_brasao_painel', 'mostrar_brasao_painel',
'receber_recibo_proposicao'] 'receber_recibo_proposicao']
@ -842,6 +843,8 @@ class ConfiguracoesAppForm(ModelForm):
self.fields['cronometro_discurso'].widget.attrs['class'] = 'cronometro' self.fields['cronometro_discurso'].widget.attrs['class'] = 'cronometro'
self.fields['cronometro_aparte'].widget.attrs['class'] = 'cronometro' self.fields['cronometro_aparte'].widget.attrs['class'] = 'cronometro'
self.fields['cronometro_ordem'].widget.attrs['class'] = 'cronometro' self.fields['cronometro_ordem'].widget.attrs['class'] = 'cronometro'
self.fields['cronometro_consideracoes'].widget.attrs['class'] = 'cronometro'
def clean_mostrar_brasao_painel(self): def clean_mostrar_brasao_painel(self):
mostrar_brasao_painel = self.cleaned_data.get( mostrar_brasao_painel = self.cleaned_data.get(

20
sapl/base/migrations/0017_appconfig_cronometro_consideracoes.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2018-05-23 17:30
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0016_auto_20180326_1840'),
]
operations = [
migrations.AddField(
model_name='appconfig',
name='cronometro_consideracoes',
field=models.TimeField(blank=True, null=True, verbose_name='Cronômetro de Considerações Finais'),
),
]

5
sapl/base/models.py

@ -113,6 +113,11 @@ class AppConfig(models.Model):
blank=True, blank=True,
null=True) null=True)
cronometro_consideracoes = models.TimeField(
verbose_name=_('Cronômetro de Considerações Finais'),
blank=True,
null=True)
mostrar_brasao_painel = models.BooleanField( mostrar_brasao_painel = models.BooleanField(
default=False, default=False,
verbose_name=_('Mostrar brasão da Casa no painel?')) verbose_name=_('Mostrar brasão da Casa no painel?'))

20
sapl/painel/migrations/0002_auto_20180523_1430.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2018-05-23 17:30
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('painel', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='cronometro',
name='tipo',
field=models.CharField(choices=[('A', 'Aparte'), ('D', 'Discurso'), ('O', 'Ordem do dia'), ('C', 'Considerações finais')], max_length=1, verbose_name='Tipo Cronômetro'),
),
]

3
sapl/painel/models.py

@ -26,7 +26,8 @@ class Cronometro(models.Model):
CRONOMETRO_TYPES = ( CRONOMETRO_TYPES = (
('A', _('Aparte')), ('A', _('Aparte')),
('D', _('Discurso')), ('D', _('Discurso')),
('O', _('Ordem do dia')) ('O', _('Ordem do dia')),
('C', _('Considerações finais'))
) )
CRONOMETRO_STATUS = ( CRONOMETRO_STATUS = (

1
sapl/painel/views.py

@ -464,6 +464,7 @@ def get_dados_painel(request, pk):
'cronometro_aparte': get_cronometro_status(request, 'aparte'), 'cronometro_aparte': get_cronometro_status(request, 'aparte'),
'cronometro_discurso': get_cronometro_status(request, 'discurso'), 'cronometro_discurso': get_cronometro_status(request, 'discurso'),
'cronometro_ordem': get_cronometro_status(request, 'ordem'), 'cronometro_ordem': get_cronometro_status(request, 'ordem'),
'cronometro_consideracoes': get_cronometro_status(request, 'consideracoes'),
'status_painel': sessao.painel_aberto, 'status_painel': sessao.painel_aberto,
'brasao': brasao 'brasao': brasao
} }

10
sapl/sessao/views.py

@ -761,6 +761,7 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView):
request.session['discurso'] = 'stop' request.session['discurso'] = 'stop'
request.session['aparte'] = 'stop' request.session['aparte'] = 'stop'
request.session['ordem'] = 'stop' request.session['ordem'] = 'stop'
request.session['consideracoes'] = 'stop'
return TemplateView.get(self, request, *args, **kwargs) return TemplateView.get(self, request, *args, **kwargs)
@ -768,9 +769,10 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView):
cronometro_discurso = AppsAppConfig.attr('cronometro_discurso') cronometro_discurso = AppsAppConfig.attr('cronometro_discurso')
cronometro_aparte = AppsAppConfig.attr('cronometro_aparte') cronometro_aparte = AppsAppConfig.attr('cronometro_aparte')
cronometro_ordem = AppsAppConfig.attr('cronometro_ordem') cronometro_ordem = AppsAppConfig.attr('cronometro_ordem')
cronometro_consideracoes = AppsAppConfig.attr('cronometro_consideracoes')
if (not cronometro_discurso or not cronometro_aparte if (not cronometro_discurso or not cronometro_aparte
or not cronometro_ordem): or not cronometro_ordem or not cronometro_consideracoes):
msg = _( msg = _(
'Você precisa primeiro configurar os cronômetros \ 'Você precisa primeiro configurar os cronômetros \
nas Configurações da Aplicação') nas Configurações da Aplicação')
@ -786,6 +788,9 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView):
m, s, x = cronometro_ordem.isoformat().split(':') m, s, x = cronometro_ordem.isoformat().split(':')
cronometro_ordem = int(m) * 60 + int(s) cronometro_ordem = int(m) * 60 + int(s)
m, s, x = cronometro_consideracoes.isoformat().split(':')
cronometro_consideracoes = int(m) * 60 + int(s)
context = TemplateView.get_context_data(self, **kwargs) context = TemplateView.get_context_data(self, **kwargs)
context.update({ context.update({
'head_title': str(_('Painel Plenário')), 'head_title': str(_('Painel Plenário')),
@ -794,7 +799,8 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView):
'sessaoplenaria': SessaoPlenaria.objects.get(pk=kwargs['pk']), 'sessaoplenaria': SessaoPlenaria.objects.get(pk=kwargs['pk']),
'cronometro_discurso': cronometro_discurso, 'cronometro_discurso': cronometro_discurso,
'cronometro_aparte': cronometro_aparte, 'cronometro_aparte': cronometro_aparte,
'cronometro_ordem': cronometro_ordem}) 'cronometro_ordem': cronometro_ordem,
'cronometro_consideracoes': cronometro_consideracoes})
return context return context

2
sapl/templates/base/layouts.yaml

@ -21,7 +21,7 @@ AppConfig:
- texto_articulado_proposicao texto_articulado_materia texto_articulado_norma - texto_articulado_proposicao texto_articulado_materia texto_articulado_norma
{% trans 'Cronômetros do Painel' %}: {% trans 'Cronômetros do Painel' %}:
- cronometro_discurso cronometro_aparte cronometro_ordem - cronometro_discurso cronometro_aparte cronometro_ordem cronometro_consideracoes
{% trans 'Configurações do Painel' %}: {% trans 'Configurações do Painel' %}:
- mostrar_brasao_painel - mostrar_brasao_painel

30
sapl/templates/painel/index.html

@ -28,7 +28,7 @@
ul, li { ul, li {
list-style-type: none; list-style-type: none;
} }
#date, #sessao_plenaria, #sessao_plenaria_data, #sessao_plenaria_hora_inicio, #message, #cronometro_discurso, #cronometro_aparte, #cronometro_ordem, #relogio, #parlamentares, #votacao, #materia_legislativa_texto, #observacao_materia, #resultado_votacao, #orador { #date, #sessao_plenaria, #sessao_plenaria_data, #sessao_plenaria_hora_inicio, #message, #cronometro_discurso, #cronometro_aparte, #cronometro_ordem, #cronometro_consideracoes, #relogio, #parlamentares, #votacao, #materia_legislativa_texto, #observacao_materia, #resultado_votacao, #orador {
font-family: Verdana; font-family: Verdana;
} }
} }
@ -108,6 +108,9 @@
<tr> <tr>
<td style="font-family:Verdana; text-align:center;"><font size="5" color="white">Questão de Ordem: <span id="cronometro_ordem"></span></font></td> <td style="font-family:Verdana; text-align:center;"><font size="5" color="white">Questão de Ordem: <span id="cronometro_ordem"></span></font></td>
</tr> </tr>
<tr>
<td style="font-family:Verdana; text-align:center;"><font size="5" color="white">Considerações Finais: <span id="cronometro_consideracoes"></span></font></td>
</tr>
</table> </table>
</div> </div>
@ -195,9 +198,20 @@
audioAlertFinish.play(); audioAlertFinish.play();
}); });
$('#cronometro_consideracoes').runner({
autostart: false,
countdown: true,
startAt: {{ 'consideracoes'|cronometro_to_seconds }} * 1000,
stopAt: 0,
milliseconds: false
}).on('runnerFinish', function(eventObject, info){
audioAlertFinish.play();
});
var discurso_previous; var discurso_previous;
var ordem_previous; var ordem_previous;
var aparte_previous; var aparte_previous;
var consideracoes_previous;
var counter = 1; var counter = 1;
(function poll() { (function poll() {
@ -325,6 +339,16 @@
ordem_previous = ordem_current; ordem_previous = ordem_current;
} }
var consideracoes_current = data["cronometro_consideracoes"];
if (!consideracoes_previous){
consideracoes_previous = ''
}
if (consideracoes_current != consideracoes_previous) {
$('#cronometro_consideracoes').runner(consideracoes_current);
consideracoes_previous = consideracoes_current;
}
if($('#cronometro_discurso').runner('info').formattedTime == 30) { if($('#cronometro_discurso').runner('info').formattedTime == 30) {
audioAlertFinish.play(); audioAlertFinish.play();
} }
@ -337,6 +361,10 @@
audioAlertFinish.play(); audioAlertFinish.play();
} }
if($('#cronometro_consideracoes').runner('info').formattedTime == 30) {
audioAlertFinish.play();
}
if (data['materia_legislativa_texto']){ if (data['materia_legislativa_texto']){
$("#materia_legislativa_texto").text(data["materia_legislativa_texto"]); $("#materia_legislativa_texto").text(data["materia_legislativa_texto"]);
} }

92
sapl/templates/sessao/painel.html

@ -69,6 +69,20 @@
</div> </div>
<br/> <br/>
<br/> <br/>
<div class="row">
<div class="col-md-12"><h3>Cronômetro de Considerações Finais</h3></div>
</div>
<div class="row">
<div class="col-xs-2"><input size="2" id="consideracoes" name="consideracoes" value="" readyonly="true" class="form-control"></div>
</div>
<br />
<div class="row">
<div class="col-md-6"><button type="button" id="consideracoesStart" class="btn btn-success">Iniciar</button></div>
<div class="col-md-6"><button type="button" id="consideracoesReset" class="btn btn-success">Reiniciar</button></div>
</div>
<br /><br >
<div class="row"> <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 class="col-md-6"><button type="button" id="sinalSonoro" class="btn btn-success" onclick="document.getElementById('audio').play();">Sinal Sonoro</button></div>
</div> </div>
@ -102,6 +116,7 @@ $(function() {
$('#discurso').prop('disabled', true); $('#discurso').prop('disabled', true);
$('#aparte').prop('disabled', true); $('#aparte').prop('disabled', true);
$('#ordem').prop('disabled', true); $('#ordem').prop('disabled', true);
$('#consideracoes').prop('disabled', true);
$('#discurso').runner({ $('#discurso').runner({
autostart: false, autostart: false,
@ -119,6 +134,8 @@ $(function() {
$('#aparteReset').prop('disabled', false); $('#aparteReset').prop('disabled', false);
$('#ordemStart').prop('disabled', false); $('#ordemStart').prop('disabled', false);
$('#ordemReset').prop('disabled', false); $('#ordemReset').prop('disabled', false);
$('#consideracoesStart').prop('disabled', false);
$('#consideracoesReset').prop('disabled', false);
}); });
@ -135,6 +152,8 @@ $(function() {
$('#aparteReset').prop('disabled', false); $('#aparteReset').prop('disabled', false);
$('#ordemStart').prop('disabled', false); $('#ordemStart').prop('disabled', false);
$('#ordemReset').prop('disabled', false); $('#ordemReset').prop('disabled', false);
$('#consideracoesStart').prop('disabled', false);
$('#consideracoesReset').prop('disabled', false);
} else { } else {
@ -147,6 +166,8 @@ $(function() {
$('#aparteReset').prop('disabled', false); $('#aparteReset').prop('disabled', false);
$('#ordemStart').prop('disabled', false); $('#ordemStart').prop('disabled', false);
$('#ordemReset').prop('disabled', false); $('#ordemReset').prop('disabled', false);
$('#consideracoesStart').prop('disabled', false);
$('#consideracoesReset').prop('disabled', false);
} }
}); });
@ -174,6 +195,8 @@ $(function() {
$('#discursoReset').prop('disabled', false); $('#discursoReset').prop('disabled', false);
$('#ordemStart').prop('disabled', false); $('#ordemStart').prop('disabled', false);
$('#ordemReset').prop('disabled', false); $('#ordemReset').prop('disabled', false);
$('#consideracoesStart').prop('disabled', false);
$('#consideracoesReset').prop('disabled', false);
}); });
@ -189,6 +212,8 @@ $(function() {
$('#discursoReset').prop('disabled', false); $('#discursoReset').prop('disabled', false);
$('#ordemStart').prop('disabled', false); $('#ordemStart').prop('disabled', false);
$('#ordemReset').prop('disabled', false); $('#ordemReset').prop('disabled', false);
$('#consideracoesStart').prop('disabled', false);
$('#consideracoesReset').prop('disabled', false);
} else { } else {
$.get('/painel/cronometro', { tipo: 'aparte', action: 'stop' } ); $.get('/painel/cronometro', { tipo: 'aparte', action: 'stop' } );
@ -200,6 +225,8 @@ $(function() {
$('#discursoReset').prop('disabled', false); $('#discursoReset').prop('disabled', false);
$('#ordemStart').prop('disabled', false); $('#ordemStart').prop('disabled', false);
$('#ordemReset').prop('disabled', false); $('#ordemReset').prop('disabled', false);
$('#consideracoesStart').prop('disabled', false);
$('#consideracoesReset').prop('disabled', false);
} }
}); });
@ -227,6 +254,8 @@ $(function() {
$('#discursoReset').prop('disabled', false); $('#discursoReset').prop('disabled', false);
$('#aparteStart').prop('disabled', false); $('#aparteStart').prop('disabled', false);
$('#aparteReset').prop('disabled', false); $('#aparteReset').prop('disabled', false);
$('#consideracoesStart').prop('disabled', false);
$('#consideracoesReset').prop('disabled', false);
}); });
$('#ordemStart').click(function() { $('#ordemStart').click(function() {
@ -241,6 +270,8 @@ $(function() {
$('#discursoReset').prop('disabled', false); $('#discursoReset').prop('disabled', false);
$('#aparteStart').prop('disabled', false); $('#aparteStart').prop('disabled', false);
$('#aparteReset').prop('disabled', false); $('#aparteReset').prop('disabled', false);
$('#consideracoesStart').prop('disabled', false);
$('#consideracoesReset').prop('disabled', false);
} else { } else {
@ -253,6 +284,8 @@ $(function() {
$('#discursoReset').prop('disabled', false); $('#discursoReset').prop('disabled', false);
$('#aparteStart').prop('disabled', false); $('#aparteStart').prop('disabled', false);
$('#aparteReset').prop('disabled', false); $('#aparteReset').prop('disabled', false);
$('#consideracoesStart').prop('disabled', false);
$('#consideracoesReset').prop('disabled', false);
} }
}); });
@ -264,6 +297,65 @@ $(function() {
$('#ordem').runner('reset'); $('#ordem').runner('reset');
}); });
$('#consideracoes').runner({
autostart: false,
countdown: true,
startAt: {{cronometro_consideracoes}} * 1000,
stopAt: 0,
milliseconds: false
}).on('runnerFinish', function(eventObject, info){
$.get('/painel/cronometro', { tipo: 'consideracoes', action: 'stop' } );
$('#consideracoesReset').show();
$('#consideracoes').runner('stop');
$('#consideracoesStart').text('Iniciar');
$('#discursoStart').prop('disabled', false);
$('#discursoReset').prop('disabled', false);
$('#ordemStart').prop('disabled', false);
$('#ordemReset').prop('disabled', false);
$('#aparteStart').prop('disabled', false);
$('#aparteReset').prop('disabled', false);
});
$('#consideracoesStart').click(function(){
if ($('#consideracoesStart').text() == 'Iniciar') {
$.get('/painel/cronometro', { tipo: 'consideracoes', action: 'start' } );
$('#consideracoesReset').hide();
$('#consideracoes').runner('start');
$('#consideracoesStart').text('Parar');
$('#discursoStart').prop('disabled', false);
$('#discursoReset').prop('disabled', false);
$('#ordemStart').prop('disabled', false);
$('#ordemReset').prop('disabled', false);
$('#aparteStart').prop('disabled', false);
$('#aparteReset').prop('disabled', false);
} else {
$.get('/painel/cronometro', { tipo: 'consideracoes', action: 'stop' } );
$('#consideracoesReset').show();
$('#consideracoes').runner('stop');
$('#consideracoesStart').text('Iniciar');
$('#discursoStart').prop('disabled', false);
$('#discursoReset').prop('disabled', false);
$('#ordemStart').prop('disabled', false);
$('#ordemReset').prop('disabled', false);
$('#aparteStart').prop('disabled', false);
$('#aparteReset').prop('disabled', false);
}
});
$('#consideracoesReset').click(function() {
$.get('/painel/cronometro', { tipo: 'consideracoes', action: 'reset' } );
$('#consideracoes').runner('stop');
$('#consideracoes').runner('reset');
});
}); });
function switch_painel(aberto) { function switch_painel(aberto) {

Loading…
Cancel
Save