Browse Source

Merge branch 'master' into compilacao

pull/6/head
LeandroRoberto 9 years ago
parent
commit
87090feb08
  1. 34
      painel/migrations/0001_initial.py
  2. 27
      painel/migrations/0002_auto_20150908_1818.py
  3. 19
      painel/migrations/0003_cronometro_counter.py
  4. 45
      painel/migrations/0004_auto_20150908_1858.py
  5. 23
      painel/migrations/0005_auto_20150909_1414.py
  6. 39
      painel/models.py
  7. 11
      painel/urls.py
  8. 72
      painel/views.py
  9. 1
      requirements/dev-requirements.txt
  10. 1
      requirements/requirements.txt
  11. 13
      scripts/voto_parlamentar.sql
  12. 14
      sessao/urls.py
  13. 102
      sessao/views.py
  14. 45
      templates/painel/controlador.html
  15. 24
      templates/painel/controller.html
  16. 21
      templates/sessao/delete_orador.html
  17. 56
      templates/sessao/oradorExpediente.html
  18. 27
      templates/sessao/painel.html
  19. 1
      templates/sessao/sessaoplenaria_detail.html

34
painel/migrations/0001_initial.py

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.CreateModel(
name='Cronometro',
fields=[
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
('start', models.PositiveIntegerField(verbose_name='Iniciar cronômetro')),
('reset', models.PositiveIntegerField(verbose_name='Reiniciar cronômetro')),
('stop', models.PositiveIntegerField(verbose_name='Parar cronômetro')),
('data_painel', models.DateField(verbose_name='Data cronômetro')),
('tipo', models.CharField(max_length=1, choices=[('A', 'Aparte'), ('D', 'Discurso'), ('O', 'Ordem do dia')], verbose_name='Tipo Cronômetro')),
],
),
migrations.CreateModel(
name='Painel',
fields=[
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
('abrir', models.PositiveIntegerField(verbose_name='Abrir painel', default=0)),
('fechar', models.PositiveIntegerField(verbose_name='Fechar painel', default=1)),
('data_painel', models.DateField(verbose_name='Data painel')),
('mostrar', models.CharField(max_length=1, choices=[('C', 'Completo'), ('P', 'Parlamentares'), ('V', 'Votação'), ('M', 'Mensagem')], default='C')),
],
),
]

27
painel/migrations/0002_auto_20150908_1818.py

@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('painel', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='painel',
name='abrir',
),
migrations.RemoveField(
model_name='painel',
name='fechar',
),
migrations.AddField(
model_name='painel',
name='aberto',
field=models.BooleanField(verbose_name='Abrir painel', default=False),
),
]

19
painel/migrations/0003_cronometro_counter.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('painel', '0002_auto_20150908_1818'),
]
operations = [
migrations.AddField(
model_name='cronometro',
name='counter',
field=models.PositiveIntegerField(default=0),
),
]

45
painel/migrations/0004_auto_20150908_1858.py

@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('painel', '0003_cronometro_counter'),
]
operations = [
migrations.RemoveField(
model_name='cronometro',
name='counter',
),
migrations.RemoveField(
model_name='cronometro',
name='reset',
),
migrations.RemoveField(
model_name='cronometro',
name='start',
),
migrations.RemoveField(
model_name='cronometro',
name='stop',
),
migrations.AddField(
model_name='cronometro',
name='status',
field=models.CharField(max_length=1, verbose_name='Status do cronômetro', choices=[('I', 'Start'), ('R', 'Reset'), ('S', 'Stop')], default='S'),
),
migrations.AddField(
model_name='cronometro',
name='time',
field=models.FloatField(verbose_name='Start time', default=0),
),
migrations.AlterField(
model_name='cronometro',
name='data_painel',
field=models.DateField(verbose_name='Data do cronômetro'),
),
]

23
painel/migrations/0005_auto_20150909_1414.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('painel', '0004_auto_20150908_1858'),
]
operations = [
migrations.RenameField(
model_name='cronometro',
old_name='data_painel',
new_name='data_cronometro',
),
migrations.RemoveField(
model_name='cronometro',
name='time',
),
]

39
painel/models.py

@ -1,3 +1,38 @@
# from django.db import models from django.db import models
# Create your models here.
class Painel(models.Model):
PAINEL_TYPES = (
('C', 'Completo'),
('P', 'Parlamentares'),
('V', 'Votação'),
('M', 'Mensagem'),
)
aberto = models.BooleanField(verbose_name='Abrir painel', default=False)
data_painel = models.DateField(verbose_name='Data painel')
mostrar = models.CharField(max_length=1,
choices=PAINEL_TYPES, default='C')
class Cronometro(models.Model):
CRONOMETRO_TYPES = (
('A', 'Aparte'),
('D', 'Discurso'),
('O', 'Ordem do dia')
)
CRONOMETRO_STATUS = (
('I', 'Start'),
('R', 'Reset'),
('S', 'Stop'),
)
status = models.CharField(
max_length=1,
verbose_name='Status do cronômetro',
choices=CRONOMETRO_STATUS,
default='S')
data_cronometro = models.DateField(verbose_name='Data do cronômetro')
tipo = models.CharField(
max_length=1, choices=CRONOMETRO_TYPES, verbose_name='Tipo Cronômetro')

11
painel/urls.py

@ -1,12 +1,17 @@
from django.conf.urls import url from django.conf.urls import include, url
from .views import (json_presenca, json_votacao, painel_parlamentares_view, from .views import (controlador_painel, cronometro_painel_crud, json_presenca,
painel_view, painel_votacao_view) json_votacao, painel_parlamentares_view, painel_view,
painel_votacao_view)
urlpatterns = [ urlpatterns = [
url(r'^sistema/painel$', painel_view), url(r'^sistema/painel$', painel_view),
url(r'^sistema/painel/controlador',
controlador_painel, name='controlador_painel'),
url(r'^sistema/painel/parlamentares', painel_parlamentares_view), url(r'^sistema/painel/parlamentares', painel_parlamentares_view),
url(r'^sistema/painel/votacao', painel_votacao_view), url(r'^sistema/painel/votacao', painel_votacao_view),
url(r'^sistema/painel/json_presenca', json_presenca, name='json_presenca'), url(r'^sistema/painel/json_presenca', json_presenca, name='json_presenca'),
url(r'^sistema/painel/json_votacao', json_votacao, name='json_votacao'), url(r'^sistema/painel/json_votacao', json_votacao, name='json_votacao'),
url(r'^sistema/painel/cronometro',
include(cronometro_painel_crud.urls)),
] ]

72
painel/views.py

@ -1,16 +1,72 @@
from datetime import date
from django.core import serializers from django.core import serializers
from django.http import HttpResponse, JsonResponse from django.http import HttpResponse, JsonResponse
from django.shortcuts import render from django.shortcuts import render
from django.utils.translation import ugettext_lazy as _
from painel.models import Painel
from parlamentares.models import Filiacao from parlamentares.models import Filiacao
from sapl.crud import build_crud
from sessao.models import (OrdemDia, PresencaOrdemDia, RegistroVotacao, from sessao.models import (OrdemDia, PresencaOrdemDia, RegistroVotacao,
SessaoPlenaria, SessaoPlenariaPresenca, SessaoPlenaria, SessaoPlenariaPresenca,
VotoParlamentar) VotoParlamentar)
from .models import Cronometro
cronometro_painel_crud = build_crud(
Cronometro, '', [
[_('Cronometro'),
[('status', 3), ('data_cronometro', 6),
('tipo', 3)]],
])
# REST WS
def controlador_painel(request):
painel_created = Painel.objects.get_or_create(data_painel=date.today())
painel = painel_created[0]
if request.method == 'POST':
if 'start-painel' in request.POST:
painel.aberto = True
painel.save()
elif 'stop-painel' in request.POST:
painel.aberto = False
painel.save()
elif 'save-painel' in request.POST:
painel.mostrar = request.POST['tipo_painel']
painel.save()
context = {'painel': painel, 'PAINEL_TYPES': Painel.PAINEL_TYPES}
return render(request, 'painel/controller.html', context)
def cronometro_painel(request):
print(request.POST)
return HttpResponse({})
def painel_view(request):
context = {'head_title': 'Painel Plenário',
'title': '3a. Sessao Ordinária do Município XYZ'}
return render(request, 'painel/index.html', {'context': context})
def painel_parlamentares_view(request):
return render(request, 'painel/parlamentares.html')
def painel_votacao_view(request):
return render(request, 'painel/votacao.html')
# REST web services # REST web services
def json_presenca(request): def json_presenca(request):
presencas = PresencaOrdemDia.objects.filter(sessao_plenaria_id=50) presencas = PresencaOrdemDia.objects.filter(sessao_plenaria_id=50)
parlamentares = [] parlamentares = []
@ -93,19 +149,3 @@ def json_votacao(request):
"presentes_sessao_plenaria": presentes_sessao_plenaria, "presentes_sessao_plenaria": presentes_sessao_plenaria,
} }
return JsonResponse(votacao_json) return JsonResponse(votacao_json)
# UI views
def painel_view(request):
context = {'head_title': 'Painel Plenário',
'title': '3a. Sessao Ordinária do Município XYZ'}
return render(request, 'painel/index.html', {'context': context})
def painel_parlamentares_view(request):
return render(request, 'painel/parlamentares.html')
def painel_votacao_view(request):
return render(request, 'painel/votacao.html')

1
requirements/dev-requirements.txt

@ -5,5 +5,6 @@ django-extensions
flake8 flake8
ipdb ipdb
isort isort
autopep8
pygraphviz==1.3rc2 pygraphviz==1.3rc2
pytest-ipdb==0.1-prerelease2 pytest-ipdb==0.1-prerelease2

1
requirements/requirements.txt

@ -12,4 +12,5 @@ libsass
psycopg2 psycopg2
pytz pytz
PyYAML PyYAML
trml2pdf>=0.3
Unipath Unipath

13
scripts/voto_parlamentar.sql

@ -0,0 +1,13 @@

INSERT INTO sessao_votoparlamentar (id, parlamentar_id, voto, votacao_id) values (1, 21, 'S', 83);
INSERT INTO sessao_votoparlamentar (id, parlamentar_id, voto, votacao_id) values (2, 23, 'S', 83);
INSERT INTO sessao_votoparlamentar (id, parlamentar_id, voto, votacao_id) values (3, 33, 'S', 83);
INSERT INTO sessao_votoparlamentar (id, parlamentar_id, voto, votacao_id) values (4, 112, 'S', 83);
INSERT INTO sessao_votoparlamentar (id, parlamentar_id, voto, votacao_id) values (5, 117, 'S', 83);
INSERT INTO sessao_votoparlamentar (id, parlamentar_id, voto, votacao_id) values (9, 116, 'N', 83);
INSERT INTO sessao_votoparlamentar (id, parlamentar_id, voto, votacao_id) values (6, 120, 'N', 83);
INSERT INTO sessao_votoparlamentar (id, parlamentar_id, voto, votacao_id) values (7, 121, 'N', 83);
INSERT INTO sessao_votoparlamentar (id, parlamentar_id, voto, votacao_id) values (8, 122, 'N', 83);
SELECT * FROM sessao_votoparlamentar;

14
sessao/urls.py

@ -1,8 +1,9 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from sessao.views import (ExpedienteView, OradorExpedienteDelete,
from sessao.views import (ExpedienteView, PainelView, PresencaOrdemDiaView, OradorExpedienteView, PainelView,
PresencaView, sessao_crud, tipo_expediente_crud, PresencaOrdemDiaView, PresencaView, sessao_crud,
tipo_resultado_votacao_crud, tipo_sessao_crud) tipo_expediente_crud, tipo_resultado_votacao_crud,
tipo_sessao_crud)
urlpatterns_sessao = sessao_crud.urlpatterns + [ urlpatterns_sessao = sessao_crud.urlpatterns + [
url(r'^(?P<pk>\d+)/expediente$', url(r'^(?P<pk>\d+)/expediente$',
@ -14,6 +15,11 @@ urlpatterns_sessao = sessao_crud.urlpatterns + [
url(r'^(?P<pk>\d+)/presencaordemdia$', url(r'^(?P<pk>\d+)/presencaordemdia$',
PresencaOrdemDiaView.as_view(), PresencaOrdemDiaView.as_view(),
name='presencaordemdia'), name='presencaordemdia'),
url(r'^(?P<pk>\d+)/oradorexpediente$',
OradorExpedienteView.as_view(), name='oradorexpediente'),
url(r'^(?P<pk>\d+)/oradorexpediente/excluir/(?P<oid>\d+)$',
OradorExpedienteDelete.as_view(), name='oradorexcluir'),
] ]
sessao_urls = urlpatterns_sessao, sessao_crud.namespace, sessao_crud.namespace sessao_urls = urlpatterns_sessao, sessao_crud.namespace, sessao_crud.namespace

102
sessao/views.py

@ -2,11 +2,13 @@ from django import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from extra_views import InlineFormSetView from extra_views import InlineFormSetView
from parlamentares.models import Parlamentar from parlamentares.models import Parlamentar
from sapl.crud import build_crud from sapl.crud import build_crud
from .models import (ExpedienteMateria, ExpedienteSessao, OrdemDia,
PresencaOrdemDia, RegistroVotacao, SessaoPlenaria, from .models import (ExpedienteMateria, ExpedienteSessao, OradorExpediente,
SessaoPlenariaPresenca, TipoExpediente, OrdemDia, PresencaOrdemDia, RegistroVotacao,
SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente,
TipoResultadoVotacao, TipoSessaoPlenaria) TipoResultadoVotacao, TipoSessaoPlenaria)
tipo_sessao_crud = build_crud( tipo_sessao_crud = build_crud(
@ -211,3 +213,97 @@ class PresencaOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
yield (parlamentar, False) yield (parlamentar, False)
else: else:
yield (parlamentar, True) yield (parlamentar, True)
class OradorForm(forms.Form):
numero_ordem = forms.IntegerField(required=True)
parlamentar = forms.CharField(required=True, max_length=20)
url_discurso = forms.CharField(required=False, max_length=100)
class OradorDeleteForm(forms.Form):
pass
class OradorExpedienteDelete(FormMixin, sessao_crud.CrudDetailView):
template_name = 'sessao/delete_orador.html'
form_class = OradorDeleteForm
def post(self, request, *args, **kwargs):
self.object = self.get_object()
current_url = request.get_full_path()
words = current_url.split('/')
form = OradorDeleteForm(request.POST)
if form.is_valid():
orador = OradorExpediente.objects.get(
sessao_plenaria_id=self.object.id,
parlamentar_id=words[-1])
orador.delete()
return self.form_valid(form)
else:
return self.form_invalid(form)
def get_success_url(self):
return self.detail_url
class OradorExpedienteView(FormMixin, sessao_crud.CrudDetailView):
template_name = 'sessao/oradorExpediente.html'
form_class = OradorForm
def get(self, request, *args, **kwargs):
self.object = self.get_object()
context = self.get_context_data(object=self.object)
return self.render_to_response(context)
def get_candidatos_orador(self):
self.object = self.get_object()
lista_parlamentares = []
lista_oradores = []
for parlamentar in Parlamentar.objects.all():
if parlamentar.ativo:
lista_parlamentares.append(parlamentar)
for orador in OradorExpediente.objects.filter(
sessao_plenaria_id=self.object.id):
parlamentar = Parlamentar.objects.get(
id=orador.parlamentar_id)
lista_oradores.append(parlamentar)
lista = list(set(lista_parlamentares) - set(lista_oradores))
lista.sort(key=lambda x: x.nome_parlamentar)
return lista
def get_oradores(self):
self.object = self.get_object()
for orador in OradorExpediente.objects.filter(
sessao_plenaria_id=self.object.id):
numero_ordem = orador.numero_ordem
url_discurso = orador.url_discurso
parlamentar = Parlamentar.objects.get(
id=orador.parlamentar_id)
yield(numero_ordem, url_discurso, parlamentar)
def post(self, request, *args, **kwargs):
self.object = self.get_object()
print(request.POST['numero_ordem'], request.POST['parlamentar'])
form = OradorForm(request.POST)
if form.is_valid():
orador = OradorExpediente()
orador.sessao_plenaria_id = self.object.id
orador.numero_ordem = request.POST['numero_ordem']
orador.parlamentar = Parlamentar.objects.get(
id=request.POST['parlamentar'])
orador.url_discurso = request.POST['url_discurso']
orador.save()
return self.form_valid(form)
else:
return self.form_invalid(form)
def get_success_url(self):
return self.detail_url

45
templates/painel/controlador.html

@ -1,45 +0,0 @@
{% load i18n %}
{% load staticfiles %}
<!DOCTYPE HTML>
<!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]-->
<!--[if gt IE 8]><!-->
<html lang="en">
<!--<![endif]-->
<head>
<meta charset="UTF-8">
<!-- TODO: does it need this head_title here? -->
<title>{% block head_title %}{% trans 'SAPL - Sistema de Apoio ao Processo Legislativo' %}{% endblock %}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript" src="{% static 'foundation/js/vendor/jquery.js' %}"></script>
<STYLE type="text/css">
@media screen {
body {font-size: medium; color: white; line-height: 1em; background: black;}
}
</STYLE>
</head>
<body>
STATUS SESSÃO:<br/>
<button id="open-votacao">Iniciar Votação</button>
<button id="close-votacao">Fechar Votação</button>
<br/>
CRONÔMETROS:<br/>
<button id="init-stopwatch-discurso">Iniciar Cronômetro discurso</button>
<button id="init-stopwatch-aparte">Iniciar Cronômetro aparte</button>
<button id="init-stopwatch-questaoordem">Iniciar Cronômetro Questão de Ordem</button>
<br/>
<button id="stop-stopwatch-discurso">Parar Cronômetro discurso</button>
<button id="stop-stopwatch-aparte">Parar Cronômetro aparte</button>
<button id="stop-stopwatch-questaoordem">Parar Cronômetro Questão de Ordem</button>
<br/>
<button id="reset-stopwatch-discurso">Reiniciar Cronômetro discurso</button>
<button id="reset-stopwatch-aparte">Reiniciar Cronômetro aparte</button>
<button id="reset-stopwatch-questaoordem">Reiniciar Cronômetro Questão de Ordem</button>
<br/>
</body>
</html>

24
templates/painel/controller.html

@ -0,0 +1,24 @@
{% extends 'base.html' %}
{% load i18n %}
{% block base_content %}
STATUS:
{% if painel.aberto %}
ABERTO
{% else %}
FECHADO
{% endif %}
<br/>
<form method="post">
{% csrf_token %}
Tipo de painel: {{ painel.get_mostrar_display }}</br>
{% for id, value in PAINEL_TYPES %}
<input type="radio" name="tipo_painel" id="tipo_painel{{ forloop.counter }}" value="{{ id }}" {% if id == painel.mostrar %}checked="checked" {% endif %}>
<label for="tipo_painel{{ forloop.counter }}">{{ value }}</label><br />
{% endfor %}
</br>
<input type="submit" name="start-painel" value="Abrir Painel">
<input type="submit" name="stop-painel" value="Fechar Painel">
<input type="submit" name="save-painel" value="Salvar">
</form>
{% endblock %}

21
templates/sessao/delete_orador.html

@ -0,0 +1,21 @@
{% extends "base.html" %}
{% load i18n %}
{% block base_content %}
<form action="" method="post">{% csrf_token %}
<div class="callout panel text-center radius clearfix">
<p>
{% blocktrans %}
Tem certeza que deseja apagar o orador?
{% endblocktrans %}
</p>
<div class="button-group">
<a href="{{ view.detail_url }}" class="button button radius alert">{% trans 'Cancelar' %}</a>
<input name="submit" value="{% trans 'Confirmar' %}" class="submit button button radius success" type="submit"></li>
</div>
</div>
</form>
{% endblock %}

56
templates/sessao/oradorExpediente.html

@ -0,0 +1,56 @@
{% extends "sessao/sessaoplenaria_detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block detail_content %}
<fieldset>
<legend>Oradores do Expediente</legend>
<ul class="small-block-grid-4 medium-block-grid-4 large-block-grid-4">
<li>Ordem de pronunciamento</li>
<li>Parlamentar</li>
<li>URL Discurso</li>
<li>Excluir</li>
</ul>
<form method="post" action="./oradorexpediente">
{% csrf_token %}
{% for numero_ordem, url_discurso, parlamentar in view.get_oradores %}
<ul class="small-block-grid-4 medium-block-grid-4 large-block-grid-4">
<li><input size="2" type="text" id="numero_ordem" name="numero_ordem" value="{{numero_ordem}}" /></li>
<li>{{parlamentar.nome_parlamentar }}</li>
<li>{% if not url_discurso %}Orador sem discurso cadastrado{% else %}{{url_discurso}}{% endif %}</li>
<li><a id="excluir-orador" href="{% url 'sessaoplenaria:oradorexcluir' object.pk parlamentar.id %}">Excluir</a></li>
</ul>
{% endfor %}
<br />
<input type="submit" value="Atualizar" />
</form>
</fieldset>
<fieldset>
<legend>Adicionar Orador</legend>
<form method="POST" action="{% url 'sessaoplenaria:oradorexpediente' object.pk %}">
{% csrf_token %}
<ul class="small-block-grid-3 medium-block-grid-3 large-block-grid-3">
<li>Ordem de pronunciamento</li>
<li>Parlamentar</li>
<li>URL Discurso</li>
</ul>
<ul class="small-block-grid-3 medium-block-grid-3 large-block-grid-3">
<li><input type="text" id="numero_ordem" name="numero_ordem"/></li>
<li><select name="parlamentar" id="parlamentar">
{% for parlamentar in view.get_candidatos_orador %}
<option value="{{parlamentar.id}}">{{parlamentar.nome_parlamentar}}</option>
{% endfor %}
</select></li>
<li><input type="text" id="url_discurso" name="url_discurso" /></li>
</ul>
<input type="submit" value="Adicionar Orador" />
</form>
</fieldset>
{% endblock detail_content %}

27
templates/sessao/painel.html

@ -99,6 +99,9 @@ $(function() {
$('#discursoStart').click(function() { $('#discursoStart').click(function() {
if($('#discursoStart').text() == 'Iniciar'){ if($('#discursoStart').text() == 'Iniciar'){
$.post('/sistema/painel/cronometro', { tipo: 'Discurso', action: 'Start' } );
$('#discursoReset').hide(); $('#discursoReset').hide();
$('#discurso').runner('start'); $('#discurso').runner('start');
$('#discursoStart').text('Parar'); $('#discursoStart').text('Parar');
@ -107,6 +110,9 @@ $(function() {
$('#ordemStart').prop('disabled', true); $('#ordemStart').prop('disabled', true);
$('#ordemReset').prop('disabled', true); $('#ordemReset').prop('disabled', true);
}else{ }else{
$.post('/sistema/painel/cronometro', { tipo: 'Discurso', action: 'Stop' } );
$('#discursoReset').show(); $('#discursoReset').show();
$('#discurso').runner('stop'); $('#discurso').runner('stop');
$('#discursoStart').text('Iniciar'); $('#discursoStart').text('Iniciar');
@ -118,6 +124,9 @@ $(function() {
}); });
$('#discursoReset').click(function() { $('#discursoReset').click(function() {
$.post('/sistema/painel/cronometro', { tipo: 'Discurso', action: 'Reset' } );
$('#discurso').runner('stop'); $('#discurso').runner('stop');
$('#discurso').runner('reset'); $('#discurso').runner('reset');
}); });
@ -134,6 +143,9 @@ $(function() {
$('#aparteStart').click(function(){ $('#aparteStart').click(function(){
if($('#aparteStart').text() == 'Iniciar'){ if($('#aparteStart').text() == 'Iniciar'){
$.post('/sistema/painel/cronometro', { tipo: 'Aparte', action: 'Start' } );
$('#aparteReset').hide(); $('#aparteReset').hide();
$('#aparte').runner('start'); $('#aparte').runner('start');
$('#aparteStart').text('Parar'); $('#aparteStart').text('Parar');
@ -142,6 +154,9 @@ $(function() {
$('#ordemStart').prop('disabled', true); $('#ordemStart').prop('disabled', true);
$('#ordemReset').prop('disabled', true); $('#ordemReset').prop('disabled', true);
}else{ }else{
$.post('/sistema/painel/cronometro', { tipo: 'Aparte', action: 'Stop' } );
$('#aparteReset').show(); $('#aparteReset').show();
$('#aparte').runner('stop'); $('#aparte').runner('stop');
$('#aparteStart').text('Iniciar'); $('#aparteStart').text('Iniciar');
@ -153,6 +168,9 @@ $(function() {
}); });
$('#aparteReset').click(function() { $('#aparteReset').click(function() {
$.post('/sistema/painel/cronometro', { tipo: 'Aparte', action: 'Reset' } );
$('#aparte').runner('stop'); $('#aparte').runner('stop');
$('#aparte').runner('reset'); $('#aparte').runner('reset');
}); });
@ -169,6 +187,9 @@ $(function() {
$('#ordemStart').click(function() { $('#ordemStart').click(function() {
if($('#ordemStart').text() == 'Iniciar'){ if($('#ordemStart').text() == 'Iniciar'){
$.post('/sistema/painel/cronometro', { tipo: 'Ordem', action: 'Start' } );
$('#ordemReset').hide(); $('#ordemReset').hide();
$('#ordem').runner('start'); $('#ordem').runner('start');
$('#ordemStart').text('Parar'); $('#ordemStart').text('Parar');
@ -177,6 +198,9 @@ $(function() {
$('#aparteStart').prop('disabled', true); $('#aparteStart').prop('disabled', true);
$('#aparteReset').prop('disabled', true); $('#aparteReset').prop('disabled', true);
}else{ }else{
$.post('/sistema/painel/cronometro', { tipo: 'Ordem', action: 'Stop' } );
$('#ordemReset').show(); $('#ordemReset').show();
$('#ordem').runner('stop'); $('#ordem').runner('stop');
$('#ordemStart').text('Iniciar'); $('#ordemStart').text('Iniciar');
@ -188,6 +212,9 @@ $(function() {
}); });
$('#ordemReset').click(function() { $('#ordemReset').click(function() {
$.post('/sistema/painel/cronometro', { tipo: 'Ordem', action: 'Reset' } );
$('#ordem').runner('stop'); $('#ordem').runner('stop');
$('#ordem').runner('reset'); $('#ordem').runner('reset');
}); });

1
templates/sessao/sessaoplenaria_detail.html

@ -7,6 +7,7 @@
<dd><a href="{% url 'sessaoplenaria:expediente' object.pk %}" class="button secondary">{% trans 'Expediente' %}</a></dd> <dd><a href="{% url 'sessaoplenaria:expediente' object.pk %}" class="button secondary">{% trans 'Expediente' %}</a></dd>
<dd><a href="{% url 'sessaoplenaria:presenca' object.pk %}" class="button secondary">{% trans 'Presença' %}</a></dd> <dd><a href="{% url 'sessaoplenaria:presenca' object.pk %}" class="button secondary">{% trans 'Presença' %}</a></dd>
<dd><a href="{% url 'sessaoplenaria:presencaordemdia' object.pk %}" class="button secondary">{% trans 'Presença Ordem do Dia' %}</a></dd> <dd><a href="{% url 'sessaoplenaria:presencaordemdia' object.pk %}" class="button secondary">{% trans 'Presença Ordem do Dia' %}</a></dd>
<dd><a href="{% url 'sessaoplenaria:oradorexpediente' object.pk %}" class="button secondary">{% trans 'Oradores do Expediente' %}</a></dd>
<dd><a href="{% url 'sessaoplenaria:painel' object.pk %}" class="button secondary">{% trans 'Painel Eletrônico' %}</a></dd> <dd><a href="{% url 'sessaoplenaria:painel' object.pk %}" class="button secondary">{% trans 'Painel Eletrônico' %}</a></dd>
</dl> </dl>
{% endblock sections_nav %} {% endblock sections_nav %}

Loading…
Cancel
Save