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. 86
      templates/painel/index.html

5
painel/urls.py

@ -1,10 +1,11 @@
from django.conf.urls import include, url 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 = [ urlpatterns = [
url(r'^sistema/painel$', painel_view), url(r'^sistema/painel$', painel_view),
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', 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 import json
from parlamentares.models import Parlamentar 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 def json_votacao(request):
#print(PresencaOrdemDia.objects.all()) #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()) # Magic! http://stackoverflow.com/questions/15507171/django-filter-query-foreign-key
return HttpResponse(parlamentares, content_type='application/json') 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): 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): def painel_parlamentares_view(request):
return render(request, 'painel/parlamentares.html') return render(request, 'painel/parlamentares.html')

1
sapl/settings.py

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

86
templates/painel/index.html

@ -1,15 +1,17 @@
{% load i18n %}
{% load staticfiles %}
<!DOCTYPE HTML> <!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> <head>
<title>Painel jQuery</title>
<meta charset="UTF-8"> <meta charset="UTF-8">
<!-- TODO: does it need this head_title here? -->
<script src="js/json2.js"></script> <title>{% block head_title %}{% trans 'SAPL - Sistema de Apoio ao Processo Legislativo' %}{% endblock %}</title>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script> <script type="text/javascript" src="{% static 'foundation/js/vendor/jquery.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">
<STYLE type="text/css"> <STYLE type="text/css">
@media screen { @media screen {
@ -23,7 +25,6 @@
var counter = 1; var counter = 1;
(function poll() { (function poll() {
$.ajax({ $.ajax({
//url: "http://localhost:8000/sistema/painel/json",
url: $("#json_url").val(), url: $("#json_url").val(),
type: "GET", type: "GET",
success: function(data) { success: function(data) {
@ -31,27 +32,33 @@
//TODO: json spitted out is very complex, have to simplify/flat it //TODO: json spitted out is very complex, have to simplify/flat it
//TODO: probably building it by hand on REST side //TODO: probably building it by hand on REST side
var list = $("#parlamentares"); console.debug(data)
list.children().remove();
//select 10 random names (for tests purposes only) var presentes = $("#parlamentares");
var newList = Array(); presentes.children().remove();
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;
});
// ---
jQuery.each(newList, function(index, value) { presentes_ordem_dia = data.presentes_ordem_dia
parlamentar = value['fields']; jQuery.each(presentes_ordem_dia, function(index, value) {
$('<li />', {text: parlamentar.nome_parlamentar }).appendTo(list); console.log(value)
parlamentar = value
$('<li />', {text: parlamentar }).appendTo(presentes);
}); });
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").text(counter);
counter++; counter++;
}, },
@ -60,16 +67,33 @@
}, },
dataType: "json", dataType: "json",
complete: setTimeout(function() {poll()}, 5000), complete: setTimeout(function() {poll()}, 5000),
timeout: 2000 timeout: 20000 // TODO: decrease
}) })
})(); })();
}); });
</script> </script>
</head> </head>
<body> <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> <h2>Ajax refresh counter: <span id="counter"></span></h2>
<ul id="parlamentares"> <span id="sessao_plenaria"></span><br/>
</ul> <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> </body>
</html> </html>

Loading…
Cancel
Save