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.

232 lines
7.2 KiB

9 years ago
import datetime
from datetime import date
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,
9 years ago
TipoResultadoVotacao, 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}
9 years ago
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
9 years ago
def get_materia_aberta(pk):
9 years ago
try:
9 years ago
materia = OrdemDia.objects.filter(
sessao_plenaria_id=pk, votacao_aberta=True).first()
return materia
except ObjectDoesNotExist:
return False
9 years ago
9 years ago
def get_last_materia(pk):
try:
materia = OrdemDia.objects.filter(
sessao_plenaria_id=pk).order_by('-data_ordem').first()
return materia
9 years ago
except ObjectDoesNotExist:
9 years ago
return None
9 years ago
9 years ago
def get_presentes(pk, response, materia):
filiacao = Filiacao.objects.filter(
data_desfiliacao__isnull=True, parlamentar__ativo=True)
parlamentar_partido = {}
for f in filiacao:
9 years ago
parlamentar_partido[
f.parlamentar.nome_parlamentar] = f.partido.sigla
sessao_plenaria_presenca = SessaoPlenariaPresenca.objects.filter(
9 years ago
sessao_plenaria_id=pk)
presentes_sessao_plenaria = [
p.parlamentar.nome_parlamentar for p in sessao_plenaria_presenca]
num_presentes_sessao_plen = len(presentes_sessao_plenaria)
presenca_ordem_dia = PresencaOrdemDia.objects.filter(
9 years ago
sessao_plenaria_id=pk)
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)
9 years ago
if materia.tipo_votacao == 1:
tipo_votacao = 'Simbólica'
elif materia.tipo_votacao == 2:
tipo_votacao = 'Nominal'
elif materia.tipo_votacao == 3:
tipo_votacao = 'Secreta'
response.update({
'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,
'status_painel': 'ABERTO',
'msg_painel': 'Votação aberta!',
'numero_votos_sim': 0,
'numero_votos_nao': 0,
'numero_abstencoes': 0,
'total_votos': 0,
'tipo_resultado': tipo_votacao})
return response
def response_null_materia(response):
response.update({
'status_painel': 'FECHADO',
'msg_painel': 'Nenhuma matéria disponivel para votação.'
})
return JsonResponse(response)
9 years ago
def get_votos(response, materia):
registro = RegistroVotacao.objects.get(
ordem=materia, materia=materia.materia)
total = (registro.numero_votos_sim +
registro.numero_votos_nao +
registro.numero_abstencoes)
response.update({
'numero_votos_sim': registro.numero_votos_sim,
'numero_votos_nao': registro.numero_votos_nao,
'numero_abstencoes': registro.numero_abstencoes,
'total_votos': total,
'tipo_resultado': registro.tipo_resultado_votacao.nome
})
return response
9 years ago
def get_votos_nominal(response, materia):
votos = {}
registro = RegistroVotacao.objects.get(
ordem=materia, materia=materia.materia)
votos_parlamentares = VotoParlamentar.objects.filter(
votacao_id=registro.id)
for v in votos_parlamentares:
votos.update({v.parlamentar.id: {
'parlamentar': v.parlamentar.nome_parlamentar,
'voto': str(v.voto)
}})
total = (registro.numero_votos_sim +
registro.numero_votos_nao +
registro.numero_abstencoes)
response.update({
'numero_votos_sim': registro.numero_votos_sim,
'numero_votos_nao': registro.numero_votos_nao,
'numero_abstencoes': registro.numero_abstencoes,
'total_votos': total,
'tipo_resultado': registro.tipo_resultado_votacao.nome,
'votos': votos
})
return response
def get_dados_painel(request, pk):
sessao = SessaoPlenaria.objects.get(id=pk)
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),
'sessao_plenaria_data': sessao.data_inicio.strftime('%d/%m/%Y'),
'sessao_plenaria_hora_inicio': sessao.hora_inicio,
"cronometro_aparte": cronometro_aparte,
"cronometro_discurso": cronometro_discurso,
"cronometro_ordem": cronometro_ordem,
}
materia = get_materia_aberta(pk)
if materia:
return JsonResponse(get_presentes(pk, response, materia))
else:
materia = get_last_materia(pk)
if materia:
if materia.resultado:
if materia.tipo_votacao in [1, 3]:
return JsonResponse(
get_votos(get_presentes(
pk, response, materia), materia))
elif materia.tipo_votacao == 2:
return JsonResponse(
get_votos_nominal(get_presentes(
pk, response, materia), materia))
else:
return JsonResponse(get_presentes(pk, response, materia))
else:
return response_null_materia(response)