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.

209 lines
7.3 KiB

from datetime import date
9 years ago
import datetime
from django.core.exceptions import ObjectDoesNotExist
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)]],
])
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)
9 years ago
def painel_view(request, pk):
9 years ago
context = {'head_title': 'Painel Plenário', 'sessao_id': pk}
return render(request, 'painel/index.html', 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')
9 years ago
def cronometro_painel(request):
request.session[request.GET['tipo']] = request.GET['action']
return HttpResponse({})
9 years ago
def get_cronometro_status(request, name):
try:
cronometro = request.session[name]
except KeyError:
cronometro = ''
return cronometro
def get_dados_painel(request, pk):
# Sessão Plenária
sessao_plenaria_id = pk
sessao_plenaria = SessaoPlenaria.objects.get(id=sessao_plenaria_id)
9 years ago
status_painel = "FECHADO"
try:
painel = Painel.objects.get(data_painel=datetime.date.today())
if painel.aberto:
status_painel = "ABERTO"
else:
response = {"sessao_plenaria": str(sessao_plenaria),
"sessao_plenaria_data": sessao_plenaria.data_inicio.strftime("%d/%m/%Y"),
"sessao_plenaria_hora_inicio": sessao_plenaria.hora_inicio,
"status_painel": status_painel,
}
return JsonResponse(response)
except ObjectDoesNotExist:
response = {"sessao_plenaria": str(sessao_plenaria),
"sessao_plenaria_data": sessao_plenaria.data_inicio.strftime("%d/%m/%Y"),
"sessao_plenaria_hora_inicio": sessao_plenaria.hora_inicio,
"status_painel": status_painel,
}
return JsonResponse(response)
# # 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__ativo=True)
parlamentar_partido = {}
for f in filiacao:
parlamentar_partido[f.parlamentar.nome_parlamentar] = f.partido.sigla
# Presença Sessão Plenária
sessao_plenaria_presenca = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=sessao_plenaria_id)
presentes_sessao_plenaria = [
p.parlamentar.nome_parlamentar for p in sessao_plenaria_presenca]
num_presentes_sessao_plen = len(presentes_sessao_plenaria)
# Presença Ordem do dia
presenca_ordem_dia = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=sessao_plenaria_id)
presentes_ordem_dia = []
for p in presenca_ordem_dia:
nome_parlamentar = p.parlamentar.nome_parlamentar
presentes_ordem_dia.append(
{'id': p.id,
'nome': nome_parlamentar,
'partido': parlamentar_partido[nome_parlamentar],
})
num_presentes_ordem_dia = len(presentes_ordem_dia)
try:
ordemdia = OrdemDia.objects.get(
sessao_plenaria_id=sessao_plenaria_id, votacao_aberta=True)
votacao_aberta = True
materia_legislativa_texto = ordemdia.materia.ementa
materia_observacao = ordemdia.materia.observacao
tipo_votacao = ordemdia.tipo_votacao
# materia_titulo = ordemdia.materia
materia_titulo = ""
try:
votacao = RegistroVotacao.objects.get(
ordem_id=ordemdia.id, materia_id=ordemdia.materia.id)
numero_votos_sim = votacao.numero_votos_sim
numero_votos_nao = votacao.numero_votos_nao
numero_abstencoes = votacao.numero_abstencoes
tipo_resultado = votacao.tipo_resultado_votacao.nome
votacao_id = votacao.id
except ObjectDoesNotExist:
votacao_id = -1
numero_votos_sim = 0
numero_votos_nao = 0
numero_abstencoes = 0
tipo_resultado = ""
total_votos = numero_votos_sim + numero_votos_nao + numero_abstencoes
votos = {}
try:
voto_parlamentar = VotoParlamentar.objects.filter(
votacao_id=votacao_id)
for vp in voto_parlamentar:
votos[vp.parlamentar.id] = vp.voto
except ObjectDoesNotExist:
pass
except ObjectDoesNotExist:
votacao_aberta = False
materia_titulo = ""
materia_legislativa_texto = ""
materia_observacao = ""
tipo_votacao = ""
cronometro_discurso = get_cronometro_status(request, 'discurso')
cronometro_aparte = get_cronometro_status(request, 'aparte')
cronometro_ordem = get_cronometro_status(request, 'ordem')
9 years ago
response = {"sessao_plenaria": str(sessao_plenaria),
"sessao_plenaria_data": sessao_plenaria.data_inicio.strftime("%d/%m/%Y"),
"sessao_plenaria_hora_inicio": sessao_plenaria.hora_inicio,
"materia_titulo": materia_titulo,
"materia_legislativa_texto": materia_legislativa_texto,
"materia_observacao": materia_observacao,
"tipo_votacao": tipo_votacao,
"presentes_ordem_dia": presentes_ordem_dia,
"num_presentes_ordem_dia": num_presentes_ordem_dia,
"presentes_sessao_plenaria": presentes_sessao_plenaria,
"num_presentes_sessao_plenaria": num_presentes_sessao_plen,
"votacao_aberta": votacao_aberta,
"numero_votos_sim": numero_votos_sim,
"numero_votos_nao": numero_votos_nao,
"numero_abstencoes": numero_abstencoes,
"total_votos": total_votos,
"tipo_resultado": tipo_resultado,
"votos": votos,
"cronometro_aparte": cronometro_aparte,
"cronometro_discurso": cronometro_discurso,
"cronometro_ordem": cronometro_ordem,
"status_painel": status_painel,
}
return JsonResponse(response)