diff --git a/compilacao/migrations/0031_merge.py b/compilacao/migrations/0031_merge.py new file mode 100644 index 000000000..13e743923 --- /dev/null +++ b/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 = [ + ] diff --git a/painel/views.py b/painel/views.py index 186854b2c..ee17f9616 100644 --- a/painel/views.py +++ b/painel/views.py @@ -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)