Browse Source

Refactor painel

pull/44/head
Eduardo Edson Batista Cordeiro Alves 9 years ago
parent
commit
2540bdd796
  1. 15
      compilacao/migrations/0031_merge.py
  2. 207
      painel/views.py

15
compilacao/migrations/0031_merge.py

@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0030_auto_20151203_1114'),
('compilacao', '0030_auto_20151203_1117'),
]
operations = [
]

207
painel/views.py

@ -1,21 +1,19 @@
import datetime
from datetime import date from datetime import date
import datetime
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpResponse, JsonResponse from django.http import HttpResponse, JsonResponse
from django.shortcuts import render from django.shortcuts import render
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from painel.models import Painel from painel.models import Painel
from parlamentares.models import Filiacao from parlamentares.models import Filiacao
from sapl.crud import build_crud from sapl.crud import build_crud
from sessao.models import (OrdemDia, PresencaOrdemDia, RegistroVotacao, from sessao.models import (OrdemDia, PresencaOrdemDia, RegistroVotacao,
SessaoPlenaria, SessaoPlenariaPresenca, SessaoPlenaria, SessaoPlenariaPresenca,
VotoParlamentar) TipoResultadoVotacao, VotoParlamentar)
from .models import Cronometro from .models import Cronometro
cronometro_painel_crud = build_crud( cronometro_painel_crud = build_crud(
Cronometro, '', [ Cronometro, '', [
@ -75,54 +73,40 @@ def get_cronometro_status(request, name):
return cronometro return cronometro
def get_dados_painel(request, pk): def get_materia_aberta(pk):
# Sessão Plenária
sessao_plenaria_id = pk
sessao_plenaria = SessaoPlenaria.objects.get(id=sessao_plenaria_id)
status_painel = "FECHADO"
try: 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: except ObjectDoesNotExist:
response = {"sessao_plenaria": str(sessao_plenaria), return None
"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 def get_presentes(pk, response, materia):
# # tem que fazer OUTRA query, deve ter uma
# # forma de fazer isso na base do join de data models.
filiacao = Filiacao.objects.filter( filiacao = Filiacao.objects.filter(
data_desfiliacao__isnull=True, parlamentar__ativo=True) data_desfiliacao__isnull=True, parlamentar__ativo=True)
parlamentar_partido = {} parlamentar_partido = {}
for f in filiacao: 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_presenca = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=sessao_plenaria_id) sessao_plenaria_id=pk)
presentes_sessao_plenaria = [ presentes_sessao_plenaria = [
p.parlamentar.nome_parlamentar for p in sessao_plenaria_presenca] p.parlamentar.nome_parlamentar for p in sessao_plenaria_presenca]
num_presentes_sessao_plen = len(presentes_sessao_plenaria) num_presentes_sessao_plen = len(presentes_sessao_plenaria)
# Presença Ordem do dia
presenca_ordem_dia = PresencaOrdemDia.objects.filter( presenca_ordem_dia = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=sessao_plenaria_id) sessao_plenaria_id=pk)
presentes_ordem_dia = [] presentes_ordem_dia = []
for p in presenca_ordem_dia: for p in presenca_ordem_dia:
nome_parlamentar = p.parlamentar.nome_parlamentar nome_parlamentar = p.parlamentar.nome_parlamentar
@ -133,76 +117,115 @@ def get_dados_painel(request, pk):
}) })
num_presentes_ordem_dia = len(presentes_ordem_dia) 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: def get_votos(response, materia):
votacao = RegistroVotacao.objects.get( registro = RegistroVotacao.objects.get(
ordem_id=ordemdia.id, materia_id=ordemdia.materia.id) ordem=materia, materia=materia.materia)
numero_votos_sim = votacao.numero_votos_sim total = (registro.numero_votos_sim +
numero_votos_nao = votacao.numero_votos_nao registro.numero_votos_nao +
numero_abstencoes = votacao.numero_abstencoes registro.numero_abstencoes)
tipo_resultado = votacao.tipo_resultado_votacao.nome response.update({
votacao_id = votacao.id 'numero_votos_sim': registro.numero_votos_sim,
except ObjectDoesNotExist: 'numero_votos_nao': registro.numero_votos_nao,
votacao_id = -1 'numero_abstencoes': registro.numero_abstencoes,
numero_votos_sim = 0 'total_votos': total,
numero_votos_nao = 0 'tipo_resultado': registro.tipo_resultado_votacao.nome
numero_abstencoes = 0 })
tipo_resultado = "" return response
total_votos = numero_votos_sim + numero_votos_nao + numero_abstencoes
def get_votos_nominal(response, materia):
votos = {} 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: registro = RegistroVotacao.objects.get(
votacao_aberta = False ordem=materia, materia=materia.materia)
materia_titulo = ""
materia_legislativa_texto = "" votos_parlamentares = VotoParlamentar.objects.filter(
materia_observacao = "" votacao_id=registro.id)
tipo_votacao = ""
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_discurso = get_cronometro_status(request, 'discurso')
cronometro_aparte = get_cronometro_status(request, 'aparte') cronometro_aparte = get_cronometro_status(request, 'aparte')
cronometro_ordem = get_cronometro_status(request, 'ordem') cronometro_ordem = get_cronometro_status(request, 'ordem')
response = {"sessao_plenaria": str(sessao_plenaria), response = {
"sessao_plenaria_data": sessao_plenaria.data_inicio.strftime("%d/%m/%Y"), 'sessao_plenaria': str(sessao),
"sessao_plenaria_hora_inicio": sessao_plenaria.hora_inicio, 'sessao_plenaria_data': sessao.data_inicio.strftime('%d/%m/%Y'),
"materia_titulo": materia_titulo, 'sessao_plenaria_hora_inicio': sessao.hora_inicio,
"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_aparte": cronometro_aparte,
"cronometro_discurso": cronometro_discurso, "cronometro_discurso": cronometro_discurso,
"cronometro_ordem": cronometro_ordem, "cronometro_ordem": cronometro_ordem,
"status_painel": status_painel,
} }
return JsonResponse(response) 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)

Loading…
Cancel
Save