Browse Source

Add more fields to Painel

pull/6/head
Edward Ribeiro 10 years ago
parent
commit
34df7dfc82
  1. 5
      painel/urls.py
  2. 61
      painel/views.py
  3. 1
      sapl/settings.py
  4. 84
      templates/painel/index.html

5
painel/urls.py

@ -1,10 +1,11 @@
from django.conf.urls import include, url
from . views import (json_view, painel_view, painel_parlamentares_view, painel_votacao_view)
from . views import (json_presenca, json_votacao, painel_view, painel_parlamentares_view, painel_votacao_view)
urlpatterns = [
url(r'^sistema/painel$', painel_view),
url(r'^sistema/painel/parlamentares', painel_parlamentares_view),
url(r'^sistema/painel/votacao', painel_votacao_view),
url(r'^sistema/painel/json', json_view, name='json_view'),
url(r'^sistema/painel/json_presenca', json_presenca, name='json_presenca'),
url(r'^sistema/painel/json_votacao', json_votacao, name='json_votacao'),
]

61
painel/views.py

@ -6,20 +6,65 @@ from django.core import serializers
import json
from parlamentares.models import Parlamentar
from sessao.models import PresencaOrdemDia
from sessao.models import SessaoPlenaria, SessaoPlenariaPresenca, PresencaOrdemDia, RegistroVotacao, VotoParlamentar, OrdemDia, PresencaOrdemDia
def json_view(request):
# REST web services
def json_presenca(request):
presencas = PresencaOrdemDia.objects.filter(sessao_plenaria_id = 50)
parlamentares = []
for p in presencas:
parlamentares.append(p.parlamentar)
#parlamentares = serializers.serialize('json', Parlamentar.objects.all())
parlamentares = serializers.serialize('json', parlamentares)
return HttpResponse(parlamentares, content_type='application/json')
#return JsonResponse(data) # work with python dict
#error when trying to retrieve
#print(PresencaOrdemDia.objects.all())
def json_votacao(request):
#TODO: se tentar usar objects.get(ordem_id = 104 ocorre a msg: 'RegistroVotacao' object does not support indexing
#TODO; tratar o caso de vir vazio
votacao = RegistroVotacao.objects.filter(ordem_id = 104)[0]
parlamentares = serializers.serialize('json', Parlamentar.objects.all())
return HttpResponse(parlamentares, content_type='application/json')
# Magic! http://stackoverflow.com/questions/15507171/django-filter-query-foreign-key
voto_parlamentar = VotoParlamentar.objects.filter(votacao__ordem__id = 140)
#return JsonResponse(data) # work with python dict
ordem_dia = OrdemDia.objects.get(id = 104)
sessaoplenaria_id = ordem_dia.sessao_plenaria_id
sessao_plenaria = SessaoPlenaria.objects.get(id = sessaoplenaria_id)
presenca_ordem_dia = PresencaOrdemDia.objects.filter(sessao_plenaria_id = sessaoplenaria_id)
presentes_ordem_dia = []
for p in presenca_ordem_dia:
presentes_ordem_dia.append(p.parlamentar.nome_parlamentar)
presentes_ordem_dia.sort()
total_votos = votacao.numero_votos_sim + votacao.numero_votos_nao + votacao.numero_abstencoes
sessao_plenaria_presenca = SessaoPlenariaPresenca.objects.filter(id = sessaoplenaria_id)
presentes_sessao_plenaria = []
for p in sessao_plenaria_presenca:
presentes_sessao_plenaria.append(p.parlamentar.nome_parlamentar)
votacao_json = {"sessao_plenaria": str(sessao_plenaria),
"sessao_plenaria_data": sessao_plenaria.data_inicio,
"sessao_plenaria_hora_inicio": sessao_plenaria.hora_inicio,
"materia_legislativa_texto": ordem_dia.materia.ementa,
"observacao_materia": ordem_dia.materia.observacao,
"tipo_votacao": ordem_dia.tipo_votacao, # TODO: verbose name
"numero_votos_sim": votacao.numero_votos_sim,
"numero_votos_nao": votacao.numero_votos_nao,
"numero_abstencoes": votacao.numero_abstencoes,
"total_votos": total_votos,
"tipo_resultado": votacao.tipo_resultado_votacao.nome.upper(),
"presentes_ordem_dia": presentes_ordem_dia,
"presentes_sessao_plenaria": presentes_sessao_plenaria,
}
return JsonResponse(votacao_json)
# UI views
def painel_view(request):
return render(request, 'painel/index.html')
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')

1
sapl/settings.py

@ -49,6 +49,7 @@ INSTALLED_APPS = (
'materia',
'norma',
'lexml',
'painel',
'protocoloadm',
# more

84
templates/painel/index.html

@ -1,15 +1,17 @@
{% load i18n %}
{% load staticfiles %}
<!DOCTYPE HTML>
<html lang="pt-br">
<!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]-->
<!--[if gt IE 8]><!-->
<html lang="en">
<!--<![endif]-->
<head>
<title>Painel jQuery</title>
<meta charset="UTF-8">
<script src="js/json2.js"></script>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<!-- 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 {
@ -23,7 +25,6 @@
var counter = 1;
(function poll() {
$.ajax({
//url: "http://localhost:8000/sistema/painel/json",
url: $("#json_url").val(),
type: "GET",
success: function(data) {
@ -31,26 +32,32 @@
//TODO: json spitted out is very complex, have to simplify/flat it
//TODO: probably building it by hand on REST side
var list = $("#parlamentares");
list.children().remove();
console.debug(data)
var presentes = $("#parlamentares");
presentes.children().remove();
//select 10 random names (for tests purposes only)
var newList = Array();
for (i = 0; i < 10; i++) {
newList[i] = data[Math.floor(Math.random() * data.length)]
}
newList.sort(function(a,b) {
if (a['fields'].nome_parlamentar < b['fields'].nome_parlamentar) return -1;
else if (a['fields'].nome_parlamentar > b['fields'].nome_parlamentar) return 1;
else return 0;
presentes_ordem_dia = data.presentes_ordem_dia
jQuery.each(presentes_ordem_dia, function(index, value) {
console.log(value)
parlamentar = value
$('<li />', {text: parlamentar }).appendTo(presentes);
});
// ---
jQuery.each(newList, function(index, value) {
parlamentar = value['fields'];
$('<li />', {text: parlamentar.nome_parlamentar }).appendTo(list);
});
var votacao = $("#votacao")
votacao.children().remove()
votacao.append("<li>Sim: " + data["numero_votos_sim"] + "</li>")
votacao.append("<li>Não: " + data["numero_votos_nao"] + "</li>")
votacao.append("<li>Abstenções: " + data["numero_abstencoes"] + "</li>")
votacao.append("<li>Total votos: " + data["total_votos"] + "</li>")
$("#sessao_plenaria").text(data["sessao_plenaria"])
$("#sessao_plenaria_data").text("Data Início: " + data["sessao_plenaria_data"])
$("#sessao_plenaria_hora_inicio").text("Hora Início: " + data["sessao_plenaria_hora_inicio"])
$("#materia_legislativa_texto").text(data["materia_legislativa_texto"])
$("#observacao_materia").text(data["observacao_materia"])
$("#resultado_votacao").text(data["tipo_resultado"])
$("#counter").text(counter);
counter++;
@ -60,16 +67,33 @@
},
dataType: "json",
complete: setTimeout(function() {poll()}, 5000),
timeout: 2000
timeout: 20000 // TODO: decrease
})
})();
});
</script>
</head>
<body>
<input id="json_url" type="hidden" value="{% url 'json_view' %}">
<h1>{{ context.title }}</h1>
<input id="json_url" type="hidden" value="{% url 'json_votacao' %}">
<h2>Ajax refresh counter: <span id="counter"></span></h2>
<ul id="parlamentares">
</ul>
<span id="sessao_plenaria"></span><br/>
<span id="sessao_plenaria_data"></span><br/>
<span id="sessao_plenaria_hora_inicio"></span></br>
<table>
<tr>
<td>
<ul id="parlamentares">
</ul>
</td>
<td>
<ul id="votacao">
</ul>
</td>
</tr>
</table>
<span id="materia_legislativa_texto"></span><br/>
<span id="resultado_votacao"></span><br/>
<span id="observacao_materia"></span>
</body>
</html>

Loading…
Cancel
Save