Sistema de Apoio ao Processo Legislativo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

149 lines
5.0 KiB

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/controlador.html', context)
def cronometro_painel(request):
print(request.POST)
return HttpResponse({})
def painel_view(request, pk):
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_mensagem_view(request):
return render(request, 'painel/mensagem.html')
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
# TODO: make this response non cacheable,
# probably on jQuery site, but check Django too
# TODO: reduce number of database query hits by means
# of QuerySet wizardry.
def json_votacao(request, pk):
# 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.first()
# Magic!
# http://stackoverflow.com/questions/15507171/django-filter-query-foreign-key
# recuperar pela votacao.id
voto_parlamentar = VotoParlamentar.objects.filter(votacao_id=votacao.id)
votos = {}
for vp in voto_parlamentar:
votos[vp.parlamentar.nome_parlamentar] = vp.voto
ordem_dia = OrdemDia.objects.get(id=104)
sessaoplenaria_id = ordem_dia.sessao_plenaria_id
sessao_plenaria = SessaoPlenaria.objects.get(id=sessaoplenaria_id)
# Pra recuperar o partido do parlamentar
# tem que fazer OUTRA query, deve ter uma
# forma de fazer isso na base do join de data models.
filiacao = Filiacao.objects.filter(data_desfiliacao__isnull=True)
parlamentar_partido = {}
for f in filiacao:
parlamentar_partido[f.parlamentar.nome_parlamentar] = f.partido.sigla
# FIXME: id fixo para testes
presenca_ordem_dia = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=6)
presentes_ordem_dia = []
for p in presenca_ordem_dia:
nome_parlamentar = p.parlamentar.nome_parlamentar
presentes_ordem_dia.append(
{'nome': nome_parlamentar,
'partido': parlamentar_partido[nome_parlamentar],
'voto': votos.get(nome_parlamentar, '-')})
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)
presentes = len(presentes_sessao_plenaria)
tipo_resultado = votacao.tipo_resultado_votacao.nome.upper()
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,
"numero_votos_sim": votacao.numero_votos_sim,
"numero_votos_nao": votacao.numero_votos_nao,
"numero_abstencoes": votacao.numero_abstencoes,
"total_votos": total_votos,
"presentes": presentes,
"tipo_resultado": tipo_resultado,
"presentes_ordem_dia": presentes_ordem_dia,
"presentes_sessao_plenaria": presentes_sessao_plenaria,
}
return JsonResponse(votacao_json)