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. 76
      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,
painel_view, painel_votacao_view)
from .views import (controlador_painel, cronometro_painel_crud, json_presenca,
json_votacao, painel_parlamentares_view, painel_view,
painel_votacao_view)
urlpatterns = [
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/votacao', painel_votacao_view),
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/cronometro',
include(cronometro_painel_crud.urls)),
]

76
painel/views.py

@ -1,16 +1,72 @@
from datetime import date
from django.core import serializers
from django.http import HttpResponse, JsonResponse
from django.shortcuts import render
from django.utils.translation import ugettext_lazy as _
from painel.models import Painel
from parlamentares.models import Filiacao
from sapl.crud import build_crud
from sessao.models import (OrdemDia, PresencaOrdemDia, RegistroVotacao,
SessaoPlenaria, SessaoPlenariaPresenca,
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
def json_presenca(request):
presencas = PresencaOrdemDia.objects.filter(sessao_plenaria_id=50)
parlamentares = []
@ -18,7 +74,7 @@ def json_presenca(request):
parlamentares.append(p.parlamentar)
# parlamentares = serializers.serialize('json', Parlamentar.objects.all())
parlamentares = serializers.serialize('json', parlamentares)
return HttpResponse(parlamentares, content_type='application/json')
return HttpResponse(parlamentares, content_type='application/json')
# return JsonResponse(data) # work with python dict
@ -61,7 +117,7 @@ def json_votacao(request):
nome_parlamentar = p.parlamentar.nome_parlamentar
presentes_ordem_dia.append(
{'nome': nome_parlamentar,
'partido': parlamentar_partido[nome_parlamentar],
'partido': parlamentar_partido[nome_parlamentar],
'voto': votos.get(nome_parlamentar, '-')})
total_votos = votacao.numero_votos_sim + \
@ -93,19 +149,3 @@ def json_votacao(request):
"presentes_sessao_plenaria": presentes_sessao_plenaria,
}
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
ipdb
isort
autopep8
pygraphviz==1.3rc2
pytest-ipdb==0.1-prerelease2

1
requirements/requirements.txt

@ -12,4 +12,5 @@ libsass
psycopg2
pytz
PyYAML
trml2pdf>=0.3
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 sessao.views import (ExpedienteView, PainelView, PresencaOrdemDiaView,
PresencaView, sessao_crud, tipo_expediente_crud,
tipo_resultado_votacao_crud, tipo_sessao_crud)
from sessao.views import (ExpedienteView, OradorExpedienteDelete,
OradorExpedienteView, PainelView,
PresencaOrdemDiaView, PresencaView, sessao_crud,
tipo_expediente_crud, tipo_resultado_votacao_crud,
tipo_sessao_crud)
urlpatterns_sessao = sessao_crud.urlpatterns + [
url(r'^(?P<pk>\d+)/expediente$',
@ -14,6 +15,11 @@ urlpatterns_sessao = sessao_crud.urlpatterns + [
url(r'^(?P<pk>\d+)/presencaordemdia$',
PresencaOrdemDiaView.as_view(),
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

102
sessao/views.py

@ -2,11 +2,13 @@ from django import forms
from django.utils.translation import ugettext_lazy as _
from django.views.generic.edit import FormMixin
from extra_views import InlineFormSetView
from parlamentares.models import Parlamentar
from sapl.crud import build_crud
from .models import (ExpedienteMateria, ExpedienteSessao, OrdemDia,
PresencaOrdemDia, RegistroVotacao, SessaoPlenaria,
SessaoPlenariaPresenca, TipoExpediente,
from .models import (ExpedienteMateria, ExpedienteSessao, OradorExpediente,
OrdemDia, PresencaOrdemDia, RegistroVotacao,
SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente,
TipoResultadoVotacao, TipoSessaoPlenaria)
tipo_sessao_crud = build_crud(
@ -211,3 +213,97 @@ class PresencaOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
yield (parlamentar, False)
else:
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() {
if($('#discursoStart').text() == 'Iniciar'){
$.post('/sistema/painel/cronometro', { tipo: 'Discurso', action: 'Start' } );
$('#discursoReset').hide();
$('#discurso').runner('start');
$('#discursoStart').text('Parar');
@ -107,6 +110,9 @@ $(function() {
$('#ordemStart').prop('disabled', true);
$('#ordemReset').prop('disabled', true);
}else{
$.post('/sistema/painel/cronometro', { tipo: 'Discurso', action: 'Stop' } );
$('#discursoReset').show();
$('#discurso').runner('stop');
$('#discursoStart').text('Iniciar');
@ -118,6 +124,9 @@ $(function() {
});
$('#discursoReset').click(function() {
$.post('/sistema/painel/cronometro', { tipo: 'Discurso', action: 'Reset' } );
$('#discurso').runner('stop');
$('#discurso').runner('reset');
});
@ -134,6 +143,9 @@ $(function() {
$('#aparteStart').click(function(){
if($('#aparteStart').text() == 'Iniciar'){
$.post('/sistema/painel/cronometro', { tipo: 'Aparte', action: 'Start' } );
$('#aparteReset').hide();
$('#aparte').runner('start');
$('#aparteStart').text('Parar');
@ -142,6 +154,9 @@ $(function() {
$('#ordemStart').prop('disabled', true);
$('#ordemReset').prop('disabled', true);
}else{
$.post('/sistema/painel/cronometro', { tipo: 'Aparte', action: 'Stop' } );
$('#aparteReset').show();
$('#aparte').runner('stop');
$('#aparteStart').text('Iniciar');
@ -153,6 +168,9 @@ $(function() {
});
$('#aparteReset').click(function() {
$.post('/sistema/painel/cronometro', { tipo: 'Aparte', action: 'Reset' } );
$('#aparte').runner('stop');
$('#aparte').runner('reset');
});
@ -169,6 +187,9 @@ $(function() {
$('#ordemStart').click(function() {
if($('#ordemStart').text() == 'Iniciar'){
$.post('/sistema/painel/cronometro', { tipo: 'Ordem', action: 'Start' } );
$('#ordemReset').hide();
$('#ordem').runner('start');
$('#ordemStart').text('Parar');
@ -177,6 +198,9 @@ $(function() {
$('#aparteStart').prop('disabled', true);
$('#aparteReset').prop('disabled', true);
}else{
$.post('/sistema/painel/cronometro', { tipo: 'Ordem', action: 'Stop' } );
$('#ordemReset').show();
$('#ordem').runner('stop');
$('#ordemStart').text('Iniciar');
@ -188,6 +212,9 @@ $(function() {
});
$('#ordemReset').click(function() {
$.post('/sistema/painel/cronometro', { tipo: 'Ordem', action: 'Reset' } );
$('#ordem').runner('stop');
$('#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: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: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>
</dl>
{% endblock sections_nav %}

Loading…
Cancel
Save