Browse Source

Fix #918

pull/919/head
Eduardo Calil 9 years ago
parent
commit
d80e9943b0
  1. 11
      sapl/base/forms.py
  2. 30
      sapl/base/migrations/0032_auto_20170308_1006.py
  3. 15
      sapl/base/models.py
  4. 11
      sapl/base/templatetags/common_tags.py
  5. 1
      sapl/painel/views.py
  6. 24
      sapl/sessao/views.py
  7. 1
      sapl/static/js/app.js
  8. 3
      sapl/templates/base/layouts.yaml
  9. 8
      sapl/templates/painel/index.html
  10. 7
      sapl/templates/sessao/painel.html

11
sapl/base/forms.py

@ -694,7 +694,16 @@ class ConfiguracoesAppForm(ModelForm):
'texto_articulado_proposicao',
'texto_articulado_materia',
'texto_articulado_norma',
'proposicao_incorporacao_obrigatoria']
'proposicao_incorporacao_obrigatoria',
'cronometro_discurso',
'cronometro_aparte',
'cronometro_ordem']
def __init__(self, *args, **kwargs):
super(ConfiguracoesAppForm, self).__init__(*args, **kwargs)
self.fields['cronometro_discurso'].widget.attrs['class'] = 'cronometro'
self.fields['cronometro_aparte'].widget.attrs['class'] = 'cronometro'
self.fields['cronometro_ordem'].widget.attrs['class'] = 'cronometro'
class RecuperarSenhaForm(PasswordResetForm):

30
sapl/base/migrations/0032_auto_20170308_1006.py

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2017-03-08 10:06
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0031_auto_20170203_1019'),
]
operations = [
migrations.AddField(
model_name='appconfig',
name='cronometro_aparte',
field=models.TimeField(blank=True, null=True, verbose_name='Cronômetro do Aparte'),
),
migrations.AddField(
model_name='appconfig',
name='cronometro_discurso',
field=models.TimeField(blank=True, null=True, verbose_name='Cronômetro do Discurso'),
),
migrations.AddField(
model_name='appconfig',
name='cronometro_ordem',
field=models.TimeField(blank=True, null=True, verbose_name='Cronômetro da Ordem'),
),
]

15
sapl/base/models.py

@ -114,6 +114,21 @@ class AppConfig(models.Model):
verbose_name=_('Regra de incorporação de proposições e protocolo'),
max_length=1, choices=POLITICA_PROTOCOLO_CHOICES, default='O')
cronometro_discurso = models.TimeField(
verbose_name=_('Cronômetro do Discurso'),
blank=True,
null=True)
cronometro_aparte = models.TimeField(
verbose_name=_('Cronômetro do Aparte'),
blank=True,
null=True)
cronometro_ordem = models.TimeField(
verbose_name=_('Cronômetro da Ordem'),
blank=True,
null=True)
class Meta:
verbose_name = _('Configurações da Aplicação')
verbose_name_plural = _('Configurações da Aplicação')

11
sapl/base/templatetags/common_tags.py

@ -121,3 +121,14 @@ def url(value):
if value.startswith('http://') or value.startswith('https://'):
return True
return False
@register.filter
def cronometro_to_seconds(value):
if not AppConfig.attr('cronometro_' + value):
return 0
m, s, x = AppConfig.attr(
'cronometro_' + value).isoformat().split(':')
return 60 * int(m) + int(s)

1
sapl/painel/views.py

@ -8,6 +8,7 @@ from django.http.response import Http404, HttpResponseRedirect
from django.shortcuts import render
from django.utils.translation import ugettext_lazy as _
from sapl.base.models import AppConfig as AppsAppConfig
from sapl.crud.base import Crud
from sapl.painel.apps import AppConfig
from sapl.painel.models import Painel

24
sapl/sessao/views.py

@ -590,16 +590,38 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView):
def get(self, request, *args, **kwargs):
if request.user.is_anonymous():
self.template_name = 'painel/index.html'
return TemplateView.get(self, request, *args, **kwargs)
def get_context_data(self, **kwargs):
cronometro_discurso = AppsAppConfig.attr('cronometro_discurso')
cronometro_aparte = AppsAppConfig.attr('cronometro_aparte')
cronometro_ordem = AppsAppConfig.attr('cronometro_ordem')
if not cronometro_discurso or not cronometro_aparte or not cronometro_ordem:
msg = _(
'Você precisa primeiro configurar os cronômetros nas Configurações da Aplicação')
messages.add_message(self.request, messages.ERROR, msg)
else:
m, s, x = cronometro_discurso.isoformat().split(':')
cronometro_discurso = int(m) * 60 + int(s)
m, s, x = cronometro_aparte.isoformat().split(':')
cronometro_aparte = int(m) * 60 + int(s)
m, s, x = cronometro_ordem.isoformat().split(':')
cronometro_ordem = int(m) * 60 + int(s)
context = TemplateView.get_context_data(self, **kwargs)
context.update({
'head_title': str(_('Painel Plenário')),
'sessao_id': kwargs['pk'],
'root_pk': kwargs['pk'],
'sessaoplenaria': SessaoPlenaria.objects.get(pk=kwargs['pk'])})
'sessaoplenaria': SessaoPlenaria.objects.get(pk=kwargs['pk']),
'cronometro_discurso': cronometro_discurso,
'cronometro_aparte': cronometro_aparte,
'cronometro_ordem': cronometro_ordem})
return context

1
sapl/static/js/app.js

@ -48,6 +48,7 @@ function refreshMask() {
$('.dateinput').mask('00/00/0000', {placeholder:"__/__/____"});
$('.hora').mask("00:00", {placeholder:"hh:mm"});
$('.hora_hms').mask("00:00:00", {placeholder:"hh:mm:ss"});
$('.cronometro').mask("00:00", {placeholder:"mm:ss"});
}
function autorModal() {

3
sapl/templates/base/layouts.yaml

@ -20,6 +20,9 @@ AppConfig:
{% trans 'Textos Articulados' %}:
- texto_articulado_proposicao texto_articulado_materia texto_articulado_norma
{% trans 'Cronômetros do Painel' %}:
- cronometro_discurso cronometro_aparte cronometro_ordem
TipoAutor:
{% trans 'Tipo Autor' %}:
- content_type:4 descricao

8
sapl/templates/painel/index.html

@ -1,5 +1,6 @@
{% load i18n %}
{% load staticfiles sass_tags %}
{% load common_tags %}
<!DOCTYPE HTML>
<!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]-->
<!--[if gt IE 8]><!-->
@ -39,6 +40,7 @@
<table style="width:100%">
<tr>
<th style="text-align:center"><font color="white" size="4"><span id="sessao_plenaria_data"></span></font></th>
<th style="text-align:center"><font color="white" size="4"><span id="sessao_plenaria_hora_inicio"></span></font></th>
</tr>
</table>
@ -119,7 +121,7 @@
$('#cronometro_discurso').runner({
autostart: false,
countdown: true,
startAt: 5 * 60 * 1000, // 5 minutes
startAt: {{ 'discurso'|cronometro_to_seconds }} * 1000,
stopAt: 0,
milliseconds: false
}).on('runnerFinish', function(eventObject, info){
@ -129,7 +131,7 @@
$('#cronometro_aparte').runner({
autostart: false,
countdown: true,
startAt: 3 * 60 * 1000, // 3 minutes
startAt: {{ 'aparte'|cronometro_to_seconds }} * 1000,
stopAt: 0,
milliseconds: false
}).on('runnerFinish', function(eventObject, info){
@ -139,7 +141,7 @@
$('#cronometro_ordem').runner({
autostart: false,
countdown: true,
startAt: 2 * 60 * 1000, // 2 minutes
startAt: {{ 'ordem'|cronometro_to_seconds }} * 1000,
stopAt: 0,
milliseconds: false
}).on('runnerFinish', function(eventObject, info){

7
sapl/templates/sessao/painel.html

@ -21,6 +21,7 @@
<div class="col-md-6"><a href="{% url 'sapl.painel:painel_controlador' %}" class="btn btn-primary btn-sm active">Controlador Painel</a></div>
</div>
<br />
<h1>Operação do Painel Eletrônico</h1>
<h2><span id="relogio"></span></h2>
<br />
@ -101,7 +102,7 @@ $(function() {
$('#discurso').runner({
autostart: false,
countdown: true,
startAt: 60 * 5 * 1000,
startAt: {{cronometro_discurso}} * 1000,
stopAt: 0,
milliseconds: false
}).on('runnerFinish', function(eventObject, info){
@ -156,7 +157,7 @@ $(function() {
$('#aparte').runner({
autostart: false,
countdown: true,
startAt: 60 * 3 * 1000,
startAt: {{cronometro_aparte}} * 1000,
stopAt: 0,
milliseconds: false
}).on('runnerFinish', function(eventObject, info){
@ -210,7 +211,7 @@ $(function() {
$('#ordem').runner({
autostart: false,
countdown: true,
startAt: 60 * 2 * 1000,
startAt: {{cronometro_ordem}} * 1000,
stopAt: 0,
milliseconds: false
}).on('runnerFinish', function(eventObject, info){

Loading…
Cancel
Save