|
|
@ -1,21 +1,19 @@ |
|
|
|
import datetime |
|
|
|
from datetime import date |
|
|
|
|
|
|
|
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) |
|
|
|
TipoResultadoVotacao, VotoParlamentar) |
|
|
|
|
|
|
|
from .models import Cronometro |
|
|
|
|
|
|
|
|
|
|
|
cronometro_painel_crud = build_crud( |
|
|
|
Cronometro, '', [ |
|
|
|
|
|
|
@ -46,7 +44,7 @@ def controlador_painel(request): |
|
|
|
|
|
|
|
|
|
|
|
def painel_view(request, pk): |
|
|
|
context = {'head_title': 'Painel Plenário', 'sessao_id': pk} |
|
|
|
context = {'head_title': 'Painel Plenário', 'sessao_id': pk} |
|
|
|
return render(request, 'painel/index.html', context) |
|
|
|
|
|
|
|
|
|
|
@ -75,54 +73,40 @@ def get_cronometro_status(request, name): |
|
|
|
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) |
|
|
|
|
|
|
|
status_painel = "FECHADO" |
|
|
|
|
|
|
|
def get_materia_aberta(pk): |
|
|
|
try: |
|
|
|
painel = Painel.objects.get(data_painel=datetime.date.today()) |
|
|
|
materia = OrdemDia.objects.filter( |
|
|
|
sessao_plenaria_id=pk, votacao_aberta=True).first() |
|
|
|
return materia |
|
|
|
except ObjectDoesNotExist: |
|
|
|
return False |
|
|
|
|
|
|
|
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) |
|
|
|
|
|
|
|
def get_last_materia(pk): |
|
|
|
try: |
|
|
|
materia = OrdemDia.objects.filter( |
|
|
|
sessao_plenaria_id=pk).order_by('-data_ordem').first() |
|
|
|
return materia |
|
|
|
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) |
|
|
|
return None |
|
|
|
|
|
|
|
|
|
|
|
# # 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. |
|
|
|
def get_presentes(pk, response, materia): |
|
|
|
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 |
|
|
|
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) |
|
|
|
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) |
|
|
|
|
|
|
|
# Presença Ordem do dia |
|
|
|
presenca_ordem_dia = PresencaOrdemDia.objects.filter( |
|
|
|
sessao_plenaria_id=sessao_plenaria_id) |
|
|
|
sessao_plenaria_id=pk) |
|
|
|
presentes_ordem_dia = [] |
|
|
|
for p in presenca_ordem_dia: |
|
|
|
nome_parlamentar = p.parlamentar.nome_parlamentar |
|
|
@ -133,76 +117,115 @@ def get_dados_painel(request, pk): |
|
|
|
}) |
|
|
|
num_presentes_ordem_dia = len(presentes_ordem_dia) |
|
|
|
|
|
|
|
try: |
|
|
|
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) |
|
|
|
|
|
|
|
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 = "" |
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
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') |
|
|
|
|
|
|
|
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) |
|
|
|
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) |
|
|
|